File size: 2,750 Bytes
f6213fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | use axum::body::Body;
use axum::http::{Request, StatusCode};
use tower::ServiceExt;
use crate::support::api::{read_json, small_plan, test_app};
#[tokio::test]
async fn demo_data_and_static_assets_match_current_contract() {
let app = test_app();
let demo_response = app
.clone()
.oneshot(Request::get("/demo-data").body(Body::empty()).unwrap())
.await
.unwrap();
assert_eq!(demo_response.status(), StatusCode::OK);
let demos = read_json(demo_response).await;
assert_eq!(
demos,
serde_json::json!(["PHILADELPHIA", "HARTFORD", "FIRENZE"])
);
let demo_plan_response = app
.clone()
.oneshot(
Request::get("/demo-data/PHILADELPHIA")
.body(Body::empty())
.unwrap(),
)
.await
.unwrap();
assert_eq!(demo_plan_response.status(), StatusCode::OK);
let demo_plan = read_json(demo_plan_response).await;
assert_eq!(demo_plan["name"], "Philadelphia");
assert_eq!(demo_plan["routingMode"], "road_network");
assert!(!demo_plan["viewState"]["preview"]["vehicles"]
.as_array()
.expect("preview vehicles should exist")
.is_empty());
let asset_response = app
.clone()
.oneshot(Request::get("/sf/sf.js").body(Body::empty()).unwrap())
.await
.unwrap();
assert_eq!(asset_response.status(), StatusCode::OK);
let no_legacy_response = app
.clone()
.oneshot(Request::get("/webjars/").body(Body::empty()).unwrap())
.await
.unwrap();
assert_eq!(no_legacy_response.status(), StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn recommendations_endpoint_returns_ranked_preview_plans() {
let app = test_app();
let mut plan = small_plan();
if let Some(order) = plan["vehicles"][0]["deliveryOrder"].as_array_mut() {
order.clear();
}
let response = app
.clone()
.oneshot(
Request::post("/recommendations/delivery-insertions")
.header("content-type", "application/json")
.body(Body::from(
serde_json::json!({
"plan": plan,
"deliveryId": 0,
"limit": 5
})
.to_string(),
))
.unwrap(),
)
.await
.unwrap();
assert_eq!(response.status(), StatusCode::OK);
let json = read_json(response).await;
let candidates = json["candidates"]
.as_array()
.expect("candidates should be an array");
assert!(!candidates.is_empty());
assert!(candidates[0]["previewPlan"]["viewState"]["preview"].is_object());
}
|