Add new test.

This commit is contained in:
LukeMathWalker 2021-03-11 21:40:39 +00:00
parent e820e37275
commit 9a3420073c
2 changed files with 37 additions and 3 deletions

View file

@ -45,20 +45,21 @@ pub async fn subscribe(
.await
.map_err(|_| HttpResponse::InternalServerError().finish())?;
// We are swallowing the error for the time being.
let _ = send_confirmation_email(&email_client, new_subscriber, &base_url.0).await;
let _ = send_confirmation_email(&email_client, new_subscriber, &base_url.0, "mytoken").await;
Ok(HttpResponse::Ok().finish())
}
#[tracing::instrument(
name = "Send a confirmation email to a new subscriber",
skip(email_client, new_subscriber, base_url)
skip(email_client, new_subscriber, base_url, subscription_token)
)]
pub async fn send_confirmation_email(
email_client: &EmailClient,
new_subscriber: NewSubscriber,
base_url: &str,
subscription_token: &str
) -> Result<(), reqwest::Error> {
let confirmation_link = format!("{}/subscriptions/confirm?subscription_token=mytoken", base_url);
let confirmation_link = format!("{}/subscriptions/confirm?subscription_token={}", base_url, subscription_token);
let plain_body = format!(
"Welcome to our newsletter!\nVisit {} to confirm your subscription.",
confirmation_link

View file

@ -41,3 +41,36 @@ async fn the_link_returned_by_subscribe_returns_a_200_if_called() {
assert_eq!(response.status().as_u16(), 200);
}
#[actix_rt::test]
async fn clicking_on_the_confirmation_link_confirms_a_subscriber() {
// Arrange
let app = spawn_app().await;
let body = "name=le%20guin&email=ursula_le_guin%40gmail.com";
Mock::given(path("/email"))
.and(method("POST"))
.respond_with(ResponseTemplate::new(200))
.mount(&app.email_server)
.await;
app.post_subscriptions(body.into()).await;
let email_request = &app.email_server.received_requests().await.unwrap()[0];
let confirmation_links = app.get_confirmation_links(&email_request);
// Act
reqwest::get(confirmation_links.html)
.await
.unwrap()
.error_for_status()
.unwrap();
// Assert
let saved = sqlx::query!("SELECT email, name, status FROM subscriptions",)
.fetch_one(&app.db_pool)
.await
.expect("Failed to fetch saved subscription.");
assert_eq!(saved.email, "ursula_le_guin@gmail.com");
assert_eq!(saved.name, "le guin");
assert_eq!(saved.status, "confirmed");
}