source: flowtimer/tests/test_recurring_phase_sequence.py@ daa2276

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

better variable names and tests added

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