use assert_matches::assert_matches;
use chrono::TimeDelta;
use super::{generate_time_events, v2x::TimeRestrictions};
use super::test::date_time_span;
#[test]
fn should_emit_no_events_before_start_time() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "12:02:00", "2025-11-10", "14:00:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
assert_matches!(events.as_slice(), []);
}
#[test]
fn should_emit_no_events_finishes_at_start_time_pricisely() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "12:02:00", "2025-11-10", "14:00:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
assert_matches!(events.as_slice(), []);
}
#[test]
fn should_emit_one_event_precise_overlap_with_start_time() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "15:00:00", "2025-11-10", "17:00:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
let [event] = events.try_into().unwrap();
assert_eq!(event.duration_from_start, TimeDelta::zero());
}
#[test]
fn should_emit_one_event_hour_before_start_time() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "14:00:00", "2025-11-10", "17:00:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
let [event] = events.try_into().unwrap();
assert_eq!(event.duration_from_start, TimeDelta::hours(1));
}
#[test]
fn should_emit_one_event_almost_full_day() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "15:00:00", "2025-11-11", "14:59:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
let [event] = events.try_into().unwrap();
assert_eq!(event.duration_from_start, TimeDelta::zero());
}
#[test]
fn should_emit_two_events_full_day_precisely() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "15:00:00", "2025-11-11", "15:00:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
let [event_0, event_1] = events.try_into().unwrap();
assert_eq!(event_0.duration_from_start, TimeDelta::zero());
assert_eq!(event_1.duration_from_start, TimeDelta::days(1));
}
#[test]
fn should_emit_two_events_full_day_with_hour_margin() {
let events = generate_time_events(
chrono_tz::Tz::Europe__Amsterdam,
date_time_span("2025-11-10", "14:00:00", "2025-11-11", "16:00:00"),
TimeRestrictions {
start_time: Some("15:00".parse().unwrap()),
..TimeRestrictions::default()
},
);
let [event_0, event_1] = events.try_into().unwrap();
assert_eq!(event_0.duration_from_start, TimeDelta::hours(1));
assert_eq!(
event_1.duration_from_start,
TimeDelta::days(1) + TimeDelta::hours(1)
);
}