2024-12-10 01:47:40 +01:00

122 lines
3.9 KiB
Rust

#[cfg(all(test, feature = "task1-9"))]
mod task_five {
use std::thread;
use std::time::Duration;
use axum::http::StatusCode;
use axum_test::TestServer;
use itsscb_shuttlings_cch24::router;
fn test_server() -> TestServer {
TestServer::new(router()).unwrap()
}
#[tokio::test]
async fn test_milk() {
let sever = test_server();
let response = sever.post("/9/milk").await;
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
let response = sever.post("/9/milk").await;
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
let response = sever.post("/9/milk").await;
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
let response = sever.post("/9/milk").await;
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
let response = sever.post("/9/milk").await;
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
let response = sever.post("/9/milk").await;
response.assert_status(StatusCode::TOO_MANY_REQUESTS);
let sever = test_server();
for i in 0..=10 {
let response = sever.post("/9/milk").await;
match i {
0..=4 | 6 | 8 | 9 => {
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
}
5 | 7 | 10 => {
response.assert_status(StatusCode::TOO_MANY_REQUESTS);
response.assert_text("No milk available\n");
match i {
5 => thread::sleep(Duration::from_secs(1)),
7 => thread::sleep(Duration::from_secs(2)),
_ => (),
}
}
_ => {
response.assert_status(StatusCode::SERVICE_UNAVAILABLE);
response.assert_text("No milk available\n");
}
}
}
let sever = test_server();
let response = sever
.post("/9/milk")
.text(r#"{"liters":5}"#)
.content_type("application/json")
.await;
response.assert_status_ok();
response.assert_text(r#"{"gallons":1.3208603}"#);
let sever = test_server();
let response = sever
.post("/9/milk")
.text(r#"{"gallons":5}"#)
.content_type("application/json")
.await;
response.assert_status_ok();
response.assert_text(r#"{"liters":18.927061}"#);
let sever = test_server();
let response = sever
.post("/9/milk")
.text(r#"{"liters":1, "gallons":5}"#)
.content_type("application/json")
.await;
response.assert_status_bad_request();
let response = sever
.post("/9/milk")
.text(r#"{"litres":2}"#)
.content_type("application/json")
.await;
response.assert_status_ok();
response.assert_text(r#"{"pints":3.519508}"#);
let sever = test_server();
for i in 0..=11 {
let response = sever.post("/9/milk").await;
match i {
0..=4 | 6..=10 => {
response.assert_status_ok();
response.assert_text("Milk withdrawn\n");
}
5 | 11 => {
response.assert_status(StatusCode::TOO_MANY_REQUESTS);
response.assert_text("No milk available\n");
let response = sever.post("/9/refill").await;
response.assert_status_ok();
}
_ => {
response.assert_status(StatusCode::SERVICE_UNAVAILABLE);
response.assert_text("No milk available\n");
}
}
}
}
}