test: add unhappy case for email client

This commit is contained in:
Sandro Eiler 2024-02-27 15:20:23 +01:00
parent c3fce4a441
commit 170f34738b

View file

@ -40,8 +40,7 @@ impl EmailClient {
html_body: html_content,
text_body: text_content,
};
let _builder = self
.http_client
self.http_client
.post(&url)
.header(
"X-Postmark-Server-Token",
@ -49,7 +48,8 @@ impl EmailClient {
)
.json(&request_body)
.send()
.await?;
.await?
.error_for_status()?;
Ok(())
}
}
@ -68,13 +68,13 @@ mod tests {
use crate::domain::SubscriberEmail;
use crate::email_client::EmailClient;
use claims::{assert_err, assert_ok};
use fake::faker::internet::en::SafeEmail;
use fake::faker::lorem::en::{Paragraph, Sentence};
use fake::{Fake, Faker};
use secrecy::Secret;
use wiremock::matchers::{any, header, header_exists, method, path};
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
use claims::assert_ok;
struct SendEmailBodyMatcher;
@ -103,11 +103,7 @@ mod tests {
// Arrange
let mock_server = MockServer::start().await;
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
let email_client = EmailClient::new(
mock_server.uri(),
sender,
Secret::new(Faker.fake())
);
let email_client = EmailClient::new(mock_server.uri(), sender, Secret::new(Faker.fake()));
let subscriber_email = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
let subject: String = Sentence(1..2).fake();
@ -157,4 +153,31 @@ mod tests {
// Assert
// Mock expectations are checked on drop
}
#[tokio::test]
async fn send_email_fails_if_the_server_returns_500() {
// Arrange
let mock_server = MockServer::start().await;
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
let email_client = EmailClient::new(mock_server.uri(), sender, Secret::new(Faker.fake()));
let subscriber_email = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
let subject: String = Sentence(1..2).fake();
let content: String = Paragraph(1..10).fake();
Mock::given(any())
// Not a 200 anymore!
.respond_with(ResponseTemplate::new(500))
.expect(1)
.mount(&mock_server)
.await;
// Act
let outcome = email_client
.send_email(subscriber_email, &subject, &content, &content)
.await;
// Assert
assert_err!(outcome);
}
}