mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-08 03:10:26 +00:00
Add shared axum/reqwest response assertion helpers in fabro-test, migrate the Rust HTTP test surface to use them, and document the new rule in the testing strategy.
47 lines
1.5 KiB
Rust
47 lines
1.5 KiB
Rust
use axum::body::Body;
|
|
use axum::http::{Request, StatusCode};
|
|
use tokio::time::sleep;
|
|
use tower::ServiceExt;
|
|
|
|
use crate::helpers::{
|
|
MINIMAL_DOT, POLL_ATTEMPTS, POLL_INTERVAL, api, create_and_start_run_from_manifest,
|
|
minimal_manifest_json_with_dry_run, test_app_state_with_options, test_app_with_scheduler,
|
|
test_settings, wait_for_run_status,
|
|
};
|
|
|
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
|
async fn aggregate_billing_increments_after_run_completes() {
|
|
let state = test_app_state_with_options(test_settings(), 5);
|
|
let app = test_app_with_scheduler(state);
|
|
|
|
let run_id =
|
|
create_and_start_run_from_manifest(&app, minimal_manifest_json_with_dry_run(MINIMAL_DOT))
|
|
.await;
|
|
|
|
// Poll until run completes
|
|
let status = wait_for_run_status(&app, &run_id, &["succeeded", "failed"]).await;
|
|
assert_eq!(status, "succeeded");
|
|
|
|
let mut total_runs = 0;
|
|
for _ in 0..POLL_ATTEMPTS {
|
|
let req = Request::builder()
|
|
.method("GET")
|
|
.uri(api("/billing"))
|
|
.body(Body::empty())
|
|
.unwrap();
|
|
|
|
let response = app.clone().oneshot(req).await.unwrap();
|
|
let body = crate::helpers::response_json(
|
|
response,
|
|
StatusCode::OK,
|
|
format!("{}:{}", file!(), line!()),
|
|
)
|
|
.await;
|
|
total_runs = body["totals"]["runs"].as_i64().unwrap();
|
|
if total_runs == 1 {
|
|
break;
|
|
}
|
|
sleep(POLL_INTERVAL).await;
|
|
}
|
|
assert_eq!(total_runs, 1);
|
|
}
|