So far the Flo integration only supports shutoff valves. Add support for Flo leak detector pucks, which measure temperature and humidity in addition to providing leak alerts.
140 lines
4.9 KiB
Python
140 lines
4.9 KiB
Python
"""Define fixtures available for all tests."""
|
|
import json
|
|
import time
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.flo.const import DOMAIN as FLO_DOMAIN
|
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, CONTENT_TYPE_JSON
|
|
|
|
from .common import TEST_EMAIL_ADDRESS, TEST_PASSWORD, TEST_TOKEN, TEST_USER_ID
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
|
|
|
|
@pytest.fixture
|
|
def config_entry(hass):
|
|
"""Config entry version 1 fixture."""
|
|
return MockConfigEntry(
|
|
domain=FLO_DOMAIN,
|
|
data={CONF_USERNAME: TEST_USER_ID, CONF_PASSWORD: TEST_PASSWORD},
|
|
version=1,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def aioclient_mock_fixture(aioclient_mock):
|
|
"""Fixture to provide a aioclient mocker."""
|
|
now = round(time.time())
|
|
# Mocks the login response for flo.
|
|
aioclient_mock.post(
|
|
"https://api.meetflo.com/api/v1/users/auth",
|
|
text=json.dumps(
|
|
{
|
|
"token": TEST_TOKEN,
|
|
"tokenPayload": {
|
|
"user": {"user_id": TEST_USER_ID, "email": TEST_EMAIL_ADDRESS},
|
|
"timestamp": now,
|
|
},
|
|
"tokenExpiration": 86400,
|
|
"timeNow": now,
|
|
}
|
|
),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
status=200,
|
|
)
|
|
# Mocks the devices for flo.
|
|
aioclient_mock.get(
|
|
"https://api-gw.meetflo.com/api/v2/devices/98765",
|
|
text=load_fixture("flo/device_info_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
aioclient_mock.get(
|
|
"https://api-gw.meetflo.com/api/v2/devices/32839",
|
|
text=load_fixture("flo/device_info_response_detector.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
# Mocks the water consumption for flo.
|
|
aioclient_mock.get(
|
|
"https://api-gw.meetflo.com/api/v2/water/consumption",
|
|
text=load_fixture("flo/water_consumption_info_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
# Mocks the location info for flo.
|
|
aioclient_mock.get(
|
|
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp",
|
|
text=load_fixture("flo/location_info_expand_devices_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
# Mocks the user info for flo.
|
|
aioclient_mock.get(
|
|
"https://api-gw.meetflo.com/api/v2/users/12345abcde",
|
|
text=load_fixture("flo/user_info_expand_locations_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
params={"expand": "locations"},
|
|
)
|
|
# Mocks the user info for flo.
|
|
aioclient_mock.get(
|
|
"https://api-gw.meetflo.com/api/v2/users/12345abcde",
|
|
text=load_fixture("flo/user_info_expand_locations_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
# Mocks the valve open call for flo.
|
|
aioclient_mock.post(
|
|
"https://api-gw.meetflo.com/api/v2/devices/98765",
|
|
text=load_fixture("flo/device_info_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
json={"valve": {"target": "open"}},
|
|
)
|
|
# Mocks the valve close call for flo.
|
|
aioclient_mock.post(
|
|
"https://api-gw.meetflo.com/api/v2/devices/98765",
|
|
text=load_fixture("flo/device_info_response_closed.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
json={"valve": {"target": "closed"}},
|
|
)
|
|
# Mocks the health test call for flo.
|
|
aioclient_mock.post(
|
|
"https://api-gw.meetflo.com/api/v2/devices/98765/healthTest/run",
|
|
text=load_fixture("flo/user_info_expand_locations_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
# Mocks the health test call for flo.
|
|
aioclient_mock.post(
|
|
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode",
|
|
text=load_fixture("flo/user_info_expand_locations_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
json={"systemMode": {"target": "home"}},
|
|
)
|
|
# Mocks the health test call for flo.
|
|
aioclient_mock.post(
|
|
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode",
|
|
text=load_fixture("flo/user_info_expand_locations_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
json={"systemMode": {"target": "away"}},
|
|
)
|
|
# Mocks the health test call for flo.
|
|
aioclient_mock.post(
|
|
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode",
|
|
text=load_fixture("flo/user_info_expand_locations_response.json"),
|
|
status=200,
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
json={
|
|
"systemMode": {
|
|
"target": "sleep",
|
|
"revertMinutes": 120,
|
|
"revertMode": "home",
|
|
}
|
|
},
|
|
)
|