diff options
| author | batsumaru <> | 2026-10-16 15:36:40 +0900 |
|---|---|---|
| committer | batsumaru <> | 2026-10-16 15:36:40 +0900 |
| commit | 289cdfd01ec2dda208de3cd67313c57133c1f092 (patch) | |
| tree | fbd56d052877776f333af7690b2b804ed98f9ef7 /src/tests.rs | |
| parent | 7afd3da7b870fc56e54d04b131c1caf975a30f2c (diff) | |
Add metric type filtering
Diffstat (limited to 'src/tests.rs')
| -rw-r--r-- | src/tests.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/tests.rs b/src/tests.rs index d2ee143..1f539bd 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -274,12 +274,57 @@ async fn list_combines_filters_with_order_and_limit(pool: PgPool) { } #[sqlx::test] +async fn list_filters_by_metric_type(pool: PgPool) { + let app = router(pool); + let rows = [ + ("2026-10-14T12:00:00Z", "BodyWeight", 70.0, "Kilogram"), + ("2026-10-15T12:00:00Z", "Waist", 80.0, "Centimeter"), + ("2026-10-16T12:00:00Z", "BodyWeight", 71.0, "Kilogram"), + ("2026-10-17T12:00:00Z", "Hip", 95.0, "Centimeter"), + ("2026-10-18T12:00:00Z", "BodyWeight", 72.0, "Kilogram"), + ]; + for (measured_at, metric_type, value, unit) in rows { + let body = measurement(measured_at, metric_type, value, unit); + let (status, _, _) = send(&app, Method::POST, "/measurements", Some(body)).await; + assert_eq!(status, StatusCode::CREATED); + } + let cases = [ + ("/measurements", vec![70.0, 80.0, 71.0, 95.0, 72.0]), + ( + "/measurements?metric_type=BodyWeight", + vec![70.0, 71.0, 72.0], + ), + ("/measurements?metric_type=Waist", vec![80.0]), + ("/measurements?metric_type=Hip", vec![95.0]), + ( + "/measurements?metric_type=BodyWeight&order=desc&limit=2", + vec![72.0, 71.0], + ), + ( + "/measurements?metric_type=BodyWeight&from=2026-10-15T00:00:00Z&to=2026-10-18T00:00:00Z", + vec![71.0], + ), + ( + "/measurements?metric_type=Hip&to=2026-10-17T00:00:00Z", + vec![], + ), + ]; + for (uri, expected) in cases { + let (status, rows) = get_json(&app, uri).await; + assert_eq!(status, StatusCode::OK, "{uri}"); + assert_eq!(values(&rows), expected, "{uri}"); + } +} + +#[sqlx::test] async fn list_rejects_bad_queries(pool: PgPool) { let app = router(pool); let uris = [ "/measurements?limit=0", "/measurements?limit=-1", "/measurements?order=sideways", + "/measurements?metric_type=Nope", + "/measurements?metric_type=bodyweight", "/measurements?from=bad", "/measurements?from=2026-10-15", "/measurements?to=2026-10-15T00:00:00", |
