Add some HTTP tests for recipe fields and recipe tags
This commit is contained in:
parent
9c2d89e981
commit
e4ec80e118
6 changed files with 179 additions and 11 deletions
|
|
@ -301,7 +301,65 @@ async fn create_recipe_and_edit_it() -> Result<(), Box<dyn Error>> {
|
|||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
// TODO: Set other recipe fields.
|
||||
let response = server
|
||||
.patch("/ron-api/recipe/estimated_time")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_header(http::header::CONTENT_TYPE, common::consts::MIME_TYPE_RON)
|
||||
.bytes(
|
||||
ron_api::to_string(ron_api::SetRecipeEstimatedTime {
|
||||
recipe_id,
|
||||
estimated_time: Some(420),
|
||||
})
|
||||
.unwrap()
|
||||
.into(),
|
||||
)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
let response = server
|
||||
.patch("/ron-api/recipe/difficulty")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_header(http::header::CONTENT_TYPE, common::consts::MIME_TYPE_RON)
|
||||
.bytes(
|
||||
ron_api::to_string(ron_api::SetRecipeDifficulty {
|
||||
recipe_id,
|
||||
difficulty: ron_api::Difficulty::Hard,
|
||||
})
|
||||
.unwrap()
|
||||
.into(),
|
||||
)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
let response = server
|
||||
.patch("/ron-api/recipe/language")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_header(http::header::CONTENT_TYPE, common::consts::MIME_TYPE_RON)
|
||||
.bytes(
|
||||
ron_api::to_string(ron_api::SetRecipeLanguage {
|
||||
recipe_id,
|
||||
lang: "fr".into(),
|
||||
})
|
||||
.unwrap()
|
||||
.into(),
|
||||
)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
let response = server
|
||||
.patch("/ron-api/recipe/is_public")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_header(http::header::CONTENT_TYPE, common::consts::MIME_TYPE_RON)
|
||||
.bytes(
|
||||
ron_api::to_string(ron_api::SetRecipeIsPublic {
|
||||
recipe_id,
|
||||
is_public: true,
|
||||
})
|
||||
.unwrap()
|
||||
.into(),
|
||||
)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
// Assert.
|
||||
let response = server
|
||||
|
|
@ -327,7 +385,112 @@ async fn create_recipe_and_edit_it() -> Result<(), Box<dyn Error>> {
|
|||
let element_servings = document.select(&servings_selector).next().unwrap();
|
||||
assert_eq!(element_servings.attr("value").unwrap(), "42");
|
||||
|
||||
// dbg!(response);
|
||||
let estimated_time_selector = Selector::parse("#input-estimated-time").unwrap();
|
||||
let element_estimated_time = document.select(&estimated_time_selector).next().unwrap();
|
||||
assert_eq!(element_estimated_time.attr("value").unwrap(), "420");
|
||||
|
||||
let selected_difficulty_selector =
|
||||
Selector::parse("#select-difficulty option[selected]").unwrap();
|
||||
let element_selected_difficulty = document
|
||||
.select(&selected_difficulty_selector)
|
||||
.next()
|
||||
.unwrap();
|
||||
assert_eq!(element_selected_difficulty.inner_html(), "Hard");
|
||||
|
||||
let selected_language_selector = Selector::parse("#select-language option[selected]").unwrap();
|
||||
let element_selected_language = document.select(&selected_language_selector).next().unwrap();
|
||||
assert_eq!(element_selected_language.inner_html(), "Français");
|
||||
|
||||
let is_public_selector = Selector::parse("#input-is-public").unwrap();
|
||||
let element_is_public = document.select(&is_public_selector).next().unwrap();
|
||||
assert!(element_is_public.attr("checked").is_some());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn recipe_tags() -> Result<(), Box<dyn Error>> {
|
||||
// Arrange.
|
||||
let state = utils::common_state().await?;
|
||||
let user_id = utils::create_user(
|
||||
&state.db_connection,
|
||||
"president@spaceball.planet",
|
||||
"12345678",
|
||||
)
|
||||
.await?;
|
||||
let token = utils::sign_in(
|
||||
&state.db_connection,
|
||||
"president@spaceball.planet",
|
||||
"12345678",
|
||||
)
|
||||
.await?;
|
||||
let recipe_id = utils::create_recipe(&state.db_connection, user_id, "spaghetti").await?;
|
||||
let server = TestServer::new(app::make_service(state))?;
|
||||
let cookie = Cookie::new("auth_token", token);
|
||||
|
||||
// Act.
|
||||
// Tags list must be empty.
|
||||
let response = server
|
||||
.get("/ron-api/recipe/tags")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_query_param("id", recipe_id)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
let tags: ron_api::Tags = ron::de::from_bytes(response.as_bytes()).unwrap();
|
||||
assert!(tags.tags.is_empty());
|
||||
|
||||
// Add some tags.
|
||||
let response = server
|
||||
.post("/ron-api/recipe/tags")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_header(http::header::CONTENT_TYPE, common::consts::MIME_TYPE_RON)
|
||||
.bytes(
|
||||
ron_api::to_string(ron_api::Tags {
|
||||
recipe_id,
|
||||
tags: vec!["ABC".into(), "xyz".into()],
|
||||
})
|
||||
.unwrap()
|
||||
.into(),
|
||||
)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
let response = server
|
||||
.get("/ron-api/recipe/tags")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_query_param("id", recipe_id)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
let tags: ron_api::Tags = ron::de::from_bytes(response.as_bytes()).unwrap();
|
||||
assert_eq!(tags.tags.len(), 2);
|
||||
assert!(tags.tags.contains(&"abc".to_string())); // Tags are in lower case.
|
||||
assert!(tags.tags.contains(&"xyz".to_string()));
|
||||
|
||||
// Remove some tags.
|
||||
let response = server
|
||||
.delete("/ron-api/recipe/tags")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_header(http::header::CONTENT_TYPE, common::consts::MIME_TYPE_RON)
|
||||
.bytes(
|
||||
ron_api::to_string(ron_api::Tags {
|
||||
recipe_id,
|
||||
tags: vec!["XYZ".into(), "qwe".into()],
|
||||
})
|
||||
.unwrap()
|
||||
.into(),
|
||||
)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
|
||||
let response = server
|
||||
.get("/ron-api/recipe/tags")
|
||||
.add_cookie(cookie.clone())
|
||||
.add_query_param("id", recipe_id)
|
||||
.await;
|
||||
response.assert_status_ok();
|
||||
let tags: ron_api::Tags = ron::de::from_bytes(response.as_bytes()).unwrap();
|
||||
assert_eq!(tags.tags.len(), 1);
|
||||
assert_eq!(tags.tags[0], "abc".to_string());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ pub async fn common_state_with_email_service(
|
|||
) -> Result<app::AppState, Box<dyn Error>> {
|
||||
let db_connection = db::Connection::new_in_memory().await?;
|
||||
let config = config::Config::default();
|
||||
let log = log::Log::new_no_log();
|
||||
let log = log::Log::new_to_stdout_only_with_max_level(Some(tracing::Level::ERROR));
|
||||
Ok(app::AppState {
|
||||
config,
|
||||
db_connection,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue