2021-03-10 13:55:06 +00:00
|
|
|
from datetime import date, datetime
|
2017-07-18 18:21:35 +01:00
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
2019-08-28 14:27:08 +01:00
|
|
|
from app.dao.date_util import (
|
2025-02-24 12:30:45 -05:00
|
|
|
generate_hourly_range,
|
2023-06-14 13:19:11 -07:00
|
|
|
get_calendar_year,
|
|
|
|
|
get_calendar_year_for_datetime,
|
2021-03-10 13:55:06 +00:00
|
|
|
get_month_start_and_end_date_in_utc,
|
2023-06-14 13:19:11 -07:00
|
|
|
get_new_years,
|
2019-08-28 14:27:08 +01:00
|
|
|
)
|
2017-04-26 14:16:47 +01:00
|
|
|
|
|
|
|
|
|
2023-06-14 13:19:11 -07:00
|
|
|
def test_get_calendar_year():
|
|
|
|
|
start, end = get_calendar_year(2000)
|
2023-08-29 14:54:30 -07:00
|
|
|
assert str(start) == "2000-01-01 00:00:00"
|
|
|
|
|
assert str(end) == "2000-12-31 23:59:59.999999"
|
2017-04-26 14:16:47 +01:00
|
|
|
|
|
|
|
|
|
2023-06-14 13:19:11 -07:00
|
|
|
def test_get_new_years():
|
|
|
|
|
new_years = get_new_years(2016)
|
2023-08-29 14:54:30 -07:00
|
|
|
assert str(new_years) == "2016-01-01 00:00:00"
|
2023-06-14 13:19:11 -07:00
|
|
|
assert new_years.tzinfo is None
|
2017-07-18 18:21:35 +01:00
|
|
|
|
|
|
|
|
|
2023-08-29 14:54:30 -07:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
|
"month, year, expected_start, expected_end",
|
|
|
|
|
[
|
|
|
|
|
(
|
|
|
|
|
7,
|
|
|
|
|
2017,
|
|
|
|
|
datetime(2017, 7, 1, 0, 00, 00),
|
|
|
|
|
datetime(2017, 7, 31, 23, 59, 59, 99999),
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
2,
|
|
|
|
|
2016,
|
|
|
|
|
datetime(2016, 2, 1, 0, 00, 00),
|
|
|
|
|
datetime(2016, 2, 29, 23, 59, 59, 99999),
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
2,
|
|
|
|
|
2017,
|
|
|
|
|
datetime(2017, 2, 1, 0, 00, 00),
|
|
|
|
|
datetime(2017, 2, 28, 23, 59, 59, 99999),
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
9,
|
|
|
|
|
2018,
|
|
|
|
|
datetime(2018, 9, 1, 0, 00, 00),
|
|
|
|
|
datetime(2018, 9, 30, 23, 59, 59, 99999),
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
12,
|
|
|
|
|
2019,
|
|
|
|
|
datetime(2019, 12, 1, 0, 00, 00),
|
|
|
|
|
datetime(2019, 12, 31, 23, 59, 59, 99999),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
)
|
2017-08-10 16:29:13 +01:00
|
|
|
def test_get_month_start_and_end_date_in_utc(month, year, expected_start, expected_end):
|
2017-07-18 18:21:35 +01:00
|
|
|
month_year = datetime(year, month, 10, 13, 30, 00)
|
2017-08-10 16:29:13 +01:00
|
|
|
result = get_month_start_and_end_date_in_utc(month_year)
|
2017-07-25 17:38:53 +01:00
|
|
|
assert result[0] == expected_start
|
|
|
|
|
assert result[1] == expected_end
|
2019-08-28 14:27:08 +01:00
|
|
|
|
|
|
|
|
|
2023-08-29 14:54:30 -07:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
|
"dt, fy",
|
|
|
|
|
[
|
|
|
|
|
(datetime(2018, 4, 1, 1, 0, 0), 2018),
|
|
|
|
|
(datetime(2019, 3, 31, 23, 59, 59), 2019),
|
|
|
|
|
(date(2019, 3, 31), 2019),
|
|
|
|
|
(date(2019, 4, 2), 2019),
|
|
|
|
|
],
|
|
|
|
|
)
|
2023-06-14 13:19:11 -07:00
|
|
|
def test_get_calendar_year_for_datetime(dt, fy):
|
|
|
|
|
assert get_calendar_year_for_datetime(dt) == fy
|
2025-02-24 12:26:22 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_generate_hourly_range_with_end_date():
|
|
|
|
|
start_date = datetime(2025, 2, 18, 12, 0)
|
|
|
|
|
end_date = datetime(2025, 2, 18, 15, 0)
|
|
|
|
|
result = list(generate_hourly_range(start_date, end_date=end_date))
|
|
|
|
|
|
|
|
|
|
expected = [
|
|
|
|
|
datetime(2025, 2, 18, 12, 0),
|
|
|
|
|
datetime(2025, 2, 18, 13, 0),
|
|
|
|
|
datetime(2025, 2, 18, 14, 0),
|
|
|
|
|
datetime(2025, 2, 18, 15, 0),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
assert result == expected, f"Expected {expected}, but got {result}"
|
|
|
|
|
|
2025-02-24 12:35:25 -05:00
|
|
|
|
2025-02-24 12:26:22 -05:00
|
|
|
def test_generate_hourly_range_with_hours():
|
|
|
|
|
start_date = datetime(2025, 2, 18, 12, 0)
|
|
|
|
|
result = list(generate_hourly_range(start_date, hours=3))
|
|
|
|
|
|
|
|
|
|
expected = [
|
|
|
|
|
datetime(2025, 2, 18, 12, 0),
|
|
|
|
|
datetime(2025, 2, 18, 13, 0),
|
|
|
|
|
datetime(2025, 2, 18, 14, 0),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
assert result == expected, f"Expected {expected}, but got {result}"
|
|
|
|
|
|
2025-02-24 12:35:25 -05:00
|
|
|
|
2025-02-24 12:26:22 -05:00
|
|
|
def test_generate_hourly_range_with_zero_hours():
|
|
|
|
|
start_date = datetime(2025, 2, 18, 12, 0)
|
|
|
|
|
result = list(generate_hourly_range(start_date, hours=0))
|
|
|
|
|
|
|
|
|
|
assert result == [], f"Expected an empty list, but got {result}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_generate_hourly_range_with_end_date_before_start():
|
|
|
|
|
start_date = datetime(2025, 2, 18, 12, 0)
|
|
|
|
|
end_date = datetime(2025, 2, 18, 10, 0)
|
|
|
|
|
result = list(generate_hourly_range(start_date, end_date=end_date))
|
|
|
|
|
|
|
|
|
|
assert result == [], f"Expected empty list, but got {result}"
|