mirror of
https://github.com/home-assistant/supervisor.git
synced 2026-05-18 21:58:52 +01:00
ba8c49935b
* Rename addon→app in docstrings and comments Updates all docstrings and inline comments across supervisor/ and tests/ to use the new app/apps terminology. No runtime behaviour is changed by this commit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Rename addon→app in code (variables, args, class names, functions) Renames all internal Python identifiers from addon/addons to app/apps: - Variable and argument names - Function and method names - Class names (Addon→App, AddonManager→AppManager, DockerAddon→DockerApp, all exception, check, and fixup classes, etc.) - String literals used as Python identifiers (pytest fixtures, parametrize param names, patch.object attribute strings, URL route match_info keys) External API contracts are preserved: JSON keys, error codes, discovery protocol fields, TypedDict/attr.s field names. Import module paths (supervisor/addons/) are also unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix partial backup/restore API to remap addons key to apps The external API accepts `addons` as the request body key (since ATTR_APPS = "addons"), but do_backup_partial and do_restore_partial now take an `apps` parameter after the rename. The **body expansion in both endpoints would pass `addons=...` causing a TypeError. Remap the key before expansion in both backup_partial and restore_partial: if ATTR_APPS in body: body["apps"] = body.pop(ATTR_APPS) Also adds test_restore_partial_with_addons_key to verify the restore path correctly receives apps= when addons is passed in the request body. This path had no existing test coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix merge error * Adjust AppLoggerAdapter to use app_name Co-authored-by: Stefan Agner <stefan@agner.ch> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Stefan Agner <stefan@agner.ch>
88 lines
2.4 KiB
Python
88 lines
2.4 KiB
Python
"""Test auth object."""
|
|
|
|
import asyncio
|
|
from unittest.mock import AsyncMock, MagicMock
|
|
|
|
import pytest
|
|
|
|
# pylint: disable=protected-access
|
|
|
|
|
|
@pytest.fixture(name="mock_auth_backend", autouse=True)
|
|
def mock_auth_backend_fixture(coresys):
|
|
"""Fix auth backend request."""
|
|
mock_auth_backend = AsyncMock()
|
|
coresys.auth._backend_login = mock_auth_backend
|
|
|
|
yield mock_auth_backend
|
|
|
|
|
|
@pytest.fixture(name="mock_api_state", autouse=True)
|
|
def mock_api_state_fixture(coresys):
|
|
"""Fix auth backend request."""
|
|
mock_api_state = AsyncMock()
|
|
coresys.homeassistant.api.check_api_state = mock_api_state
|
|
|
|
yield mock_api_state
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_auth_request_with_backend(coresys, mock_auth_backend, mock_api_state):
|
|
"""Make simple auth request."""
|
|
|
|
app = MagicMock()
|
|
mock_auth_backend.return_value = True
|
|
mock_api_state.return_value = True
|
|
|
|
assert await coresys.auth.check_login(app, "username", "password")
|
|
assert mock_auth_backend.called
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_auth_request_without_backend(coresys, mock_auth_backend, mock_api_state):
|
|
"""Make simple auth without request."""
|
|
|
|
app = MagicMock()
|
|
mock_auth_backend.return_value = True
|
|
mock_api_state.return_value = False
|
|
|
|
assert not await coresys.auth.check_login(app, "username", "password")
|
|
assert not mock_auth_backend.called
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_auth_request_without_backend_cache(
|
|
coresys, mock_auth_backend, mock_api_state
|
|
):
|
|
"""Make simple auth without request."""
|
|
|
|
app = MagicMock()
|
|
mock_auth_backend.return_value = True
|
|
mock_api_state.return_value = False
|
|
|
|
await coresys.auth._update_cache("username", "password")
|
|
|
|
assert await coresys.auth.check_login(app, "username", "password")
|
|
assert not mock_auth_backend.called
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_auth_request_with_backend_cache_update(
|
|
coresys, mock_auth_backend, mock_api_state
|
|
):
|
|
"""Make simple auth without request and cache update."""
|
|
|
|
app = MagicMock()
|
|
mock_auth_backend.return_value = False
|
|
mock_api_state.return_value = True
|
|
|
|
await coresys.auth._update_cache("username", "password")
|
|
|
|
assert await coresys.auth.check_login(app, "username", "password")
|
|
|
|
await asyncio.sleep(0)
|
|
|
|
assert mock_auth_backend.called
|
|
await coresys.auth._dismatch_cache("username", "password")
|
|
assert not await coresys.auth.check_login(app, "username", "password")
|