Skip to content

Commit

Permalink
Extend test coverage (#1149)
Browse files Browse the repository at this point in the history
* Add test for template tracking

* Cleanup

* Add tests
  • Loading branch information
bramstroker committed Oct 5, 2022
1 parent 98cdea3 commit e1fb10a
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 39 deletions.
2 changes: 1 addition & 1 deletion custom_components/powercalc/strategy/fixed.py
Expand Up @@ -36,7 +36,7 @@ def __init__(
self,
source_entity: SourceEntity,
power: Optional[Union[Template, float]],
per_state_power: Optional[dict[str, float]],
per_state_power: Optional[dict[str, Union[float, Template]]],
) -> None:
self._source_entity = source_entity
self._power = power
Expand Down
10 changes: 2 additions & 8 deletions tests/sensors/test_energy.py
@@ -1,13 +1,9 @@
from homeassistant.components import input_boolean
from homeassistant.components.utility_meter.sensor import SensorDeviceClass
from homeassistant.const import CONF_ENTITIES, CONF_ENTITY_ID
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntry
from homeassistant.helpers.entity_registry import RegistryEntry
from homeassistant.setup import async_setup_component
from pytest_homeassistant_custom_component.common import (
MockEntity,
MockEntityPlatform,
mock_device_registry,
mock_registry,
)
Expand All @@ -18,15 +14,13 @@
CONF_POWER_SENSOR_ID,
)

from ..common import run_powercalc_setup_yaml_config
from ..common import run_powercalc_setup_yaml_config, create_input_boolean


async def test_related_energy_sensor_is_used_for_existing_power_sensor(
hass: HomeAssistant,
):
assert await async_setup_component(
hass, input_boolean.DOMAIN, {"input_boolean": {"test": None}}
)
await create_input_boolean(hass)

mock_device_registry(
hass,
Expand Down
101 changes: 79 additions & 22 deletions tests/sensors/test_power.py
Expand Up @@ -16,9 +16,10 @@
CONF_ENTITIES,
CONF_ENTITY_ID,
CONF_NAME,
CONF_PLATFORM,
STATE_OFF,
STATE_ON,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
)
from homeassistant.core import EVENT_HOMEASSISTANT_START, CoreState, HomeAssistant
from homeassistant.setup import async_setup_component
Expand All @@ -37,7 +38,9 @@
CONF_DELAY,
CONF_FIXED,
CONF_LINEAR,
CONF_MANUFACTURER,
CONF_MODE,
CONF_MODEL,
CONF_MULTIPLY_FACTOR,
CONF_MULTIPLY_FACTOR_STANDBY,
CONF_POWER,
Expand All @@ -59,9 +62,7 @@


async def test_use_real_power_sensor_in_group(hass: HomeAssistant):
assert await async_setup_component(
hass, input_boolean.DOMAIN, {"input_boolean": {"test": None}}
)
await create_input_boolean(hass)

platform = MockEntityPlatform(hass)
entity = MockEntity(
Expand All @@ -71,26 +72,22 @@ async def test_use_real_power_sensor_in_group(hass: HomeAssistant):

await hass.async_block_till_done()

await async_setup_component(
await run_powercalc_setup_yaml_config(
hass,
sensor.DOMAIN,
{
sensor.DOMAIN: {
CONF_PLATFORM: DOMAIN,
CONF_CREATE_GROUP: "TestGroup",
CONF_ENTITIES: [
{
CONF_ENTITY_ID: "sensor.dummy",
CONF_POWER_SENSOR_ID: "sensor.existing_power",
},
{
CONF_ENTITY_ID: "input_boolean.test",
CONF_MODE: CalculationStrategy.FIXED,
CONF_FIXED: {CONF_POWER: 50},
},
],
}
},
CONF_CREATE_GROUP: "TestGroup",
CONF_ENTITIES: [
{
CONF_ENTITY_ID: "sensor.dummy",
CONF_POWER_SENSOR_ID: "sensor.existing_power",
},
{
CONF_ENTITY_ID: "input_boolean.test",
CONF_MODE: CalculationStrategy.FIXED,
CONF_FIXED: {CONF_POWER: 50},
},
],
}
)

await hass.async_block_till_done()
Expand Down Expand Up @@ -275,6 +272,66 @@ async def test_strategy_enabled_condition(hass: HomeAssistant):
assert hass.states.get(power_entity_id).state == "1.50"


async def test_template_entity_tracking(hass: HomeAssistant) -> None:
await create_input_number(hass, "test", 0)
await create_input_boolean(hass)

await run_powercalc_setup_yaml_config(
hass,
{
CONF_ENTITY_ID: "input_boolean.test",
CONF_FIXED: {
CONF_POWER: "{{ states('input_number.test') }}"
},
},
)

hass.states.async_set("input_boolean.test", STATE_ON)
await hass.async_block_till_done()

assert hass.states.get("sensor.test_power").state == "0.00"

hass.states.async_set("input_number.test", 15)
await hass.async_block_till_done()

assert hass.states.get("sensor.test_power").state == "15.00"


async def test_unknown_source_entity_state(hass: HomeAssistant):
"""Power sensor should be unavailable when source entity state is unknown"""
await create_input_boolean(hass)
await run_powercalc_setup_yaml_config(
hass,
{
CONF_ENTITY_ID: "input_boolean.test",
CONF_FIXED: {
CONF_POWER: 20
},
},
)
hass.states.async_set("input_boolean.test", STATE_UNKNOWN)
await hass.async_block_till_done()

assert hass.states.get("sensor.test_power").state == STATE_UNAVAILABLE


async def test_error_when_model_not_supported(hass: HomeAssistant, caplog: pytest.LogCaptureFixture):
caplog.set_level(logging.ERROR)

await create_input_boolean(hass)
await run_powercalc_setup_yaml_config(
hass,
{
CONF_ENTITY_ID: "input_boolean.test",
CONF_MANUFACTURER: "Foo",
CONF_MODEL: "Bar"
},
)

assert not hass.states.get("sensor.test_power")

assert "Skipping sensor setup" in caplog.text

async def test_sleep_power(hass: HomeAssistant):
"""Test sleep power for devices having a sleep mode"""
entity_id = "media_player.test"
Expand Down
5 changes: 2 additions & 3 deletions tests/sensors/test_utility_meter.py
Expand Up @@ -20,12 +20,11 @@
DOMAIN,
CalculationStrategy,
)
from ..common import create_input_boolean


async def test_tariff_sensors_are_created(hass: HomeAssistant):
assert await async_setup_component(
hass, input_boolean.DOMAIN, {"input_boolean": {"test": None}}
)
await create_input_boolean(hass)

assert await async_setup_component(hass, utility_meter.DOMAIN, {})

Expand Down
6 changes: 1 addition & 5 deletions tests/strategy/test_fixed.py
Expand Up @@ -29,11 +29,7 @@ async def test_simple_power():


async def test_template_power(hass: HomeAssistant):
assert await async_setup_component(
hass,
input_number.DOMAIN,
{"input_number": {"test": {"min": "0", "max": "100", "initial": "42"}}},
)
await create_input_number(hass, "test", 42)

await hass.async_block_till_done()

Expand Down

0 comments on commit e1fb10a

Please sign in to comment.