source: flowtimer/tests/test_recurring_phase_sequence.py@ 794b5c2

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

phase_list renamed to phases

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

  • Property mode set to 100644
File size: 3.6 KB
Line 
1import pytest
2import json
3
4from flowtimer.Phase import Phase
5from flowtimer.RecurringPhaseSequence import RecurringPhaseSequence
6
7
8class TestRecurringPhaseSequence():
9
10 @pytest.fixture
11 def recurring_phase_sequence(self):
12 return RecurringPhaseSequence.default()
13
14 def test_from_json(self):
15 json_string = RecurringPhaseSequence.default_json_string()
16 sequence = RecurringPhaseSequence.from_json(json_string)
17 assert isinstance(sequence, RecurringPhaseSequence)
18 assert sequence.initial_repetitions == 3
19 assert len(sequence.phases) == 3
20 assert sequence.phases[0].title == "Tasking"
21
22 def test_to_json(self, recurring_phase_sequence):
23 json_string = recurring_phase_sequence.to_json()
24 data = json.loads(json_string)
25 assert data['state'] == "initial"
26 assert data['initial_repetitions'] == 3
27 assert data['passes_left'] == 3
28 assert len(data['phases']) == 3
29
30 def test_initial_state(self, recurring_phase_sequence):
31 assert recurring_phase_sequence.state == "initial"
32 assert recurring_phase_sequence.current_phase.title == "Tasking"
33 assert recurring_phase_sequence.passes_left == 3
34
35 def test_current_phase_number(self, recurring_phase_sequence):
36 assert recurring_phase_sequence.current_phase_number() == 0
37 recurring_phase_sequence.tick(10)
38 assert recurring_phase_sequence.current_phase_number() == 1
39
40 def test_phases_left_in_pass(self, recurring_phase_sequence):
41 assert recurring_phase_sequence.phases_left_in_pass() == 2
42 recurring_phase_sequence.tick(10)
43 assert recurring_phase_sequence.phases_left_in_pass() == 1
44
45 def test_upcoming_phases_in_pass(self, recurring_phase_sequence):
46 upcoming = recurring_phase_sequence.upcoming_phases_in_pass()
47 assert len(upcoming) == 2
48 assert upcoming[0].title == "Work"
49
50 def test_ticks_left(self, recurring_phase_sequence):
51 total_ticks = (sum([phase.initial_ticks for phase in recurring_phase_sequence.phases]) *
52 recurring_phase_sequence.initial_repetitions)
53
54 assert recurring_phase_sequence.ticks_left == total_ticks
55 recurring_phase_sequence.tick(10)
56 assert recurring_phase_sequence.ticks_left == (total_ticks - 10)
57
58 def test_completed(self, recurring_phase_sequence):
59 assert not recurring_phase_sequence.completed()
60 for _ in range(3):
61 for phase in recurring_phase_sequence.phases:
62 recurring_phase_sequence.tick(phase.initial_ticks)
63 assert recurring_phase_sequence.completed()
64
65 def test_abort(self, recurring_phase_sequence):
66 recurring_phase_sequence.abort()
67 assert recurring_phase_sequence.state == "aborted"
68 assert recurring_phase_sequence.current_phase.aborted()
69
70 def test_tick_progression(self, recurring_phase_sequence):
71 recurring_phase_sequence.tick(6)
72 assert recurring_phase_sequence.current_phase.title == "Work"
73 assert recurring_phase_sequence.passes_left == 3
74
75 recurring_phase_sequence.tick(45)
76 assert recurring_phase_sequence.current_phase.title == "Break"
77 assert recurring_phase_sequence.passes_left == 3
78
79 recurring_phase_sequence.tick(15)
80 assert recurring_phase_sequence.current_phase.title == "Tasking"
81 assert recurring_phase_sequence.passes_left == 2
82
83 def test_unrolled(self, recurring_phase_sequence):
84 unrolled_phases = recurring_phase_sequence.unrolled()
85 assert len(unrolled_phases) == 9
86 assert unrolled_phases[0].title == "Tasking"
87 assert unrolled_phases[-1].title == "Break"
Note: See TracBrowser for help on using the repository browser.