122 lines
3.9 KiB
Rust
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");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|