from pydase.components.coloured_enum import ColouredEnum
from pydase.data_service.data_service import DataService
from pydase.data_service.data_service_observer import DataServiceObserver
from pydase.data_service.state_manager import StateManager
from pytest import LogCaptureFixture


def test_ColouredEnum(caplog: LogCaptureFixture) -> None:
    class MyStatus(ColouredEnum):
        RUNNING = "#00FF00"
        FAILING = "#FF0000"

    class ServiceClass(DataService):
        _status = MyStatus.RUNNING

        @property
        def status(self) -> MyStatus:
            return self._status

        @status.setter
        def status(self, value: MyStatus) -> None:
            # do something ...
            self._status = value

    service_instance = ServiceClass()
    state_manager = StateManager(service_instance)
    DataServiceObserver(state_manager)

    service_instance.status = MyStatus.FAILING

    assert "'status' changed to 'MyStatus.FAILING'" in caplog.text


def test_warning(caplog: LogCaptureFixture) -> None:
    class MyStatus(ColouredEnum):
        RUNNING = "#00FF00"
        FAILING = "#FF0000"

    class ServiceClass(DataService):
        status = MyStatus.RUNNING

    ServiceClass()

    assert (
        "Class 'MyStatus' does not inherit from DataService. This may lead to "
        "unexpected behaviour!" not in caplog.text
    )