summaryrefslogtreecommitdiff
path: root/src/tests.rs
diff options
context:
space:
mode:
authorbatsumaru <>2026-10-16 15:34:20 +0900
committerbatsumaru <>2026-10-16 15:34:20 +0900
commit7afd3da7b870fc56e54d04b131c1caf975a30f2c (patch)
tree503fc3fe475d8ab66bd9be22ee921da1b223f55a /src/tests.rs
parentb49bb08c7a77fe4b29cf4ed0504c2f1c32a025e3 (diff)
Change filter to UTC timestamps
Diffstat (limited to 'src/tests.rs')
-rw-r--r--src/tests.rs61
1 files changed, 38 insertions, 23 deletions
diff --git a/src/tests.rs b/src/tests.rs
index 5b21352..d2ee143 100644
--- a/src/tests.rs
+++ b/src/tests.rs
@@ -128,6 +128,10 @@ async fn create_rejects_bad_bodies(pool: PgPool) {
measurement("2026-10-14T12:00:00Z", "Waist", -1.0, "Centimeter"),
StatusCode::UNPROCESSABLE_ENTITY,
),
+ (
+ measurement("2026-10-14T12:00:00", "Waist", 80.0, "Centimeter"),
+ StatusCode::UNPROCESSABLE_ENTITY,
+ ),
("not json".to_owned(), StatusCode::BAD_REQUEST),
];
for (body, expected) in cases {
@@ -207,30 +211,38 @@ async fn list_limit_applies_after_ordering(pool: PgPool) {
}
#[sqlx::test]
-async fn list_single_date_includes_the_whole_day(pool: PgPool) {
+async fn list_bounds_are_half_open(pool: PgPool) {
let app = router(pool);
seed(&app).await;
- let (status, rows) = get_json(&app, "/measurements?date=2026-10-15").await;
+ let uri = "/measurements?from=2026-10-15T00:00:00Z&to=2026-10-16T08:00:00Z";
+ let (status, rows) = get_json(&app, uri).await;
assert_eq!(status, StatusCode::OK);
assert_eq!(values(&rows), [2.0, 3.0]);
}
#[sqlx::test]
-async fn list_ranges_are_inclusive_of_both_days(pool: PgPool) {
+async fn list_filters_by_utc_timestamps(pool: PgPool) {
let app = router(pool);
seed(&app).await;
let cases = [
- ("/measurements?from=2026-10-15", vec![2.0, 3.0, 4.0]),
- ("/measurements?to=2026-10-14", vec![1.0]),
(
- "/measurements?from=2026-10-14&to=2026-10-15",
- vec![1.0, 2.0, 3.0],
+ "/measurements?from=2026-10-15T00:00:00Z",
+ vec![2.0, 3.0, 4.0],
+ ),
+ ("/measurements?to=2026-10-15T00:00:00Z", vec![1.0]),
+ (
+ "/measurements?from=2026-10-14T15:00:00Z&to=2026-10-15T15:00:00Z",
+ vec![2.0],
+ ),
+ (
+ "/measurements?from=2026-10-15T09:00:00%2B09:00",
+ vec![2.0, 3.0, 4.0],
),
(
- "/measurements?from=2026-10-15&to=2026-10-15",
- vec![2.0, 3.0],
+ "/measurements?from=2026-10-15T00:00:00Z&to=2026-10-15T00:00:00Z",
+ vec![],
),
- ("/measurements?from=2030-01-01", vec![]),
+ ("/measurements?from=2030-01-01T00:00:00Z", vec![]),
];
for (uri, expected) in cases {
let (status, rows) = get_json(&app, uri).await;
@@ -244,12 +256,15 @@ async fn list_combines_filters_with_order_and_limit(pool: PgPool) {
let app = router(pool);
seed(&app).await;
let cases = [
- ("/measurements?from=2026-10-15&limit=1", vec![2.0]),
+ ("/measurements?from=2026-10-15T00:00:00Z&limit=1", vec![2.0]),
(
- "/measurements?from=2026-10-15&order=desc&limit=2",
+ "/measurements?from=2026-10-15T00:00:00Z&order=desc&limit=2",
vec![4.0, 3.0],
),
- ("/measurements?date=2026-10-15&order=desc", vec![3.0, 2.0]),
+ (
+ "/measurements?from=2026-10-15T00:00:00Z&to=2026-10-16T00:00:00Z&order=desc",
+ vec![3.0, 2.0],
+ ),
];
for (uri, expected) in cases {
let (status, rows) = get_json(&app, uri).await;
@@ -265,11 +280,12 @@ async fn list_rejects_bad_queries(pool: PgPool) {
"/measurements?limit=0",
"/measurements?limit=-1",
"/measurements?order=sideways",
- "/measurements?date=bad",
"/measurements?from=bad",
- "/measurements?date=2026-10-15&from=2026-10-14",
- "/measurements?date=2026-10-15&to=2026-10-16",
- "/measurements?from=2026-10-16&to=2026-10-14",
+ "/measurements?from=2026-10-15",
+ "/measurements?to=2026-10-15T00:00:00",
+ "/measurements?from=2026-10-15T09:00:00+09:00",
+ "/measurements?date=2026-10-15",
+ "/measurements?from=2026-10-16T00:00:00Z&to=2026-10-14T00:00:00Z",
];
for uri in uris {
let (status, _) = get_json(&app, uri).await;
@@ -395,7 +411,7 @@ async fn errors_have_a_json_body(pool: PgPool) {
),
(
Method::GET,
- "/measurements?date=bad".to_owned(),
+ "/measurements?from=bad".to_owned(),
None,
StatusCode::BAD_REQUEST,
),
@@ -440,11 +456,7 @@ async fn error_messages_explain_the_problem(pool: PgPool) {
let cases = [
("/measurements?limit=0", "limit must be positive"),
(
- "/measurements?date=2026-10-15&from=2026-10-14",
- "date can't be combined with from or to",
- ),
- (
- "/measurements?from=2026-10-16&to=2026-10-14",
+ "/measurements?from=2026-10-16T00:00:00Z&to=2026-10-14T00:00:00Z",
"from must not be after to",
),
];
@@ -452,6 +464,9 @@ async fn error_messages_explain_the_problem(pool: PgPool) {
let (_, body) = get_json(&app, uri).await;
assert_eq!(body["error"], message, "{uri}");
}
+ let (_, body) = get_json(&app, "/measurements?date=2026-10-15").await;
+ let message = body["error"].as_str().unwrap();
+ assert!(message.contains("unknown field `date`"), "{message}");
let body = measurement("2026-10-14T12:00:00Z", "Waist", 80.0, "Kilogram");
let (_, _, body) = send(&app, Method::POST, "/measurements", Some(body)).await;
let message = body["error"].as_str().unwrap();