133 lines
4.0 KiB
Python
133 lines
4.0 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
import pytest
|
|
|
|
from components.hoildays.helpers.calendar_helper import CalendarHelper
|
|
from components.hoildays.helpers.nibelisparser import OffPeriodDetails
|
|
|
|
|
|
def test_get_period_end_before_start():
|
|
with pytest.raises(ValueError) as err:
|
|
CalendarHelper.get_period(datetime.today(), datetime.today() - timedelta(days=1))
|
|
|
|
assert str(err.value) == "end date is before start date."
|
|
|
|
|
|
def test_get_period():
|
|
start = datetime.today()
|
|
res = CalendarHelper.get_period(start, start + timedelta(days=3))
|
|
|
|
assert res == [
|
|
start,
|
|
start + timedelta(days=1),
|
|
start + timedelta(days=2),
|
|
start + timedelta(days=3)
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize("start_am_pm, end_am_pm, is_start, is_end, expected", [
|
|
("am", None, True, False, "reason_am"),
|
|
("pm", None, True, False, "reason_pm"),
|
|
(None, "am", False, True, "reason_am"),
|
|
(None, "pm", False, True, "reason_pm"),
|
|
("am", "pm", True, True, "reason_am_pm"),
|
|
])
|
|
def test_get_reason(start_am_pm, end_am_pm, is_start, is_end, expected):
|
|
record = OffPeriodDetails(
|
|
first_name="first_name",
|
|
last_name="last_name",
|
|
start_date=datetime.today(),
|
|
start_am_pm=start_am_pm,
|
|
end_date=datetime.today() + timedelta(days=1),
|
|
end_am_pm=end_am_pm,
|
|
total=2,
|
|
reason="reason",
|
|
date_import=datetime.today(),
|
|
)
|
|
actual = CalendarHelper.get_reason(record, is_start, is_end)
|
|
|
|
assert actual == expected
|
|
|
|
|
|
def test_create_calendar_one_user():
|
|
records = [
|
|
OffPeriodDetails("john", "doo", datetime(2025, 6, 19), None, datetime(2025, 6, 20), None, 1, "CP", datetime.now())
|
|
]
|
|
|
|
names, calendar = CalendarHelper.create_calendar(records, datetime(2025, 6, 18), datetime(2025, 6, 21))
|
|
expected_calendar = {
|
|
datetime(2025, 6, 18): [None],
|
|
datetime(2025, 6, 19): [["CP"]],
|
|
datetime(2025, 6, 20): [["CP"]],
|
|
datetime(2025, 6, 21): [None],
|
|
}
|
|
|
|
assert names == ["john doo"]
|
|
assert calendar == expected_calendar
|
|
|
|
|
|
def test_create_calendar_multiple_users():
|
|
now = datetime.now()
|
|
records = [
|
|
OffPeriodDetails("john", "doo", datetime(2025, 6, 19), None, datetime(2025, 6, 20), None, 1, "CP", now),
|
|
OffPeriodDetails("jane", "doo", datetime(2025, 6, 18), None, datetime(2025, 6, 19), None, 1, "CP", now)
|
|
]
|
|
|
|
names, calendar = CalendarHelper.create_calendar(records, datetime(2025, 6, 18), datetime(2025, 6, 21))
|
|
expected_calendar = {
|
|
datetime(2025, 6, 18): [["CP"], None],
|
|
datetime(2025, 6, 19): [["CP"], ["CP"]],
|
|
datetime(2025, 6, 20): [None, ["CP"]],
|
|
datetime(2025, 6, 21): [None, None],
|
|
}
|
|
|
|
assert names == ["jane doo", "john doo"]
|
|
assert calendar == expected_calendar
|
|
|
|
|
|
def test_create_calendar_end_is_missing():
|
|
records = [
|
|
OffPeriodDetails("john", "doo", datetime(2025, 6, 19), None, datetime(2025, 6, 20), None, 1, "CP", datetime.now())
|
|
]
|
|
|
|
names, calendar = CalendarHelper.create_calendar(records, datetime(2025, 6, 18))
|
|
expected_calendar = {
|
|
datetime(2025, 6, 18): [None],
|
|
datetime(2025, 6, 19): [["CP"]],
|
|
datetime(2025, 6, 20): [["CP"]],
|
|
}
|
|
|
|
assert names == ["john doo"]
|
|
assert calendar == expected_calendar
|
|
|
|
|
|
def test_create_calendar_start_is_missing():
|
|
records = [
|
|
OffPeriodDetails("john", "doo", datetime(2025, 6, 19), None, datetime(2025, 6, 20), None, 1, "CP", datetime.now())
|
|
]
|
|
|
|
names, calendar = CalendarHelper.create_calendar(records, None, datetime(2025, 6, 21))
|
|
expected_calendar = {
|
|
datetime(2025, 6, 19): [["CP"]],
|
|
datetime(2025, 6, 20): [["CP"]],
|
|
datetime(2025, 6, 21): [None],
|
|
}
|
|
|
|
assert names == ["john doo"]
|
|
assert calendar == expected_calendar
|
|
|
|
|
|
def test_create_calendar_start_and_end_are_missing():
|
|
records = [
|
|
OffPeriodDetails("john", "doo", datetime(2025, 6, 19), None, datetime(2025, 6, 20), None, 1, "CP", datetime.now())
|
|
]
|
|
|
|
names, calendar = CalendarHelper.create_calendar(records)
|
|
expected_calendar = {
|
|
datetime(2025, 6, 19): [["CP"]],
|
|
datetime(2025, 6, 20): [["CP"]],
|
|
}
|
|
|
|
assert names == ["john doo"]
|
|
assert calendar == expected_calendar
|