mirror of
https://github.com/LukeMathWalker/zero-to-production.git
synced 2024-12-18 05:56:35 +00:00
Refactor tests.
This commit is contained in:
parent
74b7b1c536
commit
b40748ef7b
1 changed files with 28 additions and 28 deletions
|
@ -86,16 +86,31 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generate a random email subject
|
||||||
|
fn subject() -> String {
|
||||||
|
Sentence(1..2).fake()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Generate a random email content
|
||||||
|
fn content() -> String {
|
||||||
|
Paragraph(1..10).fake()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Generate a random subscriber email
|
||||||
|
fn email() -> SubscriberEmail {
|
||||||
|
SubscriberEmail::parse(SafeEmail().fake()).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get a test instance of `EmailClient`.
|
||||||
|
fn email_client(base_url: String) -> EmailClient {
|
||||||
|
let email_client = EmailClient::new(base_url, email(), Faker.fake());
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn send_email_sends_the_expected_request() {
|
async fn send_email_sends_the_expected_request() {
|
||||||
// Arrange
|
// Arrange
|
||||||
let mock_server = MockServer::start().await;
|
let mock_server = MockServer::start().await;
|
||||||
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
let email_client = email_client(mock_server.uri());
|
||||||
let email_client = EmailClient::new(mock_server.uri(), sender, 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(header_exists("X-Postmark-Server-Token"))
|
Mock::given(header_exists("X-Postmark-Server-Token"))
|
||||||
.and(header("Content-Type", "application/json"))
|
.and(header("Content-Type", "application/json"))
|
||||||
|
@ -109,7 +124,7 @@ mod tests {
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
let _ = email_client
|
let _ = email_client
|
||||||
.send_email(subscriber_email, &subject, &content, &content)
|
.send_email(subscriber_email(), &subject(), &content(), &content())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
@ -119,12 +134,7 @@ mod tests {
|
||||||
async fn send_email_succeeds_if_the_server_returns_200() {
|
async fn send_email_succeeds_if_the_server_returns_200() {
|
||||||
// Arrange
|
// Arrange
|
||||||
let mock_server = MockServer::start().await;
|
let mock_server = MockServer::start().await;
|
||||||
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
let email_client = email_client(mock_server.uri());
|
||||||
let email_client = EmailClient::new(mock_server.uri(), sender, 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())
|
Mock::given(any())
|
||||||
.respond_with(ResponseTemplate::new(200))
|
.respond_with(ResponseTemplate::new(200))
|
||||||
|
@ -134,7 +144,7 @@ mod tests {
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
let outcome = email_client
|
let outcome = email_client
|
||||||
.send_email(subscriber_email, &subject, &content, &content)
|
.send_email(subscriber_email(), &subject(), &content(), &content())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
@ -145,12 +155,7 @@ mod tests {
|
||||||
async fn send_email_fails_if_the_server_returns_500() {
|
async fn send_email_fails_if_the_server_returns_500() {
|
||||||
// Arrange
|
// Arrange
|
||||||
let mock_server = MockServer::start().await;
|
let mock_server = MockServer::start().await;
|
||||||
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
let email_client = email_client(mock_server.uri());
|
||||||
let email_client = EmailClient::new(mock_server.uri(), sender, 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())
|
Mock::given(any())
|
||||||
// Not a 200 anymore!
|
// Not a 200 anymore!
|
||||||
|
@ -161,7 +166,7 @@ mod tests {
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
let outcome = email_client
|
let outcome = email_client
|
||||||
.send_email(subscriber_email, &subject, &content, &content)
|
.send_email(subscriber_email(), &subject(), &content(), &content())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
@ -172,12 +177,7 @@ mod tests {
|
||||||
async fn send_email_times_out_if_the_server_takes_too_long() {
|
async fn send_email_times_out_if_the_server_takes_too_long() {
|
||||||
// Arrange
|
// Arrange
|
||||||
let mock_server = MockServer::start().await;
|
let mock_server = MockServer::start().await;
|
||||||
let sender = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
let email_client = email_client(mock_server.uri());
|
||||||
let email_client = EmailClient::new(mock_server.uri(), sender, Faker.fake());
|
|
||||||
|
|
||||||
let subscriber_email = SubscriberEmail::parse(SafeEmail().fake()).unwrap();
|
|
||||||
let subject: String = Sentence(1..2).fake();
|
|
||||||
let content: String = Paragraph(1..10).fake();
|
|
||||||
|
|
||||||
let response = ResponseTemplate::new(200).set_delay(std::time::Duration::from_secs(180));
|
let response = ResponseTemplate::new(200).set_delay(std::time::Duration::from_secs(180));
|
||||||
Mock::given(any())
|
Mock::given(any())
|
||||||
|
@ -188,7 +188,7 @@ mod tests {
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
let outcome = email_client
|
let outcome = email_client
|
||||||
.send_email(subscriber_email, &subject, &content, &content)
|
.send_email(subscriber_email(), &subject(), &content(), &content())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
Loading…
Reference in a new issue