From d0920196534c14823bdefa0b1d66df4925cecbee Mon Sep 17 00:00:00 2001 From: Miroito Date: Wed, 1 Mar 2023 13:47:57 +0100 Subject: [PATCH] update index test --- client/src/components/paginated_data_table.rs | 2 +- client/tests/index.rs | 56 ++++++++++++++++++- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/client/src/components/paginated_data_table.rs b/client/src/components/paginated_data_table.rs index e3e7324..f900175 100644 --- a/client/src/components/paginated_data_table.rs +++ b/client/src/components/paginated_data_table.rs @@ -106,7 +106,7 @@ where option (value="40", selected=(*page_size_string.get()).eq("40")) { "40" } option (value="50", selected=(*page_size_string.get()).eq("50")) { "50" } } - div (class="flex flex-row p-2 bg-slate-200 dark:bg-slate-800 rounded-md") { + div (id="page_buttons", class="flex flex-row p-2 bg-slate-200 dark:bg-slate-800 rounded-md") { button (on:click=page_down,class="m-1 hover:font-bold") { "<<" } diff --git a/client/tests/index.rs b/client/tests/index.rs index 5bd0f35..9cc54dc 100644 --- a/client/tests/index.rs +++ b/client/tests/index.rs @@ -3,6 +3,8 @@ use perseus::wait_for_checkpoint; // This is is an E2E test with the following steps: // - Go to the index page +// - Try all page sizes and verify that they are respected +// - Try to go to page 2 // - Use the async select component to find any company // - Click on this company and verify that we arrived // - Come back to the root using the top left link @@ -12,9 +14,7 @@ use perseus::wait_for_checkpoint; // Run like this: // - Run any headless browser drive like geckodriver // - Run perseus test -// - The backend should be available with some data -// - run PERSEUS_RUN_WASM_TESTS=true cargo test -- --test-threads 1 -// (or use make test-client-cargo) +// - The backend should be available with at least 11 saved transactions #[perseus::test] async fn index(c: &mut Client) -> Result<(), fantoccini::error::CmdError> { c.goto("http://localhost:8080").await?; @@ -27,6 +27,56 @@ async fn index(c: &mut Client) -> Result<(), fantoccini::error::CmdError> { let title = c.find(Locator::Css("title")).await?.html(false).await?; assert!(title.contains("Fast Insiders")); + // Verify that the default table size is 20 + let page_size_select = c.find(Locator::Css("#size-select")).await?; + let default_page_size = page_size_select + .prop("value") + .await? + .expect("The value prop must be set"); + assert_eq!(default_page_size.parse::().unwrap(), 20); + + // Test all page sizes + let page_sizes = [20, 30, 40, 50, 10].iter(); + for page_size in page_sizes { + let page_size_select = c.find(Locator::Css("#size-select")).await?; + page_size_select + .select_by_value(&page_size.to_string()) + .await?; + + let table_rows = c.find_all(Locator::Css("table tr")).await?.iter().count(); + let page_size_select = c.find(Locator::Css("#size-select")).await?; + let browser_page_size = page_size_select + .prop("value") + .await? + .expect("The value prop must be set"); + assert_eq!(browser_page_size.parse::().unwrap(), *page_size); + assert_eq!(table_rows, page_size + 1); // The header also counts as a table row + } + + // Verify that we can change pages + let page_buttons = c.find_all(Locator::Css("#page_buttons button")).await?; + assert_eq!(page_buttons[0].text().await?, "<<"); + assert_eq!(page_buttons[1].text().await?, ">>"); + let page_numbers = c + .find(Locator::Css("#page_buttons div")) + .await? + .text() + .await? + .split("/") + .map(|x| x.parse().unwrap()) + .collect::>(); + assert_eq!(page_numbers[0], 1); + page_buttons[1].click().await?; + let new_page_numbers = c + .find(Locator::Css("#page_buttons div")) + .await? + .text() + .await? + .split("/") + .map(|x| x.parse().unwrap()) + .collect::>(); + assert_eq!(new_page_numbers[0], page_numbers[0] + 1); + // let table = c.find(Locator::Css("table")).await?.html(true).await?; let filter_button = c.find(Locator::Css("#main button")).await?; filter_button.click().await?;