From 85f4253a979489507f5fec7ae1cb08a5d404069f Mon Sep 17 00:00:00 2001 From: Cerber-Ursi Date: Tue, 4 Mar 2025 16:38:47 +0700 Subject: [PATCH 1/2] change string representation for RecentFailures Since this representation is used for routing (namely for pagination links), it must be consistent with the paths set in routing. --- src/web/releases.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/releases.rs b/src/web/releases.rs index cc8c43e5d..6abf7f0da 100644 --- a/src/web/releases.rs +++ b/src/web/releases.rs @@ -319,7 +319,7 @@ impl ReleaseType { match self { Self::Recent => "recent", Self::Stars => "stars", - Self::RecentFailures => "recent_failures", + Self::RecentFailures => "recent-failures", Self::Failures => "failures", Self::Search => "search", } From 1f202ab41bb001ab21bec57f877a3aeac8965b4d Mon Sep 17 00:00:00 2001 From: Cerber Ursi Date: Wed, 5 Mar 2025 22:50:26 +0700 Subject: [PATCH 2/2] test case for recent failures pagination link --- src/web/releases.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/web/releases.rs b/src/web/releases.rs index 6abf7f0da..bbc83be30 100644 --- a/src/web/releases.rs +++ b/src/web/releases.rs @@ -2182,4 +2182,69 @@ mod tests { Ok(()) }) } + + #[test] + fn recent_failures_correct_pagination_links() { + async_wrapper(|env| async move { + for i in 0..RELEASES_IN_RELEASES + 1 { + env.fake_release() + .await + .name("failed") + .version(&format!("0.0.{}", i)) + .build_result_failed() + .create() + .await?; + } + + let web = env.web_app().await; + + let response = web.get("/releases/recent-failures").await?; + assert!(response.status().is_success()); + + let page = kuchikiki::parse_html().one(response.text().await?); + assert_eq!( + page.select("div.description") + .unwrap() + .next() + .unwrap() + .text_contents(), + "Recent crates failed to build" + ); + + let next_page_link = page.select("div.pagination > a").unwrap().next().unwrap(); + assert_eq!(next_page_link.text_contents().trim(), "Next Page"); + + let next_page_url = next_page_link + .attributes + .borrow() + .get("href") + .unwrap() + .to_owned(); + assert_eq!(next_page_url, "/releases/recent-failures/2"); + + let response = web.get(&next_page_url).await?; + assert!(response.status().is_success()); + + let page = kuchikiki::parse_html().one(response.text().await?); + assert_eq!( + page.select("div.description") + .unwrap() + .next() + .unwrap() + .text_contents(), + "Recent crates failed to build" + ); + assert_eq!( + page.select(".recent-releases-container > ul > li .name") + .unwrap() + .next() + .unwrap() + .text_contents() + .trim(), + "failed-0.0.0" + ); + + Ok(()) + }); + } }