supervisor/tests/plugins/test_plugin_manager.py
Stefan Agner f6faa18409
Bump pre-commit ruff to 0.5.7 and reformat (#5242)
It seems that the codebase is not formatted with the latest ruff
version. This PR reformats the codebase with ruff 0.5.7.
2024-08-13 20:53:56 +02:00

65 lines
2.0 KiB
Python

"""Test plugin manager."""
from unittest.mock import PropertyMock, patch
from awesomeversion import AwesomeVersion
from supervisor.coresys import CoreSys
from supervisor.docker.interface import DockerInterface
from supervisor.plugins.base import PluginBase
from supervisor.supervisor import Supervisor
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)
async def test_load(coresys: CoreSys):
"""Test plugin manager load."""
coresys.hardware.disk.get_disk_free_space = lambda x: 5000
await coresys.updater.load()
need_update = PropertyMock(return_value=True)
with (
patch.object(DockerInterface, "attach") as attach,
patch.object(DockerInterface, "update") as update,
patch.object(Supervisor, "need_update", new=need_update),
patch.object(PluginBase, "need_update", new=PropertyMock(return_value=True)),
patch.object(
PluginBase,
"version",
new=PropertyMock(return_value=AwesomeVersion("1970-01-01")),
),
):
await coresys.plugins.load()
assert attach.call_count == 5
update.assert_not_called()
need_update.return_value = False
await coresys.plugins.load()
assert attach.call_count == 10
assert update.call_count == 5