diff --git a/src/runner.rs b/src/runner.rs index 41684d7..1519334 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -1,7 +1,7 @@ use crate::config::ProtocolKind; use crate::protocols; use anyhow::{Context, Result}; -use chrono::Utc; +use chrono::Local; use reqwest::Client; use reqwest::header::HeaderMap; use serde::Serialize; @@ -102,7 +102,7 @@ impl RawDebugConfig { } async fn write_debug_file(&self, response_kind: &str, contents: &str) -> Result { - let now = Utc::now(); + let now = Local::now(); let dated_output_dir = self.output_dir.join(now.format("%Y%m%d").to_string()); tokio::fs::create_dir_all(&dated_output_dir) .await @@ -113,7 +113,7 @@ impl RawDebugConfig { ) })?; let sequence = self.counter.fetch_add(1, Ordering::Relaxed) + 1; - let timestamp = now.format("%Y%m%dT%H%M%S%.3fZ"); + let timestamp = now.format("%Y%m%dT%H%M%S%.3f%z"); let filename = format!( "{}-{}-{sequence:06}-{}.txt", self.prefix, @@ -324,4 +324,25 @@ mod tests { assert!(components[0].chars().all(|ch| ch.is_ascii_digit())); assert!(components[1].ends_with("-response-kind.txt")); } + + #[tokio::test] + async fn raw_debug_uses_local_time_for_directory_and_filename() { + let temp_dir = tempfile::tempdir().expect("create temp dir"); + let raw_debug = RawDebugConfig::new(temp_dir.path().join("debug"), "model/test".into()); + + let path = raw_debug + .write_response("response-kind", "body") + .await + .expect("write debug response"); + + let local_now = chrono::Local::now(); + let local_date = local_now.format("%Y%m%d").to_string(); + let local_hour_prefix = local_now.format("%Y%m%dT%H").to_string(); + let filename = path.file_name().expect("debug filename").to_string_lossy(); + + assert!(path.starts_with(temp_dir.path().join("debug").join(local_date))); + assert!(filename.contains(&local_hour_prefix)); + assert!(filename.contains(&local_now.format("%z").to_string())); + assert!(!filename.contains('Z')); + } }