1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
"""Test Energy Production command class utility functions."""
import pytest
from zwave_js_server.const import CommandClass
from zwave_js_server.const.command_class.energy_production import (
CC_SPECIFIC_PARAMETER,
CC_SPECIFIC_SCALE,
EnergyProductionParameter,
PowerScale,
)
from zwave_js_server.exceptions import InvalidCommandClass, UnknownValueData
from zwave_js_server.model.node import Node
from zwave_js_server.model.value import (
MetaDataType,
Value,
ValueDataType,
get_value_id_str,
)
from zwave_js_server.util.command_class.energy_production import (
get_energy_production_parameter,
get_energy_production_scale_type,
)
async def test_get_energy_production_parameter(energy_production: Node):
"""Test get_energy_production_parameter function."""
node = energy_production
value_id = get_value_id_str(node, CommandClass.VERSION, "protocolVersion")
with pytest.raises(InvalidCommandClass):
get_energy_production_parameter(node.values.get(value_id))
value_id = get_value_id_str(
node, CommandClass.ENERGY_PRODUCTION, "value", property_key=0
)
assert (
get_energy_production_parameter(node.values.get(value_id))
== EnergyProductionParameter.POWER
)
async def test_invalid_get_energy_production_parameter(
invalid_multilevel_sensor_type: Node,
):
"""Test receiving an invalid energy production parameter."""
node = invalid_multilevel_sensor_type
# Create value with an invalid parameter ID
metadata = MetaDataType(ccSpecific={CC_SPECIFIC_PARAMETER: -1})
value_data = ValueDataType(
commandClass=CommandClass.ENERGY_PRODUCTION,
commandClassName="EnergyProduction",
endpoint=0,
property="value",
propertyKey=0,
metadata=metadata,
)
value = Value(node, value_data)
with pytest.raises(UnknownValueData):
get_energy_production_parameter(value)
async def test_get_energy_production_scale_type(energy_production: Node):
"""Test get_energy_production_scale_type function."""
node = energy_production
value_id = get_value_id_str(
node, CommandClass.ENERGY_PRODUCTION, "value", property_key=0
)
assert (
get_energy_production_scale_type(node.values.get(value_id)) == PowerScale.WATTS
)
async def test_invalid_get_energy_production_scale_type(
invalid_multilevel_sensor_type: Node,
):
"""Test receiving an invalid energy production scale type."""
node = invalid_multilevel_sensor_type
# Create value with an invalid scale ID
metadata = MetaDataType(
ccSpecific={CC_SPECIFIC_PARAMETER: 0, CC_SPECIFIC_SCALE: -1}
)
value_data = ValueDataType(
commandClass=CommandClass.ENERGY_PRODUCTION,
commandClassName="EnergyProduction",
endpoint=0,
property="value",
propertyKey=0,
metadata=metadata,
)
value = Value(node, value_data)
with pytest.raises(UnknownValueData):
get_energy_production_scale_type(value)
|