source: flowtimer/tests/test_schedule.py@ d7a66ad

guix
Last change on this file since d7a66ad was d7a66ad, checked in by Enrico Schwass <ennoausberlin@…>, 9 months ago

more refactorings

Signed-off-by: Enrico Schwass <ennoausberlin@…>

  • Property mode set to 100644
File size: 4.4 KB
Line 
1import pytest
2import json
3from flowtimer.Schedule import Schedule
4from flowtimer.Phase import Phase
5from flowtimer.RecurringPhaseSequence import RecurringPhaseSequence
6
7
8class TestSchedule:
9
10 @pytest.fixture
11 def setup_schedule(self):
12 # Set up some real Phase and RecurringPhaseSequence objects for testing
13 phase1 = Phase("Phase 1", 300)
14 phase2 = Phase("Phase 2", 600)
15 sequence = RecurringPhaseSequence("Sequence 1", [phase1, phase2], 2)
16 blocks = [phase1, sequence]
17 schedule = Schedule("Test Schedule", blocks)
18 return schedule, phase1, phase2, sequence
19
20 def test_initialization(self, setup_schedule):
21 schedule, phase1, _, _ = setup_schedule
22 assert schedule.title == "Test Schedule"
23 assert schedule.blocks == [phase1, schedule.blocks[1]]
24 assert schedule.current_block == phase1
25 assert schedule.state == "initial"
26
27 def test_default_json_string(self):
28 default_json = Schedule.default_json_string()
29 assert isinstance(default_json, str)
30
31 def test_from_json(self):
32 json_string = Schedule.default_json_string()
33 schedule = Schedule.from_json(json_string)
34 assert schedule.title == "Default"
35 assert len(schedule.blocks) == 2
36 assert isinstance(schedule.blocks[0], Phase)
37 assert isinstance(schedule.blocks[1], RecurringPhaseSequence)
38
39 def test_to_json(self, setup_schedule):
40 schedule, _, _, _ = setup_schedule
41 json_string = schedule.to_json()
42 assert isinstance(json_string, str)
43 data = json.loads(json_string)
44 assert data['title'] == "Test Schedule"
45 assert len(data['blocks']) == 2
46
47 def test_start(self, setup_schedule):
48 schedule, phase1, _, _ = setup_schedule
49 schedule.start()
50 assert schedule.state == "running"
51 # assert phase1.ticks_left < phase1.initial_ticks # Assuming the phase reduces ticks when started
52
53 def test_running(self, setup_schedule):
54 schedule, _, _, _ = setup_schedule
55 schedule.start()
56 assert schedule.running() is True
57 schedule.pause()
58 assert schedule.running() is False
59
60 def test_paused(self, setup_schedule):
61 schedule, _, _, _ = setup_schedule
62 schedule.pause()
63 assert schedule.paused() is True
64
65 def test_abort(self, setup_schedule):
66 schedule, _, _, _ = setup_schedule
67 schedule.abort()
68 assert schedule.state == "aborted"
69
70 def test_completed(self, setup_schedule):
71 schedule, phase1, _, sequence = setup_schedule
72 schedule.tick(phase1.initial_ticks) # Complete phase1
73 schedule.tick(sequence.initial_ticks) # Complete sequence
74 schedule.tick(phase1.initial_ticks) # Complete phase1
75 schedule.tick(sequence.initial_ticks) # Complete sequence
76 print(schedule.current_block)
77 assert schedule.completed() is True
78 assert schedule.state == "completed"
79
80 def test_advance_to_next_block(self, setup_schedule):
81 schedule, _, _, sequence = setup_schedule
82 schedule.advance_to_next_block()
83 assert schedule.current_block == schedule.blocks[1]
84
85 def test_skip(self, setup_schedule):
86 schedule, _, _, sequence = setup_schedule
87 schedule.skip()
88 assert schedule.current_block == schedule.blocks[1] # Should skip to Phase 2 within the sequence
89
90 def test_total_ticks_left(self, setup_schedule):
91 schedule, phase1, phase2, sequence = setup_schedule
92 expected_total_ticks = phase1.ticks_left + sequence.ticks_left
93 assert schedule.total_ticks_left() == expected_total_ticks
94
95 def test_upcoming_blocks(self, setup_schedule):
96 schedule, _, _, sequence = setup_schedule
97 assert schedule.upcoming_blocks() == [sequence]
98
99 def test_current_block_is_final(self, setup_schedule):
100 schedule, _, _, sequence = setup_schedule
101 assert schedule.current_block_is_final() is False
102 schedule.advance_to_next_block()
103 assert schedule.current_block_is_final() is True
104
105 def test_tick(self, setup_schedule):
106 schedule, phase1, _, _ = setup_schedule
107 initial_ticks = phase1.ticks_left
108 schedule.tick(100)
109 assert phase1.ticks_left == initial_ticks - 100
110
111 schedule.tick(phase1.ticks_left) # Finish phase1
112 assert schedule.current_block == schedule.blocks[1] # Should advance to the next block
Note: See TracBrowser for help on using the repository browser.