Skip to content

Commit

Permalink
XC-240: Add unit tests for pagination
Browse files Browse the repository at this point in the history
  • Loading branch information
lpahlavi committed Dec 11, 2024
1 parent 1d4b2d4 commit d3b9e59
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 7 deletions.
7 changes: 5 additions & 2 deletions rs/ethereum/cketh/minter/src/dashboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,9 +245,12 @@ impl DashboardTablePagination {
let pages = (0..num_items)
.step_by(page_size)
.enumerate()
.map(|(index, offset)| DashboardTablePage { index, offset })
.map(|(index, offset)| DashboardTablePage {
index: index + 1,
offset,
})
.collect();
let current_page_index = current_offset / page_size;
let current_page_index = current_offset / page_size + 1;
Self {
table_id: String::from(table_reference),
page_offset_query_param: String::from(page_offset_query_param),
Expand Down
142 changes: 141 additions & 1 deletion rs/ethereum/cketh/minter/src/dashboard/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use ic_cketh_minter::state::transactions::{
create_transaction, Erc20WithdrawalRequest, EthWithdrawalRequest, ReimbursementIndex,
WithdrawalRequest,
};
use ic_cketh_minter::state::State;
use ic_cketh_minter::state::{MintedEvent, State};
use ic_cketh_minter::tx::{
Eip1559Signature, Eip1559TransactionRequest, GasFeeEstimate, SignedEip1559TransactionRequest,
TransactionPrice,
Expand Down Expand Up @@ -1001,6 +1001,81 @@ fn should_display_reimbursed_requests() {
);
}

#[test]
fn should_display_minted_events_pagination() {
DashboardAssert::assert_that(initial_dashboard()).has_no_elements_matching("#minted-events");

let dashboard = {
let mut state = initial_state();
add_minted_events(&mut state, 300);
let paging_parameters = DashboardPagingParameters {
minted_events_start: 100, // Second page.
..DashboardPagingParameters::default()
};
DashboardTemplate::from_state(&state, paging_parameters)
};

DashboardAssert::assert_that(dashboard)
.has_minted_events(
1,
&vec![
"0xf1ac37d920fa57d9caeebc7136fea591191250309ffca95ae0e8a7739de89cc2",
"200", // Events are displayed in order of decreasing index. Page 2 should have events 200 to 101.
"0xdd2851Cdd40aE6536831558DD46db62fAc7A844d",
"ckETH",
"10_000_000_000_000_000",
"k2t6j-2nvnp-4zjm3-25dtz-6xhaa-c7boj-5gayf-oj3xs-i43lp-teztq-6ae",
"1",
],
)
.has_minted_events_last_row_text(&vec!["Pages:", "1", "2", "3"])
.has_minted_events_last_row_links(&vec![
"?minted_events_start=0#minted-events",
"?minted_events_start=200#minted-events",
]);
}

#[test]
fn should_not_display_minted_events_pagination() {
DashboardAssert::assert_that(initial_dashboard()).has_no_elements_matching("#minted-events");

let dashboard = {
let mut state = initial_state();
add_minted_events(&mut state, 75); // less than 1 full page
DashboardTemplate::from_state(&state, DashboardPagingParameters::default())
};

DashboardAssert::assert_that(dashboard).has_minted_events_last_row_text(&vec![
"0xf1ac37d920fa57d9caeebc7136fea591191250309ffca95ae0e8a7739de89cc2",
"1",
"0xdd2851Cdd40aE6536831558DD46db62fAc7A844d",
"ckETH",
"10_000_000_000_000_000",
"k2t6j-2nvnp-4zjm3-25dtz-6xhaa-c7boj-5gayf-oj3xs-i43lp-teztq-6ae",
"1",
]);
}

#[test]
fn should_not_display_finalized_transactions_pagination() {
// todo()
}

#[test]
fn should_display_finalized_transactions_pagination() {
// todo()
}

#[test]
fn should_not_display_reimbursed_transactions_pagination() {
// todo()
}

#[test]
fn should_display_reimbursed_transactions_pagination() {
// todo()
}

fn initial_dashboard() -> DashboardTemplate {
DashboardTemplate::from_state(&initial_state(), DashboardPagingParameters::default())
}
Expand Down Expand Up @@ -1030,6 +1105,36 @@ fn initial_state_with_usdc_support() -> State {
state
}

fn add_minted_events(state: &mut State, num_events: u128) {
(1..=num_events).for_each(|index| {
state
.minted_events
.insert(event_source(index), minted_event(index));
});
}

fn minted_event(index: u128) -> MintedEvent {
MintedEvent {
deposit_event: ReceivedEthEvent {
log_index: LogIndex::new(index),
..received_eth_event()
}
.into(),
mint_block_index: LedgerMintIndex::new(1u64),
token_symbol: "ckETH".to_string(),
erc20_contract_address: None,
}
}

fn event_source(index: u128) -> EventSource {
EventSource {
transaction_hash: "0x05c6ec45699c9a6a4b1a4ea2058b0cee852ea2f19b18fb8313c04bf8156efde4"
.parse()
.unwrap(),
log_index: LogIndex::new(index),
}
}

fn received_eth_event() -> ReceivedEthEvent {
ReceivedEthEvent {
transaction_hash: "0xf1ac37d920fa57d9caeebc7136fea591191250309ffca95ae0e8a7739de89cc2"
Expand Down Expand Up @@ -1483,6 +1588,22 @@ mod assertions {
)
}

pub fn has_minted_events_last_row_text(&self, expected_value: &Vec<&str>) -> &Self {
self.has_table_row_string_value(
"#minted-events + table > tbody > tr:last-child",
expected_value,
"minted-events",
)
}

pub fn has_minted_events_last_row_links(&self, expected_value: &Vec<&str>) -> &Self {
self.has_table_row_links(
"#minted-events + table > tbody > tr:last-child",
expected_value,
"minted-events",
)
}

pub fn has_rejected_deposits(&self, row_index: u8, expected_value: &Vec<&str>) -> &Self {
self.has_table_row_string_value(
&format!("#rejected-deposits + table > tbody > tr:nth-child({row_index})"),
Expand Down Expand Up @@ -1551,6 +1672,25 @@ mod assertions {
self
}

fn has_table_row_links(
&self,
selector: &str,
expected_value: &Vec<&str>,
error_msg: &str,
) -> &Self {
let links = self
.select_only_one(selector)
.select(&Selector::parse("a").unwrap())
.map(|link| link.value().attr("href").expect("href not found"))
.collect::<Vec<_>>();
assert_eq!(
&links, expected_value,
"{}. Rendered html: {}",
error_msg, self.rendered_html
);
self
}

fn has_string_value(&self, selector: &str, expected_value: &str, error_msg: &str) -> &Self {
let actual_value = self.select_only_one(selector);
let string_value = actual_value.text().collect::<String>();
Expand Down
6 changes: 3 additions & 3 deletions rs/ethereum/cketh/minter/templates/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ <h3 id="minted-events">Minted events</h3>
<td class="numeric">{{ event.mint_block_index }}</td>
</tr>
{% endfor %}
{% if table.has_more_than_one_page() %}}{{ table.pagination }}{% endif %}
{% if table.has_more_than_one_page() %}}{{ table.pagination|safe }}{% endif %}
</tbody>
</table>
{% endif %}
Expand Down Expand Up @@ -389,7 +389,7 @@ <h3 id="finalized-transactions">Finalized Transactions ckETH → ETH and ckERC20
<td>{{ tx.status }}</td>
</tr>
{% endfor %}
{% if table.has_more_than_one_page() %}}{{ table.pagination }}{% endif %}
{% if table.has_more_than_one_page() %}}{{ table.pagination|safe }}{% endif %}
</tbody>
</table>
{% endif %}
Expand Down Expand Up @@ -431,7 +431,7 @@ <h3 id="reimbursed-transactions">Reimbursed Transactions</h3>
</tr>
{% endmatch %}
{% endfor %}
{% if table.has_more_than_one_page() %}}{{ table.pagination }}{% endif %}
{% if table.has_more_than_one_page() %}}{{ table.pagination|safe }}{% endif %}
</tbody>
</table>
{% endif %}
Expand Down
2 changes: 1 addition & 1 deletion rs/ethereum/cketh/minter/templates/pagination.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<td colspan='{{ table_width }}' style='text-align: right;'>
<b>Pages: </b>
{% for page in pages %}
{% if page.index != current_page_index %}
{% if page.index == current_page_index %}
{{ page.index }}&nbsp;
{% else %}
<a href='?{{ page_offset_query_param }}={{ page.offset }}#{{ table_id }}'>{{ page.index }}</a>&nbsp;
Expand Down

0 comments on commit d3b9e59

Please sign in to comment.