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:
parent
6eadd9cf17
commit
69b882410a
2 changed files with 22 additions and 17 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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, [])
|
||||
|
|
|
|||
Loading…
Reference in a new issue