Pass all arguments through to the present_interval method, rather than pulling them from the state. This method can be made entirely indep at this point (static).

This commit is contained in:
Phil Elson 2020-12-17 21:37:35 +01:00
parent 6eadd9cf17
commit 69b882410a
2 changed files with 22 additions and 17 deletions

View file

@ -348,14 +348,6 @@ class FormData:
a number of monotonic, non-overlapping, but potentially unsorted, breaks (also in minutes).
"""
if not breaks:
breaks = []
if self.lunch_option:
breaks.append((self.lunch_start, self.lunch_finish))
for coffee_start, coffee_end in self.coffee_break_times():
breaks.append((coffee_start, coffee_end))
if not breaks:
# If there are no breaks, the interval is the start and end.
return models.SpecificInterval(((start, finish),))
@ -389,7 +381,7 @@ class FormData:
# we must cover. Let S=start; E=end; Bs=Break start; Be=Break end:
# 1. The interval is entirely before the break. S < E <= Bs < Be
# 2. The interval straddles the start of the break. S < Bs < E <= Be
# 3. The break is entirely inside the interval. S < Bs < Be < E
# 3. The break is entirely inside the interval. S < Bs < Be <= E
# 4. The interval is entirely inside the break. Bs <= S < E <= Be
# 5. The interval straddles the end of the break. Bs <= S < Be <= E
# 6. The interval is entirely after the break. Bs < Be <= S < E

View file

@ -199,27 +199,37 @@ def coffee_break_between_1045_and_1115(baseline_form):
def test_present_before_coffee(coffee_break_between_1045_and_1115):
interval = coffee_break_between_1045_and_1115.present_interval(10.5 * 60, 11 * 60)
breaks = coffee_break_between_1045_and_1115.coffee_break_times()
interval = coffee_break_between_1045_and_1115.present_interval(
10.5 * 60, 11 * 60, breaks=breaks)
assert interval.boundaries() == ((10.5, 10.75),)
def test_present_after_coffee(coffee_break_between_1045_and_1115):
interval = coffee_break_between_1045_and_1115.present_interval(11 * 60, 11.5 * 60)
breaks = coffee_break_between_1045_and_1115.coffee_break_times()
interval = coffee_break_between_1045_and_1115.present_interval(
11 * 60, 11.5 * 60, breaks=breaks)
assert interval.boundaries() == ((11.25, 11.5),)
def test_present_when_coffee_starts(coffee_break_between_1045_and_1115):
interval = coffee_break_between_1045_and_1115.present_interval(10.75 * 60, 11.5 * 60)
breaks = coffee_break_between_1045_and_1115.coffee_break_times()
interval = coffee_break_between_1045_and_1115.present_interval(
10.75 * 60, 11.5 * 60, breaks=breaks)
assert interval.boundaries() == ((11.25, 11.5),)
def test_present_when_coffee_ends(coffee_break_between_1045_and_1115):
interval = coffee_break_between_1045_and_1115.present_interval(10.5 * 60, 11.25 * 60)
breaks = coffee_break_between_1045_and_1115.coffee_break_times()
interval = coffee_break_between_1045_and_1115.present_interval(
10.5 * 60, 11.25 * 60, breaks=breaks)
assert interval.boundaries() == ((10.5, 10.75), )
def test_present_only_for_coffee_ends(coffee_break_between_1045_and_1115):
interval = coffee_break_between_1045_and_1115.present_interval(10.75 * 60, 11.25 * 60)
breaks = coffee_break_between_1045_and_1115.coffee_break_times()
interval = coffee_break_between_1045_and_1115.present_interval(
10.75 * 60, 11.25 * 60, breaks=breaks)
assert interval.boundaries() == ()
@ -249,8 +259,9 @@ def breaks_every_25_mins_for_20_mins(baseline_form):
baseline_form.lunch_finish = time2mins("12:15")
baseline_form.lunch_option = True
breaks = baseline_form.coffee_break_times() + baseline_form.lunch_break_times()
interval = baseline_form.present_interval(
baseline_form.activity_start, baseline_form.activity_finish
baseline_form.activity_start, baseline_form.activity_finish, breaks=breaks,
)
assert_boundaries(interval, [
@ -265,18 +276,20 @@ def breaks_every_25_mins_for_20_mins(baseline_form):
def test_present_after_two_breaks_for_small_interval(breaks_every_25_mins_for_20_mins):
breaks = breaks_every_25_mins_for_20_mins.coffee_break_times() + breaks_every_25_mins_for_20_mins.lunch_break_times()
# The first two breaks start at 10:25 and 11:10.
interval = breaks_every_25_mins_for_20_mins.present_interval(
time2mins("11:35"), time2mins("11:40")
time2mins("11:35"), time2mins("11:40"), breaks=breaks,
)
# Only present for a short duration of a presence period.
assert_boundaries(interval, [('11:35', '11:40')])
def test_present_only_during_second_break(breaks_every_25_mins_for_20_mins):
breaks = breaks_every_25_mins_for_20_mins.coffee_break_times() + breaks_every_25_mins_for_20_mins.lunch_break_times()
# The first two breaks start at 10:25 and 11:10.
interval = breaks_every_25_mins_for_20_mins.present_interval(
time2mins("11:15"), time2mins("11:20")
time2mins("11:15"), time2mins("11:20"), breaks=breaks
)
# No presence.
assert_boundaries(interval, [])