diff --git a/src/email_client.rs b/src/email_client.rs index 1981933..97c530b 100644 --- a/src/email_client.rs +++ b/src/email_client.rs @@ -72,8 +72,9 @@ mod tests { use fake::faker::lorem::en::{Paragraph, Sentence}; use fake::{Fake, Faker}; use secrecy::Secret; - use wiremock::matchers::{header, header_exists, method, path}; + use wiremock::matchers::{any, header, header_exists, method, path}; use wiremock::{Mock, MockServer, Request, ResponseTemplate}; + use claims::assert_ok; struct SendEmailBodyMatcher; @@ -97,6 +98,36 @@ mod tests { } } + #[tokio::test] + async fn send_email_succeeds_if_the_server_returns_200() { + // 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()) + .respond_with(ResponseTemplate::new(200)) + .expect(1) + .mount(&mock_server) + .await; + + // Act + let outcome = email_client + .send_email(subscriber_email, &subject, &content, &content) + .await; + + // Assert + assert_ok!(outcome); + } + #[tokio::test] async fn send_email_sends_the_expected_request() { // Arrange