Spaces:
Paused
Paused
| from datetime import datetime | |
| from visa_checker.loop import scheduled_interval_seconds, run_loop | |
| def test_scheduled_interval_seconds_uses_time_bands(): | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 7, 59)) == 3600 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 8, 0)) == 60 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 10, 59)) == 60 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 11, 0)) == 120 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 12, 59)) == 120 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 13, 0)) == 300 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 17, 59)) == 300 | |
| assert scheduled_interval_seconds(datetime(2026, 6, 28, 18, 0)) == 3600 | |
| def test_run_loop_sleeps_between_checks(): | |
| calls = [] | |
| sleeps = [] | |
| run_loop( | |
| check_once=lambda: calls.append("check"), | |
| interval_seconds=300, | |
| sleep=sleeps.append, | |
| max_runs=2, | |
| ) | |
| assert calls == ["check", "check"] | |
| assert sleeps == [300] | |
| def test_run_loop_uses_scheduled_interval_after_success(): | |
| calls = [] | |
| sleeps = [] | |
| run_loop( | |
| check_once=lambda: calls.append("check"), | |
| interval_seconds=300, | |
| interval_provider=lambda: 60, | |
| sleep=sleeps.append, | |
| max_runs=2, | |
| ) | |
| assert calls == ["check", "check"] | |
| assert sleeps == [60] | |
| def test_run_loop_can_run_once_without_sleeping(): | |
| calls = [] | |
| sleeps = [] | |
| run_loop( | |
| check_once=lambda: calls.append("check"), | |
| interval_seconds=300, | |
| sleep=sleeps.append, | |
| run_once=True, | |
| ) | |
| assert calls == ["check"] | |
| assert sleeps == [] | |
| def test_run_loop_continues_after_check_error(): | |
| calls = [] | |
| sleeps = [] | |
| def check_once(): | |
| calls.append("check") | |
| if len(calls) == 1: | |
| raise RuntimeError("temporary failure") | |
| run_loop( | |
| check_once=check_once, | |
| interval_seconds=300, | |
| error_interval_seconds=30, | |
| sleep=sleeps.append, | |
| max_runs=2, | |
| ) | |
| assert calls == ["check", "check"] | |
| assert sleeps == [30] | |
| def test_run_loop_uses_exception_retry_after_seconds(): | |
| calls = [] | |
| sleeps = [] | |
| class SlowRetryError(RuntimeError): | |
| retry_after_seconds = 3600 | |
| def check_once(): | |
| calls.append("check") | |
| if len(calls) == 1: | |
| raise SlowRetryError("blocked") | |
| run_loop( | |
| check_once=check_once, | |
| interval_seconds=300, | |
| error_interval_seconds=30, | |
| sleep=sleeps.append, | |
| max_runs=2, | |
| ) | |
| assert calls == ["check", "check"] | |
| assert sleeps == [3600] | |