use chrono::{DateTime, Local, Utc};
pub fn generate_temporal_context(use_utc: bool) -> String {
if use_utc {
let now: DateTime<Utc> = Utc::now();
format!(
"\n\nCurrent date and time (UTC): {}",
now.to_rfc3339_opts(chrono::SecondsFormat::Secs, true)
)
} else {
let now: DateTime<Local> = Local::now();
format!(
"\n\nCurrent date and time: {}",
now.format("%A, %B %d, %Y at %I:%M:%S %p %Z")
)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_temporal_context_utc_format() {
let context = generate_temporal_context(true);
assert!(
context.contains("Current date and time (UTC):"),
"Should include UTC label"
);
assert!(
context.contains("T"),
"Should use RFC3339 format with T separator"
);
assert!(context.contains("Z"), "Should include Z timezone indicator");
}
#[test]
fn test_temporal_context_local_format() {
let context = generate_temporal_context(false);
assert!(
context.contains("Current date and time:"),
"Should include date/time label"
);
assert!(context.contains(" at "), "Should include 'at' separator");
let has_weekday = context.contains("Monday")
|| context.contains("Tuesday")
|| context.contains("Wednesday")
|| context.contains("Thursday")
|| context.contains("Friday")
|| context.contains("Saturday")
|| context.contains("Sunday");
assert!(has_weekday, "Should include day of week");
}
#[test]
fn test_temporal_context_non_empty() {
let utc = generate_temporal_context(true);
let local = generate_temporal_context(false);
assert!(!utc.is_empty(), "UTC context should not be empty");
assert!(!local.is_empty(), "Local context should not be empty");
assert!(utc.len() > 30, "UTC context should have reasonable length");
assert!(
local.len() > 40,
"Local context should have reasonable length"
);
}
#[test]
fn test_temporal_context_starts_with_newlines() {
let utc = generate_temporal_context(true);
let local = generate_temporal_context(false);
assert!(
utc.starts_with("\n\n"),
"Should start with double newline for spacing"
);
assert!(
local.starts_with("\n\n"),
"Should start with double newline for spacing"
);
}
}