core/tests/components/nextcloud/test_update.py

78 lines
2.8 KiB
Python

"""Tests for the Nextcloud update entity."""
from copy import deepcopy
from unittest.mock import patch
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.const import STATE_OFF, STATE_ON, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import init_integration
from .const import NC_DATA, VALID_CONFIG
from tests.common import snapshot_platform
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_async_setup_entry(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test a successful setup entry."""
with patch("homeassistant.components.nextcloud.PLATFORMS", [Platform.UPDATE]):
entry = await init_integration(hass, VALID_CONFIG, NC_DATA)
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
async def test_setup_entity_without_update(
hass: HomeAssistant, snapshot: SnapshotAssertion
) -> None:
"""Test update entity is created w/o available update."""
with patch("homeassistant.components.nextcloud.PLATFORMS", [Platform.UPDATE]):
await init_integration(hass, VALID_CONFIG, NC_DATA)
states = hass.states.async_all()
assert len(states) == 1
assert states[0].state == STATE_OFF
assert states[0].attributes["installed_version"] == "28.0.4.1"
assert states[0].attributes["latest_version"] == "28.0.4.1"
assert (
states[0].attributes["release_url"] == "https://nextcloud.com/changelog/#28-0-4"
)
async def test_setup_entity_with_update(
hass: HomeAssistant, snapshot: SnapshotAssertion
) -> None:
"""Test update entity is created with available update."""
data = deepcopy(NC_DATA)
data["nextcloud"]["system"]["update"]["available"] = True
data["nextcloud"]["system"]["update"]["available_version"] = "30.0.0.0"
with patch("homeassistant.components.nextcloud.PLATFORMS", [Platform.UPDATE]):
await init_integration(hass, VALID_CONFIG, data)
states = hass.states.async_all()
assert len(states) == 1
assert states[0].state == STATE_ON
assert states[0].attributes["installed_version"] == "28.0.4.1"
assert states[0].attributes["latest_version"] == "30.0.0.0"
assert (
states[0].attributes["release_url"] == "https://nextcloud.com/changelog/#30-0-0"
)
async def test_setup_no_entity(hass: HomeAssistant) -> None:
"""Test no update entity is created, when no data available."""
data = deepcopy(NC_DATA)
data["nextcloud"]["system"].pop("update") # only nc<28.0.0
with patch("homeassistant.components.nextcloud.PLATFORMS", [Platform.UPDATE]):
await init_integration(hass, VALID_CONFIG, data)
states = hass.states.async_all()
assert len(states) == 0