use fantoccini::{Client, Locator}; use perseus::wait_for_checkpoint; // This is is an E2E test with the following steps: // - Go to the index page // - 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 // - Find the first link in the table and click on it // - Verify that all the company names in the table of the new page are the same as the link we // clicked before // 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) #[perseus::test] async fn index(c: &mut Client) -> Result<(), fantoccini::error::CmdError> { c.goto("http://localhost:8080").await?; wait_for_checkpoint!("begin", 0, c); let url = c.current_url().await?; assert!(url.as_ref().starts_with("http://localhost:8080")); wait_for_checkpoint!("page_interactive", 0, c); // Verify the page title let title = c.find(Locator::Css("title")).await?.html(false).await?; assert!(title.contains("Fast Insiders")); // 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?; let company_select = c.find(Locator::Css("#filters input")).await?; company_select.send_keys("E").await?; // E is one of the most used letter. wait_for_checkpoint!("async_select_item_change", 0, c); let first_company = c.find(Locator::Css("div.relative li")).await?; let clicked_company = first_company.text().await?; first_company.click().await?; let search_button = c.find(Locator::Css("#filters button")).await?; search_button.click().await?; let page = c.current_url().await?; assert!( page.as_ref().starts_with("http://localhost:8080/"), "Unexpected target url reached: {}", page ); wait_for_checkpoint!("page_interactive", 1, c); for a in c.find_all(Locator::Css("table a")).await? { let a_text = a.text().await?; assert_eq!(clicked_company, a_text, "The clicked company is different from the target page list of companies, respectively {} and {}", clicked_company, a_text); } let root_link = c.find(Locator::Css("a")).await?; root_link.click().await?; let first_company_in_table = c.find(Locator::Css("table a")).await?; let company_name = first_company_in_table.text().await?; first_company_in_table.click().await?; for a in c.find_all(Locator::Css("table a")).await? { let a_text = a.text().await?; assert_eq!(company_name, a_text, "The clicked company is different from the target page list of companies, respectively {} and {}", company_name, a_text); } assert!( page.as_ref().starts_with("http://localhost:8080/"), "Unexpected target url reached: {}", page ); Ok(()) }