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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
"""Test the models."""
import pytest
from aiohttp import ClientSession
from aresponses import ResponsesMockServer
from syrupy.assertion import SnapshotAssertion
from p1monitor import (
P1Monitor,
P1MonitorConnectionError,
P1MonitorNoDataError,
Phases,
Settings,
SmartMeter,
WaterMeter,
)
from . import load_fixtures
async def test_smartmeter(
aresponses: ResponsesMockServer,
snapshot: SnapshotAssertion,
p1monitor_client: P1Monitor,
) -> None:
"""Test request from a P1 Monitor device - SmartMeter object."""
aresponses.add(
"192.168.1.2",
"/api/v1/smartmeter",
"GET",
aresponses.Response(
text=load_fixtures("smartmeter.json"),
status=200,
headers={"Content-Type": "application/json; charset=utf-8"},
),
)
smartmeter: SmartMeter = await p1monitor_client.smartmeter()
assert smartmeter == snapshot
async def test_phases(
aresponses: ResponsesMockServer,
snapshot: SnapshotAssertion,
p1monitor_client: P1Monitor,
) -> None:
"""Test request from a P1 Monitor device - Phases object."""
aresponses.add(
"192.168.1.2",
"/api/v1/status",
"GET",
aresponses.Response(
text=load_fixtures("phases.json"),
status=200,
headers={"Content-Type": "application/json; charset=utf-8"},
),
)
phases: Phases = await p1monitor_client.phases()
assert phases == snapshot
async def test_watermeter(
aresponses: ResponsesMockServer,
snapshot: SnapshotAssertion,
p1monitor_client: P1Monitor,
) -> None:
"""Test request from a P1 Monitor device - WaterMeter object."""
aresponses.add(
"192.168.1.2",
"/api/v2/watermeter/day",
"GET",
aresponses.Response(
text=load_fixtures("watermeter.json"),
status=200,
headers={"Content-Type": "application/json; charset=utf-8"},
),
)
watermeter: WaterMeter = await p1monitor_client.watermeter()
assert watermeter == snapshot
async def test_no_watermeter_data_new(aresponses: ResponsesMockServer) -> None:
"""Test no WaterMeter data from P1 Monitor device."""
aresponses.add(
"192.168.1.2",
"/api/v2/watermeter/day",
"GET",
aresponses.Response(
text=load_fixtures("no_data.json"),
status=200,
headers={"Content-Type": "application/json; charset=utf-8"},
),
)
async with ClientSession() as session:
client = P1Monitor(host="192.168.1.2", session=session)
with pytest.raises(P1MonitorNoDataError):
await client.watermeter()
async def test_no_watermeter_data_old(aresponses: ResponsesMockServer) -> None:
"""Test no WaterMeter data from P1 Monitor device."""
aresponses.add(
"192.168.1.2",
"/api/v2/watermeter/day",
"GET",
aresponses.Response(
status=404,
headers={"Content-Type": "application/json; charset=utf-8"},
),
)
async with ClientSession() as session:
client = P1Monitor(host="192.168.1.2", session=session)
with pytest.raises(P1MonitorConnectionError):
await client.watermeter()
async def test_settings(
aresponses: ResponsesMockServer,
snapshot: SnapshotAssertion,
p1monitor_client: P1Monitor,
) -> None:
"""Test request from a P1 Monitor device - Settings object."""
aresponses.add(
"192.168.1.2",
"/api/v1/configuration",
"GET",
aresponses.Response(
text=load_fixtures("settings.json"),
status=200,
headers={"Content-Type": "application/json; charset=utf-8"},
),
)
settings: Settings = await p1monitor_client.settings()
assert settings == snapshot
|