full integration test: sign up, create bot, play match
This commit is contained in:
parent
df44ef055e
commit
9825d2c49e
1 changed files with 102 additions and 0 deletions
|
@ -212,3 +212,105 @@ async fn test_submit_bot() -> io::Result<()> {
|
||||||
.expect("failed to get match result");
|
.expect("failed to get match result");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
|
async fn test_sign_up_and_create_bot() -> 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);
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let mut app = create_pw_api(test_app.config, test_app.db_pool);
|
||||||
|
|
||||||
|
// Registration
|
||||||
|
let credentials = json!({
|
||||||
|
"username": "piepkonijn",
|
||||||
|
"password": "123geheim",
|
||||||
|
});
|
||||||
|
let response = app
|
||||||
|
.call(
|
||||||
|
Request::builder()
|
||||||
|
.method(http::Method::POST)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.uri("/api/register")
|
||||||
|
.body(serde_json::to_vec(&credentials).unwrap().into())
|
||||||
|
.unwrap(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
|
||||||
|
// Login
|
||||||
|
let response = app
|
||||||
|
.call(
|
||||||
|
Request::builder()
|
||||||
|
.method(http::Method::POST)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.uri("/api/login")
|
||||||
|
.body(serde_json::to_vec(&credentials).unwrap().into())
|
||||||
|
.unwrap(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let session_token = response.headers()["Token"].to_str().unwrap().clone();
|
||||||
|
|
||||||
|
// save bot
|
||||||
|
let simplebot_code = std::fs::read_to_string("../simplebot/simplebot.py")
|
||||||
|
.expect("could not read simplebot code");
|
||||||
|
|
||||||
|
let payload = json!({
|
||||||
|
"bot_name": "testbot",
|
||||||
|
"code": simplebot_code,
|
||||||
|
});
|
||||||
|
|
||||||
|
let response = app
|
||||||
|
.call(
|
||||||
|
Request::builder()
|
||||||
|
.method(http::Method::POST)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.header("Authorization", format!("Bearer {}", session_token))
|
||||||
|
.uri("/api/save_bot")
|
||||||
|
.body(serde_json::to_vec(&payload).unwrap().into())
|
||||||
|
.unwrap(),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
|
||||||
|
// launch a match against the new bot
|
||||||
|
let payload = json!({
|
||||||
|
"code": simplebot_code,
|
||||||
|
// TODO: how can we test that this bot is acutally being selected?
|
||||||
|
"opponent_name": "testbot",
|
||||||
|
});
|
||||||
|
let response = app
|
||||||
|
.call(
|
||||||
|
Request::builder()
|
||||||
|
.method(http::Method::POST)
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.uri("/api/submit_bot")
|
||||||
|
.body(serde_json::to_vec(&payload).unwrap().into())
|
||||||
|
.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 match_id = &resp["match"]["id"].as_i64().unwrap();
|
||||||
|
let _match_result = tokio::time::timeout(
|
||||||
|
Duration::from_secs(10),
|
||||||
|
poll_match_until_complete(&mut app, &match_id.to_string()),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.expect("fetching match result timed out")
|
||||||
|
.expect("failed to get match result");
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue