Skip to content

Commit 2c222d0

Browse files
committed
test: core: add broken idle test
when idling for longer than the long break duration, right when the next long break is coming up, the skipping doesn't work properly - it skips all short breaks
1 parent 40fbdb8 commit 2c222d0

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

safeeyes/tests/test_core.py

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,3 +864,151 @@ def test_idle_skip_long(
864864
safe_eyes_core.stop()
865865

866866
assert context["state"] == model.State.STOPPED
867+
868+
def test_idle_skip_long_before_long(
869+
self,
870+
sequential_threading: SequentialThreadingFixture,
871+
time_machine: TimeMachineFixture,
872+
):
873+
"""Test idling for longer than long break time, right before the next long
874+
break.
875+
876+
FIXME: this test is broken, it should not work this way. Instead of just
877+
skipping the long break, it skips all the short breaks too.
878+
"""
879+
context: dict[str, typing.Any] = {
880+
"session": {},
881+
}
882+
short_break_duration = 15 # seconds
883+
short_break_interval = 15 # minutes
884+
pre_break_warning_time = 10 # seconds
885+
long_break_duration = 60 # seconds
886+
long_break_interval = 75 # minutes
887+
config = model.Config(
888+
user_config={
889+
"short_breaks": [
890+
{"name": "break 1"},
891+
{"name": "break 2"},
892+
{"name": "break 3"},
893+
{"name": "break 4"},
894+
],
895+
"long_breaks": [
896+
{"name": "long break 1"},
897+
{"name": "long break 2"},
898+
{"name": "long break 3"},
899+
],
900+
"short_break_interval": short_break_interval,
901+
"long_break_interval": long_break_interval,
902+
"long_break_duration": long_break_duration,
903+
"short_break_duration": short_break_duration,
904+
"pre_break_warning_time": pre_break_warning_time,
905+
"random_order": False,
906+
"postpone_duration": 5,
907+
},
908+
system_config={},
909+
)
910+
911+
self.assert_datetime("2024-08-25T13:00:00")
912+
913+
safe_eyes_core = core.SafeEyesCore(context)
914+
915+
sequential_threading_handle = sequential_threading(safe_eyes_core)
916+
917+
safe_eyes_core.initialize(config)
918+
919+
self.run_next_break(
920+
sequential_threading_handle,
921+
time_machine,
922+
safe_eyes_core,
923+
context,
924+
short_break_duration,
925+
"translated!: break 1",
926+
initial=True,
927+
)
928+
929+
# Time passed: 15min 25s
930+
# 15min short_break_interval, 10 seconds pre_break_warning_time,
931+
# 15 seconds short_break_duration
932+
self.assert_datetime("2024-08-25T13:15:25")
933+
934+
self.run_next_break(
935+
sequential_threading_handle,
936+
time_machine,
937+
safe_eyes_core,
938+
context,
939+
short_break_duration,
940+
"translated!: break 2",
941+
)
942+
943+
self.assert_datetime("2024-08-25T13:30:50")
944+
945+
self.run_next_break(
946+
sequential_threading_handle,
947+
time_machine,
948+
safe_eyes_core,
949+
context,
950+
short_break_duration,
951+
"translated!: break 3",
952+
)
953+
954+
self.assert_datetime("2024-08-25T13:46:15")
955+
956+
self.run_next_break(
957+
sequential_threading_handle,
958+
time_machine,
959+
safe_eyes_core,
960+
context,
961+
short_break_duration,
962+
"translated!: break 4",
963+
)
964+
965+
self.assert_datetime("2024-08-25T14:01:40")
966+
967+
# idle, simulate behaviour of smartpause plugin
968+
idle_seconds = 65
969+
idle_period = datetime.timedelta(seconds=idle_seconds)
970+
971+
safe_eyes_core.stop(is_resting=True)
972+
973+
assert context["state"] == model.State.RESTING
974+
975+
time_machine.shift(delta=idle_period)
976+
977+
assert safe_eyes_core.scheduled_next_break_time is not None
978+
next_break = safe_eyes_core.scheduled_next_break_time + idle_period
979+
980+
safe_eyes_core.start(next_break_time=next_break.timestamp())
981+
982+
self.assert_datetime("2024-08-25T14:02:45")
983+
984+
self.run_next_break_from_waiting_state(
985+
sequential_threading_handle,
986+
safe_eyes_core,
987+
context,
988+
long_break_duration,
989+
"translated!: long break 1",
990+
)
991+
992+
# Time passed: 16min 10s
993+
# 15min short_break_interval (from previous, as long_break_interval must be
994+
# multiple)
995+
# 10 seconds pre_break_warning_time, 1 minute long_break_duration
996+
self.assert_datetime("2024-08-25T15:18:55")
997+
998+
self.run_next_break(
999+
sequential_threading_handle,
1000+
time_machine,
1001+
safe_eyes_core,
1002+
context,
1003+
short_break_duration,
1004+
"translated!: break 1",
1005+
)
1006+
1007+
# Time passed: 15min 25s
1008+
# 15min short_break_interval, 10 seconds pre_break_warning_time,
1009+
# 15 seconds short_break_duration
1010+
self.assert_datetime("2024-08-25T15:34:20")
1011+
1012+
safe_eyes_core.stop()
1013+
1014+
assert context["state"] == model.State.STOPPED

0 commit comments

Comments
 (0)