Enhance sign up test
This commit is contained in:
parent
fcadaf855f
commit
2a93456350
4 changed files with 98 additions and 34 deletions
|
|
@ -56,3 +56,4 @@ axum-test = "17"
|
|||
cookie = "0.18"
|
||||
scraper = "0.23"
|
||||
mockall = "0.13"
|
||||
scanf = "1.2"
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ pub mod consts;
|
|||
pub mod data;
|
||||
pub mod email;
|
||||
pub mod log;
|
||||
pub mod translation;
|
||||
|
||||
mod hash;
|
||||
mod html_templates;
|
||||
mod ron_extractor;
|
||||
mod ron_utils;
|
||||
mod services;
|
||||
mod translation;
|
||||
mod utils;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ use std::{error::Error, sync::Arc};
|
|||
|
||||
use axum_test::TestServer;
|
||||
use cookie::Cookie;
|
||||
use mockall::predicate;
|
||||
use scraper::{ElementRef, Html, Selector};
|
||||
|
||||
use recipes::{app, email};
|
||||
|
|
@ -26,7 +25,9 @@ async fn homepage() -> Result<(), Box<dyn Error>> {
|
|||
response.assert_status_ok();
|
||||
|
||||
let document = Html::parse_document(&response.text());
|
||||
assert_eq!(document.errors.len(), 0);
|
||||
if !document.errors.is_empty() {
|
||||
panic!("{:?}", document.errors);
|
||||
}
|
||||
|
||||
let first_recipe_title =
|
||||
Selector::parse("#recipes-list .recipes-list-public .recipe-item").unwrap();
|
||||
|
|
@ -53,7 +54,9 @@ async fn recipe_view() -> Result<(), Box<dyn Error>> {
|
|||
response.assert_status_ok();
|
||||
|
||||
let document = Html::parse_document(&response.text());
|
||||
assert_eq!(document.errors.len(), 0);
|
||||
if !document.errors.is_empty() {
|
||||
panic!("{:?}", document.errors);
|
||||
}
|
||||
|
||||
let recipe_title = Selector::parse("#recipe-view .recipe-title").unwrap();
|
||||
let elements: Vec<ElementRef> = document.select(&recipe_title).collect();
|
||||
|
|
@ -82,7 +85,9 @@ async fn user_edit() -> Result<(), Box<dyn Error>> {
|
|||
response.assert_status_ok();
|
||||
|
||||
let document = Html::parse_document(&response.text());
|
||||
assert_eq!(document.errors.len(), 0);
|
||||
if !document.errors.is_empty() {
|
||||
panic!("{:?}", document.errors);
|
||||
}
|
||||
|
||||
let user_email = Selector::parse("#input-email").unwrap();
|
||||
let elements: Vec<ElementRef> = document.select(&user_email).collect();
|
||||
|
|
@ -104,36 +109,81 @@ pub struct SignUpFormData {
|
|||
|
||||
#[tokio::test]
|
||||
async fn sign_up() -> Result<(), Box<dyn Error>> {
|
||||
use scanf::sscanf;
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
// Arrange.
|
||||
let validation_url: Rc<RefCell<String>> = Rc::new(RefCell::new(String::new()));
|
||||
|
||||
let validation_url_clone = validation_url.clone();
|
||||
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(),
|
||||
)
|
||||
.withf_st(move |email, _title, message| {
|
||||
sscanf!(
|
||||
message,
|
||||
"Follow this link to confirm your inscription, http://127.0.0.1:8000{}",
|
||||
*validation_url_clone.borrow_mut()
|
||||
)
|
||||
.unwrap();
|
||||
println!("{}", message);
|
||||
email == "president@spaceball.planet"
|
||||
})
|
||||
.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.
|
||||
let response = server
|
||||
.post("/signup")
|
||||
.form(&SignUpFormData {
|
||||
email: "president@spaceball.planet".into(),
|
||||
password_1: "12345678".into(),
|
||||
password_2: "12345678".into(),
|
||||
})
|
||||
.await;
|
||||
let tr = recipes::translation::Tr::new("en");
|
||||
|
||||
// Assert.
|
||||
response.assert_status_ok();
|
||||
// Sign up page.
|
||||
{
|
||||
// Act.
|
||||
let response = server
|
||||
.post("/signup")
|
||||
.form(&SignUpFormData {
|
||||
email: "president@spaceball.planet".into(),
|
||||
password_1: "12345678".into(),
|
||||
password_2: "12345678".into(),
|
||||
})
|
||||
.await;
|
||||
|
||||
let document = Html::parse_document(&response.text());
|
||||
assert_eq!(document.errors.len(), 0);
|
||||
// Assert.
|
||||
response.assert_status_ok();
|
||||
let document = Html::parse_document(&response.text());
|
||||
if !document.errors.is_empty() {
|
||||
panic!("{:?}", document.errors);
|
||||
}
|
||||
|
||||
let message_selector = Selector::parse("#message").unwrap();
|
||||
let element = document.select(&message_selector).next().unwrap();
|
||||
assert_eq!(
|
||||
element.inner_html(),
|
||||
tr.t(common::translation::Sentence::SignUpEmailSent)
|
||||
);
|
||||
}
|
||||
|
||||
// Validation page.
|
||||
{
|
||||
// Act.
|
||||
let response = server.get(&validation_url.borrow());
|
||||
let response = response.await;
|
||||
|
||||
// Assert.
|
||||
response.assert_status_ok();
|
||||
let document = Html::parse_document(&response.text());
|
||||
if !document.errors.is_empty() {
|
||||
panic!("{:?}", document.errors);
|
||||
}
|
||||
|
||||
let message_selector = Selector::parse("#message").unwrap();
|
||||
let element = document.select(&message_selector).next().unwrap();
|
||||
assert_eq!(
|
||||
element.inner_html(),
|
||||
tr.t(common::translation::Sentence::SignUpEmailValidationSuccess)
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue