1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 02:48:57 +00:00

Add missing tests for Nintendo parental controls code coverage (#159210)

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
Jordan Harvey
2025-12-16 16:12:36 +00:00
committed by GitHub
parent 3f57b46756
commit fe94dea1db
4 changed files with 68 additions and 7 deletions

View File

@@ -7,7 +7,7 @@ import voluptuous as vol
from homeassistant.const import ATTR_DEVICE_ID
from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import config_validation as cv, device_registry as dr
from .const import ATTR_BONUS_TIME, DOMAIN
@@ -56,7 +56,7 @@ async def async_add_bonus_time(call: ServiceCall) -> None:
bonus_time: int = data[ATTR_BONUS_TIME]
device = dr.async_get(call.hass).async_get(device_id)
if device is None:
raise HomeAssistantError(
raise ServiceValidationError(
translation_domain=DOMAIN,
translation_key="device_not_found",
)
@@ -66,6 +66,10 @@ async def async_add_bonus_time(call: ServiceCall) -> None:
break
nintendo_device_id = _get_nintendo_device_id(device)
if config_entry and nintendo_device_id:
await config_entry.runtime_data.api.devices[nintendo_device_id].add_extra_time(
bonus_time
)
return await config_entry.runtime_data.api.devices[
nintendo_device_id
].add_extra_time(bonus_time)
raise ServiceValidationError(
translation_domain=DOMAIN,
translation_key="invalid_device",
)

View File

@@ -69,6 +69,9 @@
"device_not_found": {
"message": "Device not found."
},
"invalid_device": {
"message": "The specified device is not a Nintendo device."
},
"no_devices_found": {
"message": "No Nintendo devices found for this account."
}

View File

@@ -2,6 +2,8 @@
from unittest.mock import AsyncMock
from pynintendoauth.exceptions import InvalidOAuthConfigurationException
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
@@ -28,3 +30,28 @@ async def test_invalid_authentication(
assert len(entries) == 0
# Ensure the config entry is marked as error
assert mock_config_entry.state is ConfigEntryState.SETUP_ERROR
async def test_reauth_flow(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_nintendo_authenticator: AsyncMock,
entity_registry: er.EntityRegistry,
) -> None:
"""Test the reauth flow is triggered."""
mock_nintendo_authenticator.async_complete_login.side_effect = (
InvalidOAuthConfigurationException(
status_code=401, message="Authentication failed"
)
)
await setup_integration(hass, mock_config_entry)
# Ensure no entities are created
entries = er.async_entries_for_config_entry(
entity_registry, mock_config_entry.entry_id
)
assert len(entries) == 0
# Ensure the config entry is marked as needing reauth
assert mock_config_entry.state is ConfigEntryState.SETUP_ERROR
assert mock_config_entry.error_reason_translation_key == "auth_expired"

View File

@@ -13,7 +13,7 @@ from homeassistant.components.nintendo_parental_controls.services import (
)
from homeassistant.const import ATTR_DEVICE_ID
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import device_registry as dr
from . import setup_integration
@@ -51,7 +51,7 @@ async def test_add_bonus_time_invalid_device(
) -> None:
"""Test add bonus time service."""
await setup_integration(hass, mock_config_entry)
with pytest.raises(HomeAssistantError) as err:
with pytest.raises(ServiceValidationError) as err:
await hass.services.async_call(
DOMAIN,
NintendoParentalServices.ADD_BONUS_TIME,
@@ -63,3 +63,30 @@ async def test_add_bonus_time_invalid_device(
)
assert err.value.translation_domain == DOMAIN
assert err.value.translation_key == "device_not_found"
async def test_add_bonus_time_device_id_not_nintendo(
hass: HomeAssistant,
device_registry: dr.DeviceRegistry,
mock_config_entry: MockConfigEntry,
mock_nintendo_client: AsyncMock,
) -> None:
"""Test add bonus time service with a device that is not a valid Nintendo device."""
await setup_integration(hass, mock_config_entry)
# Create a device that does not have a Nintendo identifier
device_entry = device_registry.async_get_or_create(
config_entry_id=mock_config_entry.entry_id,
connections={(dr.CONNECTION_NETWORK_MAC, "00:11:22:33:44:55")},
)
with pytest.raises(ServiceValidationError) as err:
await hass.services.async_call(
DOMAIN,
NintendoParentalServices.ADD_BONUS_TIME,
{
ATTR_DEVICE_ID: device_entry.id,
ATTR_BONUS_TIME: 15,
},
blocking=True,
)
assert err.value.translation_domain == DOMAIN
assert err.value.translation_key == "invalid_device"