Esempio n. 1
0
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,
        ),
    ]
Esempio n. 2
0
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]
Esempio n. 3
0
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]
Esempio n. 4
0
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],
    }
Esempio n. 5
0
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,
            )
        ]
    }
Esempio n. 6
0
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,
            )
        ]
    }