test: add unhappy case for email client
This commit is contained in:
parent
c3fce4a441
commit
170f34738b
1 changed files with 32 additions and 9 deletions
|
|
@ -40,8 +40,7 @@ impl EmailClient {
|
||||||
html_body: html_content,
|
html_body: html_content,
|
||||||
text_body: text_content,
|
text_body: text_content,
|
||||||
};
|
};
|
||||||
let _builder = self
|
self.http_client
|
||||||
.http_client
|
|
||||||
.post(&url)
|
.post(&url)
|
||||||
.header(
|
.header(
|
||||||
"X-Postmark-Server-Token",
|
"X-Postmark-Server-Token",
|
||||||
|
|
@ -49,7 +48,8 @@ impl EmailClient {
|
||||||
)
|
)
|
||||||
.json(&request_body)
|
.json(&request_body)
|
||||||
.send()
|
.send()
|
||||||
.await?;
|
.await?
|
||||||
|
.error_for_status()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -68,13 +68,13 @@ mod tests {
|
||||||
|
|
||||||
use crate::domain::SubscriberEmail;
|
use crate::domain::SubscriberEmail;
|
||||||
use crate::email_client::EmailClient;
|
use crate::email_client::EmailClient;
|
||||||
|
use claims::{assert_err, assert_ok};
|
||||||
use fake::faker::internet::en::SafeEmail;
|
use fake::faker::internet::en::SafeEmail;
|
||||||
use fake::faker::lorem::en::{Paragraph, Sentence};
|
use fake::faker::lorem::en::{Paragraph, Sentence};
|
||||||
use fake::{Fake, Faker};
|
use fake::{Fake, Faker};
|
||||||
use secrecy::Secret;
|
use secrecy::Secret;
|
||||||
use wiremock::matchers::{any, header, header_exists, method, path};
|
use wiremock::matchers::{any, header, header_exists, method, path};
|
||||||
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
|
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
|
||||||
use claims::assert_ok;
|
|
||||||
|
|
||||||
struct SendEmailBodyMatcher;
|
struct SendEmailBodyMatcher;
|
||||||
|
|
||||||
|
|
@ -103,11 +103,7 @@ mod tests {
|
||||||
// Arrange
|
// Arrange
|
||||||
let mock_server = MockServer::start().await;
|
let mock_server = MockServer::start().await;
|
||||||
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
||||||
let email_client = EmailClient::new(
|
let email_client = EmailClient::new(mock_server.uri(), sender, Secret::new(Faker.fake()));
|
||||||
mock_server.uri(),
|
|
||||||
sender,
|
|
||||||
Secret::new(Faker.fake())
|
|
||||||
);
|
|
||||||
|
|
||||||
let subscriber_email = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
let subscriber_email = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
||||||
let subject: String = Sentence(1..2).fake();
|
let subject: String = Sentence(1..2).fake();
|
||||||
|
|
@ -157,4 +153,31 @@ mod tests {
|
||||||
// Assert
|
// Assert
|
||||||
// Mock expectations are checked on drop
|
// 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue