Changeset d7a66ad in flowtimer for tests


Ignore:
Timestamp:
08/25/24 18:20:14 (9 months ago)
Author:
Enrico Schwass <ennoausberlin@…>
Branches:
guix
Children:
d310de3
Parents:
5f4ef8e
Message:

more refactorings

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

Location:
tests
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tests/test_phase.py

    r5f4ef8e rd7a66ad  
    3232        phase = Phase("Warm-up", 300)
    3333        phase.abort()
    34         assert phase.state == "finished"
    35         assert phase.finished() is True
     34        assert phase.state == "aborted"
     35        assert phase.aborted() is True
    3636
    3737    def test_phase_tick(self):
     
    4747        phase.tick(300)
    4848        assert phase.ticks_left == 0
    49         assert phase.finished() is True
     49        assert phase.completed() is True
    5050
    5151    def test_phase_tick_beyond_completion(self):
  • tests/test_recurring_phase_sequence.py

    r5f4ef8e rd7a66ad  
    1010    @pytest.fixture
    1111    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)
     12        return RecurringPhaseSequence.default()
    1513
    1614    def test_from_json(self):
     
    1917        assert isinstance(sequence, RecurringPhaseSequence)
    2018        assert sequence.initial_repetitions == 3
    21         assert len(sequence.phase_list) == 4
    22         assert sequence.phase_list[0].title == "Huddle"
     19        assert len(sequence.phase_list) == 3
     20        assert sequence.phase_list[0].title == "Tasking"
    2321
    2422    def test_to_json(self, recurring_phase_sequence):
     
    2826        assert data['initial_repetitions'] == 3
    2927        assert data['passes_left'] == 3
    30         assert len(data['phase_list']) == 4
     28        assert len(data['phase_list']) == 3
    3129
    3230    def test_initial_state(self, recurring_phase_sequence):
    3331        assert recurring_phase_sequence.state == "initial"
    34         assert recurring_phase_sequence.current_phase.title == "Huddle"
     32        assert recurring_phase_sequence.current_phase.title == "Tasking"
    3533        assert recurring_phase_sequence.passes_left == 3
    3634
     
    4139
    4240    def test_phases_left_in_pass(self, recurring_phase_sequence):
    43         assert recurring_phase_sequence.phases_left_in_pass() == 3
     41        assert recurring_phase_sequence.phases_left_in_pass() == 2
    4442        recurring_phase_sequence.tick(10)
    45         assert recurring_phase_sequence.phases_left_in_pass() == 2
     43        assert recurring_phase_sequence.phases_left_in_pass() == 1
    4644
    4745    def test_upcoming_phases_in_pass(self, recurring_phase_sequence):
    4846        upcoming = recurring_phase_sequence.upcoming_phases_in_pass()
    49         assert len(upcoming) == 3
    50         assert upcoming[0].title == "Tasking"
     47        assert len(upcoming) == 2
     48        assert upcoming[0].title == "Work"
    5149
    5250    def test_ticks_left(self, recurring_phase_sequence):
     
    5856        assert recurring_phase_sequence.ticks_left == (total_ticks - 10)
    5957
    60     def test_finished(self, recurring_phase_sequence):
    61         assert not recurring_phase_sequence.finished()
     58    def test_completed(self, recurring_phase_sequence):
     59        assert not recurring_phase_sequence.completed()
    6260        for _ in range(3):
    6361            for phase in recurring_phase_sequence.phase_list:
    6462                recurring_phase_sequence.tick(phase.initial_ticks)
    65         assert recurring_phase_sequence.finished()
     63        assert recurring_phase_sequence.completed()
    6664
    6765    def test_abort(self, recurring_phase_sequence):
    6866        recurring_phase_sequence.abort()
    69         assert recurring_phase_sequence.state == "finished"
    70         assert recurring_phase_sequence.current_phase.finished()
     67        assert recurring_phase_sequence.state == "aborted"
     68        assert recurring_phase_sequence.current_phase.aborted()
    7169
    7270    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)
     71        recurring_phase_sequence.tick(6)
    7872        assert recurring_phase_sequence.current_phase.title == "Work"
    7973        assert recurring_phase_sequence.passes_left == 3
     
    8478
    8579        recurring_phase_sequence.tick(15)
    86         assert recurring_phase_sequence.current_phase.title == "Huddle"
     80        assert recurring_phase_sequence.current_phase.title == "Tasking"
    8781        assert recurring_phase_sequence.passes_left == 2
    8882
    8983    def test_unrolled(self, recurring_phase_sequence):
    9084        unrolled_phases = recurring_phase_sequence.unrolled()
    91         assert len(unrolled_phases) == 12
    92         assert unrolled_phases[0].title == "Huddle"
     85        assert len(unrolled_phases) == 9
     86        assert unrolled_phases[0].title == "Tasking"
    9387        assert unrolled_phases[-1].title == "Break"
  • tests/test_schedule.py

    r5f4ef8e rd7a66ad  
    11import pytest
     2import json
    23from flowtimer.Schedule import Schedule
    34from flowtimer.Phase import Phase
     5from flowtimer.RecurringPhaseSequence import RecurringPhaseSequence
     6
    47
    58class TestSchedule:
    6    
    7     def test_schedule_initialization(self):
    8         phase1 = Phase("Warm-up", 300)
    9         phase2 = Phase("Workout", 600)
    10         schedule = Schedule([phase1, phase2])
    11    
    12         assert schedule.phase_list == [phase1, phase2]
    13         assert schedule.current_phase == phase1
     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
    1425        assert schedule.state == "initial"
    1526
    16     def test_schedule_start(self):
    17         phase1 = Phase("Warm-up", 300)
    18         schedule = Schedule([phase1])
     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
    1949        schedule.start()
    20    
    2150        assert schedule.state == "running"
    22         assert schedule.current_phase.running() is True
    23    
    24     def test_schedule_pause(self):
    25         phase1 = Phase("Warm-up", 300)
    26         schedule = Schedule([phase1])
     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
    2755        schedule.start()
     56        assert schedule.running() is True
    2857        schedule.pause()
    29    
    30         assert schedule.state == "paused"
    31         assert schedule.is_paused() is True
     58        assert schedule.running() is False
    3259
    33     def test_schedule_abort(self):
    34         phase1 = Phase("Warm-up", 300)
    35         schedule = Schedule([phase1])
    36         schedule.start()
     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
    3767        schedule.abort()
    38    
    39         assert schedule.state == "finished"
    40         assert schedule.current_phase.finished() is True
     68        assert schedule.state == "aborted"
    4169
    42     def test_schedule_finished(self):
    43         phase1 = Phase("Warm-up", 300)
    44         phase2 = Phase("Workout", 600)
    45         schedule = Schedule([phase1, phase2])
    46    
    47         assert schedule.finished() is False
    48    
    49         phase1.start()
    50         phase1.tick(300)
    51         assert phase1.finished() is True
    52         assert schedule.finished() is False
    53    
     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
    5487        schedule.skip()
    55         schedule.current_phase.tick(600)
    56         assert schedule.finished() is True
     88        assert schedule.current_block == schedule.blocks[1]  # Should skip to Phase 2 within the sequence
    5789
    58     def test_schedule_skip(self):
    59         phase1 = Phase("Warm-up", 300)
    60         phase2 = Phase("Workout", 600)
    61         schedule = Schedule([phase1, phase2])
    62    
    63         schedule.start()
    64         schedule.skip()
    65    
    66         assert schedule.current_phase == phase2
     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
    6794
    68     def test_schedule_skip_at_final_phase(self):
    69         phase1 = Phase("Warm-up", 300)
    70         schedule = Schedule([phase1])
    71    
    72         schedule.start()
    73         schedule.skip()
    74    
    75         assert schedule.state == "finished"
     95    def test_upcoming_blocks(self, setup_schedule):
     96        schedule, _, _, sequence = setup_schedule
     97        assert schedule.upcoming_blocks() == [sequence]
    7698
    77     def test_schedule_tick(self):
    78         phase1 = Phase("Warm-up", 300)
    79         phase2 = Phase("Workout", 600)
    80         schedule = Schedule([phase1, phase2])
    81    
    82         schedule.start()
    83         schedule.tick(300)
    84    
    85         assert phase1.finished() is True
    86         assert schedule.current_phase == phase2
    87         assert schedule.state == "running"
     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
    88104
    89     def test_schedule_tick_to_completion(self):
    90         phase1 = Phase("Warm-up", 300)
    91         phase2 = Phase("Workout", 600)
    92         schedule = Schedule([phase1, phase2])
    93    
    94         schedule.start()
    95         schedule.tick(300)  # Should finish phase1 and move to phase2
    96         schedule.tick(600)  # Should finish phase2 and complete the schedule
    97    
    98         assert phase2.finished() is True
    99         assert schedule.finished() is True
     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
    100110
    101     def test_schedule_current_phase_is_final(self):
    102         phase1 = Phase("Warm-up", 300)
    103         phase2 = Phase("Workout", 600)
    104         schedule = Schedule([phase1, phase2])
    105    
    106         assert schedule.current_phase_is_final() is False
    107    
    108         schedule.skip()
    109         assert schedule.current_phase_is_final() is True
    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 TracChangeset for help on using the changeset viewer.