def test_combine_and_apply_override_one_overriding(): te1 = TimeElement( start_time=datetime.time(hour=8, minute=0), end_time=datetime.time(hour=16, minute=0), end_time_on_next_day=False, resource_state=State.OPEN, override=False, full_day=False, ) te2 = TimeElement( start_time=datetime.time(hour=12, minute=0), end_time=datetime.time(hour=14, minute=0), end_time_on_next_day=False, resource_state=State.CLOSED, override=True, full_day=False, ) assert combine_and_apply_override([te1, te2]) == [ TimeElement( start_time=datetime.time(hour=12, minute=0), end_time=datetime.time(hour=14, minute=0), end_time_on_next_day=False, resource_state=State.CLOSED, override=True, full_day=False, ), ]
def test_combine_and_apply_override_two_next_day_ends(): te1 = TimeElement( start_time=datetime.time(hour=22, minute=0), end_time=datetime.time(hour=4, minute=0), end_time_on_next_day=True, resource_state=State.OPEN, override=False, full_day=False, ) te2 = TimeElement( start_time=datetime.time(hour=23, minute=0), end_time=datetime.time(hour=6, minute=0), end_time_on_next_day=True, resource_state=State.OPEN, override=False, full_day=False, ) expected = TimeElement( start_time=datetime.time(hour=22, minute=0), end_time=datetime.time(hour=6, minute=0), end_time_on_next_day=True, resource_state=State.OPEN, override=False, full_day=False, ) assert combine_and_apply_override([te1, te2]) == [expected]
def test_combine_and_apply_override_with_previous_day(): te1 = TimeElement( start_time=datetime.time(hour=0, minute=0), end_time=datetime.time(hour=6, minute=0), end_time_on_next_day=False, resource_state=State.OPEN, override=False, full_day=False, ) te2 = TimeElement( start_time=datetime.time(hour=5, minute=0), end_time=datetime.time(hour=9, minute=0), end_time_on_next_day=False, resource_state=State.OPEN, override=False, full_day=False, ) expected = TimeElement( start_time=datetime.time(hour=0, minute=0), end_time=datetime.time(hour=9, minute=0), end_time_on_next_day=False, resource_state=State.OPEN, override=False, full_day=False, ) assert combine_and_apply_override([te1, te2]) == [expected]
def test_resource_get_daily_opening_hours(resource, date_period_factory, time_span_group_factory, time_span_factory): date_period = date_period_factory( resource=resource, resource_state=State.OPEN, start_date=datetime.date(year=2020, month=1, day=1), end_date=datetime.date(year=2020, month=12, day=31), ) time_span_group = time_span_group_factory(period=date_period) time_span_factory( group=time_span_group, start_time=datetime.time(hour=8, minute=0), end_time=datetime.time(hour=16, minute=0), weekdays=Weekday.business_days(), ) time_span_factory( group=time_span_group, start_time=datetime.time(hour=10, minute=0), end_time=datetime.time(hour=14, minute=0), weekdays=Weekday.weekend(), ) weekday_time_element = TimeElement( start_time=datetime.time(hour=8, minute=0), end_time=datetime.time(hour=16, minute=0), resource_state=State.OPEN, override=False, full_day=False, ) weekend_time_element = TimeElement( start_time=datetime.time(hour=10, minute=0), end_time=datetime.time(hour=14, minute=0), resource_state=State.OPEN, override=False, full_day=False, ) assert resource.get_daily_opening_hours( datetime.date(year=2020, month=10, day=12), datetime.date(year=2020, month=10, day=18), ) == { datetime.date(year=2020, month=10, day=12): [weekday_time_element], datetime.date(year=2020, month=10, day=13): [weekday_time_element], datetime.date(year=2020, month=10, day=14): [weekday_time_element], datetime.date(year=2020, month=10, day=15): [weekday_time_element], datetime.date(year=2020, month=10, day=16): [weekday_time_element], datetime.date(year=2020, month=10, day=17): [weekend_time_element], datetime.date(year=2020, month=10, day=18): [weekend_time_element], }
def test_get_period_for_date(resource, date_period_factory, time_span_group_factory, time_span_factory): date_period = date_period_factory( resource=resource, resource_state=State.OPEN, start_date=datetime.date(year=2020, month=1, day=1), end_date=datetime.date(year=2020, month=12, day=31), ) time_span_group = time_span_group_factory(period=date_period) time_span_factory( group=time_span_group, start_time=datetime.time(hour=10, minute=0), end_time=datetime.time(hour=18, minute=0), weekdays=Weekday.business_days(), ) assert date_period.get_daily_opening_hours( datetime.date(year=2020, month=1, day=1), datetime.date(year=2020, month=1, day=1), ) == { datetime.date(year=2020, month=1, day=1): [ TimeElement( start_time=datetime.time(hour=10, minute=0), end_time=datetime.time(hour=18, minute=0), resource_state=State.OPEN, override=False, full_day=False, ) ] }
def test_get_period_for_date_with_rule( resource, date_period_factory, time_span_group_factory, time_span_factory, rule_factory, ): date_period = date_period_factory( resource=resource, resource_state=State.OPEN, start_date=datetime.date(year=2020, month=1, day=1), end_date=datetime.date(year=2020, month=12, day=31), ) time_span_group = time_span_group_factory(period=date_period) time_span_factory( group=time_span_group, start_time=datetime.time(hour=10, minute=0), end_time=datetime.time(hour=18, minute=0), weekdays=Weekday.business_days(), ) time_span_factory( group=time_span_group, start_time=datetime.time(hour=12, minute=0), end_time=datetime.time(hour=16, minute=0), weekdays=Weekday.weekend(), ) rule_factory( group=time_span_group, context=RuleContext.PERIOD, subject=RuleSubject.THURSDAY, ) # Monday or Sunday not matching because rule limits the days only to thursdays assert (date_period.get_daily_opening_hours( datetime.date(year=2020, month=10, day=5), datetime.date(year=2020, month=10, day=5), ) == {}) assert (date_period.get_daily_opening_hours( datetime.date(year=2020, month=10, day=18), datetime.date(year=2020, month=10, day=18), ) == {}) # Thursday assert date_period.get_daily_opening_hours( datetime.date(year=2020, month=10, day=15), datetime.date(year=2020, month=10, day=15), ) == { datetime.date(year=2020, month=10, day=15): [ TimeElement( start_time=datetime.time(hour=10, minute=0), end_time=datetime.time(hour=18, minute=0), resource_state=State.OPEN, override=False, full_day=False, ) ] }