import pytest from flowtimer.Schedule import Schedule from flowtimer.Phase import Phase class TestSchedule: def test_schedule_initialization(self): phase1 = Phase("Warm-up", 300) phase2 = Phase("Workout", 600) schedule = Schedule([phase1, phase2]) assert schedule.phase_list == [phase1, phase2] assert schedule.current_phase == phase1 assert schedule.state == "initial" assert schedule.currentValue == 0 def test_schedule_start(self): phase1 = Phase("Warm-up", 300) schedule = Schedule([phase1]) schedule.start() assert schedule.state == "running" assert schedule.current_phase.running() is True def test_schedule_pause(self): phase1 = Phase("Warm-up", 300) schedule = Schedule([phase1]) schedule.start() schedule.pause() assert schedule.state == "paused" assert schedule.is_paused() is True def test_schedule_abort(self): phase1 = Phase("Warm-up", 300) schedule = Schedule([phase1]) schedule.start() schedule.abort() assert schedule.state == "finished" assert schedule.current_phase.finished() is True def test_schedule_finished(self): phase1 = Phase("Warm-up", 300) phase2 = Phase("Workout", 600) schedule = Schedule([phase1, phase2]) assert schedule.finished() is False phase1.start() phase1.tick(300) assert phase1.finished() is True assert schedule.finished() is False schedule.skip() schedule.current_phase.tick(600) assert schedule.finished() is True def test_schedule_skip(self): phase1 = Phase("Warm-up", 300) phase2 = Phase("Workout", 600) schedule = Schedule([phase1, phase2]) schedule.start() schedule.skip() assert schedule.current_phase == phase2 def test_schedule_skip_at_final_phase(self): phase1 = Phase("Warm-up", 300) schedule = Schedule([phase1]) schedule.start() schedule.skip() assert schedule.state == "finished" def test_schedule_tick(self): phase1 = Phase("Warm-up", 300) phase2 = Phase("Workout", 600) schedule = Schedule([phase1, phase2]) schedule.start() schedule.tick(300) assert phase1.finished() is True assert schedule.current_phase == phase2 assert schedule.state == "running" def test_schedule_tick_to_completion(self): phase1 = Phase("Warm-up", 300) phase2 = Phase("Workout", 600) schedule = Schedule([phase1, phase2]) schedule.start() schedule.tick(300) # Should finish phase1 and move to phase2 schedule.tick(600) # Should finish phase2 and complete the schedule assert phase2.finished() is True assert schedule.finished() is True def test_schedule_current_phase_is_final(self): phase1 = Phase("Warm-up", 300) phase2 = Phase("Workout", 600) schedule = Schedule([phase1, phase2]) assert schedule.current_phase_is_final() is False schedule.skip() assert schedule.current_phase_is_final() is True