File: test_models.py

package info (click to toggle)
python-p1monitor 3.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 536 kB
  • sloc: python: 571; makefile: 3
file content (135 lines) | stat: -rw-r--r-- 3,874 bytes parent folder | download | duplicates (2)
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