Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions tests/components/nut/test_config_flow.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
"""Test the Network UPS Tools (NUT) config flow."""
from asynctest import MagicMock, patch
from asynctest import patch

from homeassistant import config_entries, data_entry_flow, setup
from homeassistant.components.nut.const import DOMAIN
from homeassistant.const import CONF_RESOURCES

from .util import _get_mock_pynutclient

from tests.common import MockConfigEntry

VALID_CONFIG = {
Expand All @@ -15,13 +17,6 @@
}


def _get_mock_pynutclient(list_vars=None, list_ups=None):
pynutclient = MagicMock()
type(pynutclient).list_ups = MagicMock(return_value=list_ups)
type(pynutclient).list_vars = MagicMock(return_value=list_vars)
return pynutclient


async def test_form_user_one_ups(hass):
"""Test we get the form."""
await setup.async_setup_component(hass, "persistent_notification", {})
Expand Down
67 changes: 67 additions & 0 deletions tests/components/nut/test_sensor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
"""The sensor tests for the nut platform."""


from .util import async_init_integration


async def test_pr3000rt2u(hass):
"""Test creation of PR3000RT2U sensors."""

await async_init_integration(hass, "PR3000RT2U", ["battery.charge"])

state = hass.states.get("sensor.ups1_battery_charge")
assert state.state == "100"

expected_attributes = {
"device_class": "battery",
"friendly_name": "Ups1 Battery Charge",
"state": "Online",
"unit_of_measurement": "%",
}
# Only test for a subset of attributes in case
# HA changes the implementation and a new one appears
assert all(
state.attributes[key] == expected_attributes[key] for key in expected_attributes
)


async def test_cp1350c(hass):
"""Test creation of CP1350C sensors."""

await async_init_integration(hass, "CP1350C", ["battery.charge"])

state = hass.states.get("sensor.ups1_battery_charge")
assert state.state == "100"

expected_attributes = {
"device_class": "battery",
"friendly_name": "Ups1 Battery Charge",
"state": "Online",
"unit_of_measurement": "%",
}
# Only test for a subset of attributes in case
# HA changes the implementation and a new one appears
assert all(
state.attributes[key] == expected_attributes[key] for key in expected_attributes
)


async def test_5e850i(hass):
"""Test creation of 5E850I sensors."""

await async_init_integration(hass, "5E850I", ["battery.charge"])

state = hass.states.get("sensor.ups1_battery_charge")
assert state.state == "100"

expected_attributes = {
"device_class": "battery",
"friendly_name": "Ups1 Battery Charge",
"state": "Online",
"unit_of_measurement": "%",
}
# Only test for a subset of attributes in case
# HA changes the implementation and a new one appears
assert all(
state.attributes[key] == expected_attributes[key] for key in expected_attributes
)
47 changes: 47 additions & 0 deletions tests/components/nut/util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
"""Tests for the nut integration."""

import json

from asynctest import MagicMock, patch

from homeassistant.components.nut.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_RESOURCES
from homeassistant.core import HomeAssistant

from tests.common import MockConfigEntry, load_fixture


def _get_mock_pynutclient(list_vars=None, list_ups=None):
pynutclient = MagicMock()
type(pynutclient).list_ups = MagicMock(return_value=list_ups)
type(pynutclient).list_vars = MagicMock(return_value=list_vars)
return pynutclient


async def async_init_integration(
hass: HomeAssistant, ups_fixture: str, resources: list
) -> MockConfigEntry:
"""Set up the nexia integration in Home Assistant."""

ups_fixture = f"nut/{ups_fixture}.json"
list_vars = json.loads(load_fixture(ups_fixture))

import pprint

pprint.pprint(list_vars)

mock_pynut = _get_mock_pynutclient(list_ups={"ups1": "UPS 1"}, list_vars=list_vars)

with patch(
"homeassistant.components.nut.PyNUTClient", return_value=mock_pynut,
):
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: "mock", CONF_PORT: "mock", CONF_RESOURCES: resources},
)
entry.add_to_hass(hass)

await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()

return entry
37 changes: 37 additions & 0 deletions tests/fixtures/nut/5E850I.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"driver.parameter.pollfreq" : "30",
"ups.power.nominal" : "850",
"battery.type" : "PbAc",
"driver.parameter.synchronous" : "no",
"driver.version" : "2.7.4",
"battery.runtime" : "1759",
"driver.version.internal" : "0.41",
"driver.name" : "usbhid-ups",
"outlet.desc" : "Main Outlet",
"ups.productid" : "ffff",
"ups.firmware" : "03.08.0018",
"output.frequency" : "50.0",
"device.model" : "5E 850i",
"output.voltage" : "238.0",
"ups.mfr" : "EATON",
"ups.load" : "21",
"outlet.id" : "1",
"device.type" : "ups",
"ups.timer.shutdown" : "-1",
"output.frequency.nominal" : "50",
"ups.delay.shutdown" : "20",
"input.voltage" : "240.0",
"ups.vendorid" : "0463",
"ups.model" : "5E 850i",
"driver.version.data" : "MGE HID 1.39",
"outlet.switchable" : "no",
"outlet.1.status" : "on",
"output.voltage.nominal" : "230",
"driver.parameter.port" : "auto",
"device.mfr" : "EATON",
"ups.start.battery" : "yes",
"ups.beeper.status" : "enabled",
"ups.status" : "OL",
"driver.parameter.pollinterval" : "2",
"battery.charge" : "100"
}
39 changes: 39 additions & 0 deletions tests/fixtures/nut/CP1350C.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"device.model" : " CP 1350C",
"ups.model" : " CP 1350C",
"battery.voltage.nominal" : "12",
"ups.delay.start" : "30",
"ups.realpower.nominal" : "298",
"ups.vendorid" : "0764",
"ups.mfr" : "CPS",
"driver.version" : "2.7.4",
"ups.delay.shutdown" : "20",
"battery.type" : "PbAcid",
"battery.voltage" : "14.0",
"ups.load" : "27",
"battery.charge.low" : "10",
"ups.beeper.status" : "enabled",
"device.mfr" : "CPS",
"battery.runtime" : "1225",
"driver.version.internal" : "0.41",
"input.voltage.nominal" : "230",
"input.transfer.high" : "280",
"driver.version.data" : "CyberPower HID 0.4",
"driver.parameter.port" : "/dev/ttyS1",
"input.voltage" : "236.0",
"battery.runtime.low" : "300",
"driver.parameter.pollinterval" : "2",
"driver.parameter.pollfreq" : "30",
"ups.timer.shutdown" : "-60",
"input.transfer.low" : "180",
"device.type" : "ups",
"battery.mfr.date" : "CPS",
"battery.charge" : "100",
"battery.charge.warning" : "20",
"ups.productid" : "0501",
"driver.name" : "usbhid-ups",
"output.voltage" : "236.0",
"driver.parameter.synchronous" : "no",
"ups.timer.start" : "0",
"ups.status" : "OL"
}
39 changes: 39 additions & 0 deletions tests/fixtures/nut/PR3000RT2U.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"ups.delay.shutdown" : "20",
"driver.parameter.pollfreq" : "30",
"ups.delay.start" : "30",
"ups.mfr" : "CPS",
"battery.charge.warning" : "35",
"battery.type" : "PbAcid",
"battery.charge" : "100",
"battery.mfr.date" : "CPS",
"output.voltage" : "264.0",
"ups.productid" : "0601",
"input.voltage.nominal" : "120",
"driver.parameter.port" : "auto",
"input.voltage" : "120.0",
"driver.version" : "DSM6-2-2-24922-broadwell-fmp-repack-24922-190507",
"ups.vendorid" : "0764",
"battery.voltage" : "1.2",
"device.model" : "PR3000RT2U",
"driver.parameter.pollinterval" : "5",
"device.type" : "ups",
"battery.charge.low" : "0",
"ups.model" : "PR3000RT2U",
"ups.test.result" : "No test initiated",
"driver.version.data" : "CyberPower HID 0.3",
"ups.serial" : "PYVJO2000034",
"battery.voltage.nominal" : "22",
"ups.beeper.status" : "enabled",
"battery.runtime.low" : "300",
"battery.runtime" : "2644",
"driver.version.internal" : "0.38",
"ups.realpower.nominal" : "3000",
"device.serial" : "PYVJO2000034",
"driver.name" : "usbhid-ups",
"device.mfr" : "CPS",
"ups.load" : "12",
"ups.timer.shutdown" : "0",
"ups.timer.start" : "0",
"ups.status" : "OL"
}