"""Test plugin manager."""

from unittest.mock import patch

from supervisor.coresys import CoreSys
from supervisor.docker.interface import DockerInterface


def mock_awaitable_bool(value: bool):
    """Return a mock of an awaitable bool."""

    async def _mock_bool(*args, **kwargs) -> bool:
        return value

    return _mock_bool


async def test_repair(coresys: CoreSys):
    """Test repair."""
    with patch.object(DockerInterface, "install") as install:
        # If instance exists, repair does nothing
        with patch.object(DockerInterface, "exists", new=mock_awaitable_bool(True)):
            await coresys.plugins.repair()

        install.assert_not_called()

        # If not, repair installs the image
        with patch.object(DockerInterface, "exists", new=mock_awaitable_bool(False)):
            await coresys.plugins.repair()

        assert install.call_count == len(coresys.plugins.all_plugins)