Skip to content

Commit ffd705f

Browse files
author
Devdutt Shenoi
committed
test: improve coverage
1 parent aae9bef commit ffd705f

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

src/utils/time.rs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,84 @@ impl TimeRange {
7474
Ok(Self { start, end })
7575
}
7676
}
77+
78+
#[cfg(test)]
79+
mod tests {
80+
use super::*;
81+
use chrono::{Duration, SecondsFormat, Utc};
82+
83+
#[test]
84+
fn valid_rfc3339_timestamps() {
85+
let start_time = "2023-01-01T12:00:00Z";
86+
let end_time = "2023-01-01T13:00:00Z";
87+
88+
let result = TimeRange::parse_human_time(start_time, end_time);
89+
let parsed = result.unwrap();
90+
91+
assert_eq!(
92+
parsed.start.to_rfc3339_opts(SecondsFormat::Secs, true),
93+
start_time
94+
);
95+
assert_eq!(
96+
parsed.end.to_rfc3339_opts(SecondsFormat::Secs, true),
97+
end_time
98+
);
99+
}
100+
101+
#[test]
102+
fn end_time_now_with_valid_duration() {
103+
let start_time = "1h";
104+
let end_time = "now";
105+
106+
let result = TimeRange::parse_human_time(start_time, end_time);
107+
let parsed = result.unwrap();
108+
109+
assert!(parsed.end <= Utc::now());
110+
assert_eq!(parsed.end - parsed.start, Duration::hours(1));
111+
112+
let start_time = "30 minutes";
113+
let end_time = "now";
114+
115+
let result = TimeRange::parse_human_time(start_time, end_time);
116+
let parsed = result.unwrap();
117+
118+
assert!(parsed.end <= Utc::now());
119+
assert_eq!(parsed.end - parsed.start, Duration::minutes(30));
120+
}
121+
122+
#[test]
123+
fn start_time_after_end_time() {
124+
let start_time = "2023-01-01T14:00:00Z";
125+
let end_time = "2023-01-01T13:00:00Z";
126+
127+
let result = TimeRange::parse_human_time(start_time, end_time);
128+
assert!(matches!(result, Err(TimeParseError::StartTimeAfterEndTime)));
129+
}
130+
131+
#[test]
132+
fn invalid_start_time_format() {
133+
let start_time = "not-a-valid-time";
134+
let end_time = "2023-01-01T13:00:00Z";
135+
136+
let result = TimeRange::parse_human_time(start_time, end_time);
137+
assert!(matches!(result, Err(TimeParseError::Chrono(_))));
138+
}
139+
140+
#[test]
141+
fn invalid_end_time_format() {
142+
let start_time = "2023-01-01T12:00:00Z";
143+
let end_time = "not-a-valid-time";
144+
145+
let result = TimeRange::parse_human_time(start_time, end_time);
146+
assert!(matches!(result, Err(TimeParseError::Chrono(_))));
147+
}
148+
149+
#[test]
150+
fn invalid_duration_with_end_time_now() {
151+
let start_time = "not-a-duration";
152+
let end_time = "now";
153+
154+
let result = TimeRange::parse_human_time(start_time, end_time);
155+
assert!(matches!(result, Err(TimeParseError::HumanTime(_))));
156+
}
157+
}

0 commit comments

Comments
 (0)