2024-12-13 00:52:18 +01:00

221 lines
5.8 KiB
Rust

#![cfg(feature = "task12")]
#[cfg(test)]
mod task_twelve {
use axum_test::TestServer;
use itsscb_shuttlings_cch24::router;
fn test_server() -> TestServer {
TestServer::new(router()).unwrap()
}
const EMPTY_BOARD: &str = "⬜⬛⬛⬛⬛⬜
⬜⬛⬛⬛⬛⬜
⬜⬛⬛⬛⬛⬜
⬜⬛⬛⬛⬛⬜
⬜⬜⬜⬜⬜⬜
";
#[tokio::test]
async fn test_task_1() {
let server = test_server();
let response = server.get("/12/board").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
let response = server.post("/12/reset").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
}
#[tokio::test]
async fn test_task_2() {
let server = test_server();
let response = server.post("/12/reset").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
let want = "\
⬜⬛⬛⬛⬛⬜
⬜⬛⬛⬛⬛⬜
⬜⬛⬛⬛⬛⬜
⬜🍪⬛⬛⬛⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.post("/12/place/cookie/1").await;
response.assert_status_ok();
response.assert_text(want);
let want = "\
⬜🍪⬛⬛⬛⬜
⬜🍪⬛⬛⬛⬜
⬜🍪⬛⬛⬛⬜
⬜🍪⬛⬛⬛⬜
⬜⬜⬜⬜⬜⬜
🍪 wins!
";
let response = server.post("/12/place/cookie/1").await;
response.assert_status_ok();
let response = server.post("/12/place/cookie/1").await;
response.assert_status_ok();
let response = server.post("/12/place/cookie/1").await;
response.assert_status_ok();
response.assert_text(want);
let response = server.post("/12/place/milk/2").await;
response.assert_status_service_unavailable();
response.assert_text(want);
let mut response = server.post("/12/reset").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
let want = "⬜🥛🍪🥛🍪⬜
⬜🍪🥛🍪🥛⬜
⬜🍪🥛🍪🥛⬜
⬜🍪🥛🍪🥛⬜
⬜⬜⬜⬜⬜⬜
No winner.
";
for i in 1..5 {
for _ in 0..3 {
let slot = if i % 2 == 0 { "milk" } else { "cookie" };
response = server.post(&format!("/12/place/{slot}/{i}")).await;
response.assert_status_ok();
}
}
for i in 1..5 {
let slot = if i % 2 == 0 { "cookie" } else { "milk" };
response = server.post(&format!("/12/place/{slot}/{i}")).await;
response.assert_status_ok();
}
response.assert_text(want);
let response = server.post("/12/place/milk/1").await;
response.assert_status_service_unavailable();
response.assert_text(want);
let response = server.post("/12/reset").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
let want = "⬜⬛⬛⬛🍪⬜
⬜⬛⬛🍪🥛⬜
⬜⬛🍪🥛🥛⬜
⬜🍪🥛🥛🥛⬜
⬜⬜⬜⬜⬜⬜
🍪 wins!
";
let response = server.post("/12/place/cookie/1").await;
response.assert_status_ok();
for i in 2..5 {
let response = server.post(&format!("/12/place/milk/{i}")).await;
response.assert_status_ok();
}
let response = server.post("/12/place/cookie/2").await;
response.assert_status_ok();
for i in 3..5 {
let response = server.post(&format!("/12/place/milk/{i}")).await;
response.assert_status_ok();
}
let response = server.post("/12/place/cookie/3").await;
response.assert_status_ok();
// for i in 4..5 {
let response = server.post("/12/place/milk/4").await;
response.assert_status_ok();
// }
let response = server.post("/12/place/cookie/4").await;
response.assert_status_ok();
response.assert_text(want);
}
#[tokio::test]
async fn test_task_3() {
let server = test_server();
let response = server.post("/12/reset").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
let want = "\
⬜🍪🍪🍪🍪⬜
⬜🥛🍪🍪🥛⬜
⬜🥛🥛🥛🥛⬜
⬜🍪🥛🍪🥛⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.get("/12/random-board").await;
// dbg!(response.text());
response.assert_status_ok();
response.assert_text(want);
let want = "\
⬜🍪🥛🍪🍪⬜
⬜🥛🍪🥛🍪⬜
⬜🥛🍪🍪🍪⬜
⬜🍪🥛🥛🥛⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.get("/12/random-board").await;
response.assert_status_ok();
response.assert_text(want);
let want = "\
⬜🍪🍪🥛🍪⬜
⬜🍪🥛🍪🍪⬜
⬜🥛🍪🍪🥛⬜
⬜🍪🥛🍪🍪⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.get("/12/random-board").await;
response.assert_status_ok();
response.assert_text(want);
let want = "\
⬜🥛🍪🍪🥛⬜
⬜🥛🍪🍪🍪⬜
⬜🍪🥛🥛🥛⬜
⬜🍪🥛🍪🥛⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.get("/12/random-board").await;
response.assert_status_ok();
response.assert_text(want);
let want = "\
⬜🥛🥛🥛🍪⬜
⬜🍪🍪🍪🥛⬜
⬜🥛🍪🍪🥛⬜
⬜🍪🥛🥛🍪⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.get("/12/random-board").await;
response.assert_status_ok();
response.assert_text(want);
let response = server.post("/12/reset").await;
response.assert_status_ok();
response.assert_text(EMPTY_BOARD);
let want = "\
⬜🍪🍪🍪🍪⬜
⬜🥛🍪🍪🥛⬜
⬜🥛🥛🥛🥛⬜
⬜🍪🥛🍪🥛⬜
⬜⬜⬜⬜⬜⬜
";
let response = server.get("/12/random-board").await;
response.assert_status_ok();
response.assert_text(want);
}
}