use crate::common::
assert_diff_between_dates_with_repeated_time
;
use chrono::{Utc, TimeZone, Datelike};
use common::generate_happy_flow_arguments as common_para_for_test;
use timex::schedule_date_times;
#[path = "./common.rs"]
mod common;
#[test]
fn it_month_non_stop_on_given_day() {
let sc = r#"
{
"scheduledStartDateTime": "2023-11-30T09:08:44.939Z",
"repeatEveryNumber": 2,
"repeatEvery": "month",
"endOption": "never",
"monthOptions": "onDay",
"onDayValueForMonth": 1,
"--": "Occur every 2 month on day 1 starting on 2023/12/14 14:38"
}
"#;
let t = common_para_for_test(
sc,
);
let range_date = t.range_date;
let job_details = t.job_details;
let scheduled_start_date_time = t.scheduled_start_date_time;
dbg!(&range_date.0);
dbg!(&range_date.1);
dbg!(format!("{job_details}"));
let actual = schedule_date_times(
&job_details,
scheduled_start_date_time,
range_date.0,
range_date.1,
)
.unwrap();
dbg!(&actual);
assert_diff_between_dates_with_repeated_time(&actual, &job_details, &scheduled_start_date_time);
assert_ne!(actual.len(), 0, "every month a date has be produced");
for w in actual {
assert_eq!(
w.day() as i64,
job_details.on_day_value_for_month.unwrap(),
)
}
}
#[test]
fn it_month_first_monday_non_stop() {
let sc = r#"
{
"scheduledStartDateTime": "2023-12-14T09:08:44.939Z",
"repeatEveryNumber": 1,
"repeatEvery": "month",
"endOption": "never",
"monthOptions": "onThe",
"dayCategoryForMonth": "first",
"weekDayForMonth": "monday",
"--": "Occur every month on first Monday starting on 2023/12/14 14:38"
}
"#;
let t = common_para_for_test(
sc,
);
let range_date = t.range_date;
let job_details = t.job_details;
let scheduled_start_date_time = t.scheduled_start_date_time;
dbg!(&range_date.0);
dbg!(&range_date.1);
let actual = schedule_date_times(
&job_details,
scheduled_start_date_time,
range_date.0,
range_date.1,
)
.unwrap();
dbg!(&actual);
assert_diff_between_dates_with_repeated_time(&actual, &job_details, &scheduled_start_date_time);
}
#[test]
fn it_month_special_case_non_stop() {
let sc = r#"
{
"scheduledStartDateTime": "2023-12-14T09:08:44.939Z",
"repeatEveryNumber": 1,
"repeatEvery": "month",
"endOption": "never",
"monthOptions": "onDay",
"onDayValueForMonth": 31,
"---": "special case"
}
"#;
let t = common_para_for_test(
sc,
);
let range_date = t.range_date;
let job_details = t.job_details;
let scheduled_start_date_time = t.scheduled_start_date_time;
dbg!(&range_date.0);
dbg!(&range_date.1);
let actual = schedule_date_times(
&job_details,
scheduled_start_date_time,
range_date.0,
range_date.1,
)
.unwrap();
dbg!(&actual);
assert_diff_between_dates_with_repeated_time(&actual, &job_details, &scheduled_start_date_time);
}
#[test]
fn it_month_end_date() {
let sc = r#"
{
"scheduledStartDateTime": "2024-01-08T05:28:58.508Z",
"repeatEveryNumber": 1,
"repeatEvery": "month",
"endOption": "onThe",
"endDate": "2024-07-01T18:29:59.999Z",
"monthOptions": "onDay",
"onDayValueForMonth": 4,
"---": "Occur every month on day 1 starting on 2024/01/08 10:58 until 2024/06/31"
}
"#;
let t = common_para_for_test(
sc,
);
let range_date = t.range_date;
let job_details = t.job_details;
let scheduled_start_date_time = t.scheduled_start_date_time;
dbg!(&range_date.0);
dbg!(&range_date.1);
let actual = schedule_date_times(
&job_details,
scheduled_start_date_time,
range_date.0,
range_date.1,
).unwrap();
dbg!(&actual);
assert_diff_between_dates_with_repeated_time(&actual, &job_details, &scheduled_start_date_time);
}
#[test]
fn it_month_end_date_special_case() {
let sc = r#"
{
"scheduledStartDateTime": "2024-01-08T05:28:58.508Z",
"repeatEveryNumber": 1,
"repeatEvery": "month",
"endOption": "onThe",
"endDate": "2024-07-01T18:29:59.999Z",
"monthOptions": "onDay",
"onDayValueForMonth": 31,
"---": "Occur every month on day 1 starting on 2024/01/08 10:58 until 2024/06/31"
}
"#;
let t = common_para_for_test(
sc,
);
let range_date = t.range_date;
let job_details = t.job_details;
let scheduled_start_date_time = t.scheduled_start_date_time;
dbg!(&range_date.0);
dbg!(&range_date.1);
let actual = schedule_date_times(
&job_details,
scheduled_start_date_time,
range_date.0,
range_date.1,
).unwrap();
dbg!(&actual);
assert_diff_between_dates_with_repeated_time(&actual, &job_details, &scheduled_start_date_time);
}
#[test]
fn it_month_non_next_year() {
let sc = r#"
{
"scheduledStartDateTime": "2024-10-20T09:08:44.939Z",
"repeatEveryNumber": 1,
"repeatEvery": "month",
"endOption": "never",
"monthOptions": "onDay",
"onDayValueForMonth": 1,
"--": "Occur every 2 month on day 1 starting on 2023/12/14 14:38"
}
"#;
let t = common_para_for_test(
sc,
);
let range_date = (
Utc.with_ymd_and_hms(2024, 1, 1, 0, 0, 0).unwrap(),
Utc.with_ymd_and_hms(2027, 2, 20, 0, 0, 0).unwrap()
);
let job_details = t.job_details;
let scheduled_start_date_time = t.scheduled_start_date_time;
dbg!(&range_date.0);
dbg!(&range_date.1);
let actual = schedule_date_times(
&job_details,
scheduled_start_date_time,
range_date.0,
range_date.1,
).unwrap();
dbg!(&actual);
assert_diff_between_dates_with_repeated_time(&actual, &job_details, &scheduled_start_date_time);
}