Use the crate mockall to mock the email service in integration tests
This commit is contained in:
parent
3626f8a11b
commit
8c70f90234
5 changed files with 109 additions and 23 deletions
|
|
@ -1,10 +1,11 @@
|
|||
use std::error::Error;
|
||||
use std::{error::Error, sync::Arc};
|
||||
|
||||
use axum_test::TestServer;
|
||||
use cookie::Cookie;
|
||||
use mockall::predicate;
|
||||
use scraper::{ElementRef, Html, Selector};
|
||||
|
||||
use recipes::app;
|
||||
use recipes::{app, email};
|
||||
use serde::Serialize;
|
||||
|
||||
mod utils;
|
||||
|
|
@ -104,7 +105,18 @@ pub struct SignUpFormData {
|
|||
#[tokio::test]
|
||||
async fn sign_up() -> Result<(), Box<dyn Error>> {
|
||||
// Arrange.
|
||||
let state = utils::common_state().await?;
|
||||
let mut mock_email_service = utils::mock_email::MockEmailService::new();
|
||||
mock_email_service
|
||||
.expect_send_email()
|
||||
.with(
|
||||
predicate::eq("president@spaceball.planet"),
|
||||
predicate::always(),
|
||||
predicate::always(),
|
||||
)
|
||||
.times(1)
|
||||
.returning(|_email, _title, _message| Ok(()));
|
||||
|
||||
let state = utils::common_state_with_email_service(Arc::new(mock_email_service)).await?;
|
||||
let server = TestServer::new(app::make_service(state))?;
|
||||
|
||||
// Act.
|
||||
|
|
@ -122,7 +134,6 @@ async fn sign_up() -> Result<(), Box<dyn Error>> {
|
|||
|
||||
let document = Html::parse_document(&response.text());
|
||||
assert_eq!(document.errors.len(), 0);
|
||||
dbg!(response);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue