@st.composite
def future_complete_cancellation(
draw,
) -> tuple[dt.datetime, dt.datetime, dt.datetime, dt.datetime, dt.datetime]:
current_time = draw(st_time())
issue_time = draw(st_time(min=current_time + dt.timedelta(minutes=1)))
valid_from = draw(st_time(min=issue_time))
valid_to = draw(st_time(min=valid_from + dt.timedelta(minutes=1)))
cancel_start = draw(st_time(min=issue_time, max=valid_from))
cancel_issue_time = draw(st_time(min=issue_time, max=cancel_start))
cancel_end = draw(st_time(min=valid_to))
return (
current_time,
issue_time,
valid_from,
valid_to,
cancel_issue_time,
cancel_start,
cancel_end,
)
@given(future_complete_cancellation())
@settings(max_examples=5000)
def test_future_cancellation(scenario):
(
current_time,
issue_time,
valid_from,
valid_to,
cancel_issue_time,
cancel_start,
cancel_end,
) = scenario
t01 = get_sigmet(
seq_no="T01", issue_time=issue_time, valid_from=valid_from, valid_to=valid_to
)
t02 = get_cancel_sigmet(
seq_no="T02",
cancel_seq_no=t01.sequence_number,
issue_time=cancel_issue_time,
cancel_from=cancel_start,
cancel_to=cancel_end,
)
output = filter_current_sigmets([t01, t02], current_time)
assert len(output) == 0