Files
MyManagingTools/tests/test_calendar_helper.py
2025-06-27 07:26:58 +02:00

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