diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2022-10-13 23:42:44 +0200 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2022-10-13 23:42:44 +0200 |
commit | 353ecd4c165042234e9f976b158bc970517940f5 (patch) | |
tree | c057b7f8bcad2fe300da9391aff539409a0f83b0 /planetwars-server/tests/integration.rs | |
parent | eb2cbb15fbea6dd6f800598329cd5cc892090d7b (diff) | |
download | planetwars.dev-353ecd4c165042234e9f976b158bc970517940f5.tar.xz planetwars.dev-353ecd4c165042234e9f976b158bc970517940f5.zip |
basic test for list_matches and had_errors
Diffstat (limited to 'planetwars-server/tests/integration.rs')
-rw-r--r-- | planetwars-server/tests/integration.rs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/planetwars-server/tests/integration.rs b/planetwars-server/tests/integration.rs index 83de912..28cfe1a 100644 --- a/planetwars-server/tests/integration.rs +++ b/planetwars-server/tests/integration.rs @@ -128,6 +128,21 @@ impl<'a> TestApp<'a> { .expect("could not get db connection"); function(&mut db_conn) } + + async fn play_public_match(&self, bot_names: &[&str], map_name: &str) { + let mut conn = self.db_pool.get().await.unwrap(); + let map = db::maps::find_map_by_name(map_name, &mut conn).unwrap(); + + let mut bots = Vec::new(); + for bot_name in bot_names.iter() { + let (bot, bot_version) = + db::bots::find_bot_with_version_by_name(bot_name, &mut conn).unwrap(); + bots.push((bot, bot_version)); + } + + modules::ranking::play_ranked_match(self.config.clone(), map, bots, self.db_pool.clone()) + .await; + } } async fn poll_match(app: &mut Router, match_id: &str) -> io::Result<Poll<JsonValue>> { @@ -314,3 +329,65 @@ async fn test_sign_up_and_create_bot() -> io::Result<()> { Ok(()) } + +#[tokio::test(flavor = "multi_thread")] +async fn test_list_matches_with_errors() -> io::Result<()> { + let test_app = TestApp::create().await.unwrap(); + test_app + .with_db_conn(|db_conn| { + clear_database(db_conn); + setup_simple_fixture(db_conn, &test_app.config); + + let bot = db::bots::create_bot( + &db::bots::NewBot { + owner_id: None, + name: "testbot", + }, + db_conn, + ) + .expect("could not create bot"); + + let failing_code = "import sys; sys.exit(1)"; + + let _bot_version = modules::bots::save_code_string( + failing_code, + Some(bot.id), + db_conn, + &test_app.config, + ) + .expect("could not save bot version"); + }) + .await; + + test_app + .play_public_match(&["simplebot", "testbot"], "hex") + .await; + + let mut app = create_pw_api(test_app.config, test_app.db_pool); + + let response = app + .call( + Request::builder() + .method(http::Method::GET) + .header("Content-Type", "application/json") + .uri(format!("/api/matches?bot=testbot")) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::OK); + let body = hyper::body::to_bytes(response.into_body()).await.unwrap(); + let resp: JsonValue = serde_json::from_slice(&body).unwrap(); + + let matches = resp["matches"].as_array().unwrap(); + assert_eq!(matches.len(), 1); + assert_eq!( + matches[0]["players"][0]["had_errors"].as_bool(), + Some(false) + ); + assert_eq!(matches[0]["players"][1]["had_errors"].as_bool(), Some(true)); + + Ok(()) +} |