From 21d277a0ef935fe2481abdd0c99ad67e458bf814 Mon Sep 17 00:00:00 2001 From: Tamo Date: Tue, 22 Feb 2022 01:57:46 +0100 Subject: [PATCH] fix(all): fix two dates that were wrongly formatted --- meilisearch-http/tests/stats/mod.rs | 7 +++- .../src/index_controller/dump_actor/actor.rs | 34 ++++++++++++++++++- meilisearch-lib/src/index_controller/mod.rs | 1 + 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/meilisearch-http/tests/stats/mod.rs b/meilisearch-http/tests/stats/mod.rs index e89d145e1..b9d185ca3 100644 --- a/meilisearch-http/tests/stats/mod.rs +++ b/meilisearch-http/tests/stats/mod.rs @@ -1,4 +1,5 @@ use serde_json::json; +use time::{format_description::well_known::Rfc3339, OffsetDateTime}; use crate::common::Server; @@ -57,11 +58,15 @@ async fn stats() { index.wait_task(1).await; + let timestamp = OffsetDateTime::now_utc(); let (response, code) = server.stats().await; assert_eq!(code, 200); assert!(response["databaseSize"].as_u64().unwrap() > 0); - assert!(response.get("lastUpdate").is_some()); + let last_update = + OffsetDateTime::parse(response["lastUpdate"].as_str().unwrap(), &Rfc3339).unwrap(); + assert!(last_update - timestamp < time::Duration::SECOND); + assert_eq!(response["indexes"]["test"]["numberOfDocuments"], 2); assert!(response["indexes"]["test"]["isIndexing"] == false); assert_eq!(response["indexes"]["test"]["fieldDistribution"]["id"], 2); diff --git a/meilisearch-lib/src/index_controller/dump_actor/actor.rs b/meilisearch-lib/src/index_controller/dump_actor/actor.rs index a94eac6ce..48fc077ca 100644 --- a/meilisearch-lib/src/index_controller/dump_actor/actor.rs +++ b/meilisearch-lib/src/index_controller/dump_actor/actor.rs @@ -31,7 +31,9 @@ pub struct DumpActor { /// Generate uid from creation date fn generate_uid() -> String { OffsetDateTime::now_utc() - .format(format_description!("%Y%m%d-%H%M%S%3f")) + .format(format_description!( + "[year repr:full][month repr:numerical][day padding:zero]-[hour padding:zero][minute padding:zero][second padding:zero][subsecond digits:3]" + )) .unwrap() } @@ -157,3 +159,33 @@ impl DumpActor { } } } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_generate_uid() { + let current = OffsetDateTime::now_utc(); + + let uid = generate_uid(); + let (date, time) = uid.split_once('-').unwrap(); + + let date = time::Date::parse( + date, + &format_description!("[year repr:full][month repr:numerical][day padding:zero]"), + ) + .unwrap(); + let time = time::Time::parse( + time, + &format_description!( + "[hour padding:zero][minute padding:zero][second padding:zero][subsecond digits:3]" + ), + ) + .unwrap(); + let datetime = time::PrimitiveDateTime::new(date, time); + let datetime = datetime.assume_utc(); + + assert!(current - datetime < time::Duration::SECOND); + } +} diff --git a/meilisearch-lib/src/index_controller/mod.rs b/meilisearch-lib/src/index_controller/mod.rs index 8995df39c..06f64f1c1 100644 --- a/meilisearch-lib/src/index_controller/mod.rs +++ b/meilisearch-lib/src/index_controller/mod.rs @@ -107,6 +107,7 @@ impl fmt::Display for DocumentAdditionFormat { #[serde(rename_all = "camelCase")] pub struct Stats { pub database_size: u64, + #[serde(serialize_with = "time::serde::rfc3339::option::serialize")] pub last_update: Option, pub indexes: BTreeMap, }