import pytest
from flowtimer.Phase import Phase

class TestPhase:

    def test_phase_initialization(self):
        phase = Phase("Warm-up", 300)
        assert phase.title == "Warm-up"
        assert phase.duration == 300
        assert phase.state == "initial"
        assert phase.time_left == 300
        
    def test_phase_str_representation(self):
        phase = Phase("Warm-up", 300)
        expected_str = "-->Warm-up\nDuration=300\n"
        assert str(phase) == expected_str

    def test_phase_start(self):
        phase = Phase("Warm-up", 300)
        phase.start()
        assert phase.state == "running"
        assert phase.running() is True

    def test_phase_pause(self):
        phase = Phase("Warm-up", 300)
        phase.start()
        phase.pause()
        assert phase.state == "paused"
        assert phase.paused() is True

    def test_phase_abort(self):
        phase = Phase("Warm-up", 300)
        phase.abort()
        assert phase.state == "finished"
        assert phase.finished() is True

    def test_phase_tick(self):
        phase = Phase("Warm-up", 300)
        phase.start()
        phase.tick(60)
        assert phase.time_left == 240
        assert phase.state == "running"

    def test_phase_tick_to_completion(self):
        phase = Phase("Warm-up", 300)
        phase.start()
        phase.tick(300)
        assert phase.time_left == 0
        assert phase.finished() is True

    def test_phase_tick_beyond_completion(self):
        phase = Phase("Warm-up", 300)
        phase.start()
        phase.tick(350)
        assert phase.time_left == 0
