Test suite refactoring to match new htmx HTML swapping in pages

This commit is contained in:
Alphonse Paix
2025-09-17 14:16:27 +02:00
parent 859247d900
commit b5f0f448d7
8 changed files with 91 additions and 163 deletions

View File

@@ -1,14 +1,8 @@
use crate::helpers::{ConfirmationLinks, TestApp, assert_is_redirect_to};
use fake::{
Fake,
faker::{internet::en::SafeEmail, name::fr_fr::Name},
};
use crate::helpers::{ConfirmationLinks, TestApp, assert_is_redirect_to, when_sending_an_email};
use fake::{Fake, faker::internet::en::SafeEmail};
use std::time::Duration;
use uuid::Uuid;
use wiremock::{
Mock, MockBuilder, ResponseTemplate,
matchers::{method, path},
};
use wiremock::ResponseTemplate;
#[tokio::test]
async fn newsletters_are_not_delivered_to_unconfirmed_subscribers() {
@@ -72,11 +66,11 @@ async fn newsletters_are_delivered_to_confirmed_subscribers() {
});
let response = app.post_newsletters(&newsletter_request_body).await;
assert_is_redirect_to(&response, "/admin/newsletters");
assert!(response.status().is_success());
let html_page = app.get_newsletter_form_html().await;
assert!(html_page.contains(&format!(
"The newsletter issue '{}' has been published",
let html_fragment = response.text().await.unwrap();
assert!(html_fragment.contains(&format!(
r#"The newsletter issue "{}" has been published"#,
newsletter_title
)));
@@ -116,9 +110,13 @@ async fn form_shows_error_for_invalid_data() {
];
for (invalid_body, error_message) in test_cases {
app.post_newsletters(&invalid_body).await;
let html_page = app.get_newsletter_form_html().await;
assert!(html_page.contains(error_message));
let html_fragment = app
.post_newsletters(&invalid_body)
.await
.text()
.await
.unwrap();
assert!(html_fragment.contains(error_message));
}
}
@@ -143,20 +141,20 @@ async fn newsletter_creation_is_idempotent() {
});
let response = app.post_newsletters(&newsletter_request_body).await;
assert_is_redirect_to(&response, "/admin/newsletters");
assert!(response.status().is_success());
let html_page = app.get_newsletter_form_html().await;
assert!(html_page.contains(&format!(
"The newsletter issue '{}' has been published",
let html_fragment = response.text().await.unwrap();
assert!(html_fragment.contains(&format!(
r#"The newsletter issue "{}" has been published"#,
newsletter_title
)));
let response = app.post_newsletters(&newsletter_request_body).await;
assert_is_redirect_to(&response, "/admin/newsletters");
assert!(response.status().is_success());
let html_page = app.get_newsletter_form_html().await;
assert!(html_page.contains(&format!(
"The newsletter issue '{}' has been published",
let html_fragment = response.text().await.unwrap();
assert!(html_fragment.contains(&format!(
r#"The newsletter issue "{}" has been published"#,
newsletter_title
)));
@@ -195,22 +193,16 @@ async fn concurrent_form_submission_is_handled_gracefully() {
}
async fn create_unconfirmed_subscriber(app: &TestApp) -> ConfirmationLinks {
let name: String = Name().fake();
let email: String = SafeEmail().fake();
let body = serde_urlencoded::to_string(serde_json::json!({
"name": name,
"email": email,
"email_check": email
}))
.unwrap();
let body = format!("email={email}");
let _mock_guard = Mock::given(path("/v1/email"))
.and(method("POST"))
let _mock_guard = when_sending_an_email()
.respond_with(ResponseTemplate::new(200))
.named("Create unconfirmed subscriber")
.expect(1)
.mount_as_scoped(&app.email_server)
.await;
app.post_subscriptions(body)
.await
.error_for_status()
@@ -223,6 +215,7 @@ async fn create_unconfirmed_subscriber(app: &TestApp) -> ConfirmationLinks {
.unwrap()
.pop()
.unwrap();
app.get_confirmation_links(email_request)
}
@@ -234,7 +227,3 @@ async fn create_confirmed_subscriber(app: &TestApp) {
.error_for_status()
.unwrap();
}
fn when_sending_an_email() -> MockBuilder {
Mock::given(path("/v1/email")).and(method("POST"))
}