2024-12-25 23:06:28 +01:00

196 lines
5.5 KiB
Rust

#[cfg(feature = "task19")]
mod task_nineteen {
use axum::http::StatusCode;
use axum_test::TestServer;
use itsscb_shuttlings_cch24::router;
use serde_json::json;
use sqlx::postgres::PgPoolOptions;
async fn test_server() -> TestServer {
let pool = PgPoolOptions::new()
.max_connections(5)
.connect("postgres://postgres:postgres@localhost/my_database")
.await
.unwrap();
sqlx::migrate!()
.run(&pool)
.await
.expect("Failed to migrate database");
TestServer::new(router(Some(pool))).unwrap()
}
#[tokio::test]
async fn test_reset() {
let server = test_server().await;
let response = server.post("/19/reset").await;
response.assert_status_ok();
}
#[tokio::test]
async fn test_draft() {
let server = test_server().await;
let response = server
.post("/19/draft")
.text(r#"{"author":"Santa","quote":"TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status(StatusCode::CREATED);
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
}
#[tokio::test]
async fn test_cite() {
let server = test_server().await;
let response = server
.post("/19/draft")
.text(r#"{"author":"Santa","quote":"TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status(StatusCode::CREATED);
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
let id = response.json::<serde_json::Value>()["id"]
.as_str()
.unwrap()
.to_string();
let response = server.get(&format!("/19/cite/{id}")).await;
// dbg!(&response);
response.assert_status_ok();
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
let response = server.get("/19/cite/asdfasdf").await;
response.assert_status_not_found();
}
#[tokio::test]
// #[ignore]
async fn test_list() {
let server = test_server().await;
let response = server
.post("/19/draft")
.text(r#"{"author":"Santa","quote":"TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status(StatusCode::CREATED);
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
let response = server.get("/19/list?token=fadsfasdfasf").await;
dbg!(&response);
response.assert_status_ok();
}
#[tokio::test]
async fn test_remove() {
let server = test_server().await;
let response = server
.post("/19/draft")
.text(r#"{"author":"Santa","quote":"TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status(StatusCode::CREATED);
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
let id = response.json::<serde_json::Value>()["id"]
.as_str()
.unwrap()
.to_string();
let response = server.delete(&format!("/19/remove/{id}")).await;
response.assert_status_ok();
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
let response = server.delete("/19/remove/asdfasdf").await;
response.assert_status_not_found();
}
#[tokio::test]
async fn test_undo() {
let server = test_server().await;
let response = server
.post("/19/draft")
.text(r#"{"author":"Santa","quote":"TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status(StatusCode::CREATED);
let val = json!({
"author": "Santa",
"quote": "TEST QUOTE"
});
response.assert_json_contains(&val);
let id = response.json::<serde_json::Value>()["id"]
.as_str()
.unwrap()
.to_string();
let response = server
.put(&format!("/19/undo/{id}"))
.text(r#"{"author":"Santa","quote":"updated TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status_ok();
let val = json!({
"author": "Santa",
"quote": "updated TEST QUOTE"
});
response.assert_json_contains(&val);
let response = server
.put(&format!("/19/undo/{id}"))
.text(r#"{"author":"NOT SANTA","quote":""}"#)
.content_type("application/json")
.await;
response.assert_status_ok();
let val = json!({
"author": "NOT SANTA",
"quote": ""
});
response.assert_json_contains(&val);
let response = server
.put("/19/undo/asdfasdf")
.text(r#"{"author":"Santa","quote":"updated TEST QUOTE"}"#)
.content_type("application/json")
.await;
response.assert_status_bad_request();
}
}