mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 07:07:28 +00:00
Clean up withings tests (#102548)
This commit is contained in:
parent
3f88c518a5
commit
e3b238861d
@ -5,13 +5,19 @@ from typing import Any
|
|||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from aiohttp.test_utils import TestClient
|
from aiohttp.test_utils import TestClient
|
||||||
|
from aiowithings import Goals, MeasurementGroup
|
||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
|
|
||||||
from homeassistant.components.webhook import async_generate_url
|
from homeassistant.components.webhook import async_generate_url
|
||||||
from homeassistant.config import async_process_ha_core_config
|
from homeassistant.config import async_process_ha_core_config
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
from tests.common import (
|
||||||
|
MockConfigEntry,
|
||||||
|
async_fire_time_changed,
|
||||||
|
load_json_array_fixture,
|
||||||
|
load_json_object_fixture,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -64,3 +70,17 @@ async def prepare_webhook_setup(
|
|||||||
freezer.tick(timedelta(seconds=1))
|
freezer.tick(timedelta(seconds=1))
|
||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
|
||||||
|
def load_goals_fixture(fixture: str = "withings/goals.json") -> Goals:
|
||||||
|
"""Return goals from fixture."""
|
||||||
|
goals_json = load_json_object_fixture(fixture)
|
||||||
|
return Goals.from_api(goals_json)
|
||||||
|
|
||||||
|
|
||||||
|
def load_measurements_fixture(
|
||||||
|
fixture: str = "withings/measurements.json",
|
||||||
|
) -> list[MeasurementGroup]:
|
||||||
|
"""Return measurement from fixture."""
|
||||||
|
meas_json = load_json_array_fixture(fixture)
|
||||||
|
return [MeasurementGroup.from_api(measurement) for measurement in meas_json]
|
||||||
|
@ -3,7 +3,7 @@ from datetime import timedelta
|
|||||||
import time
|
import time
|
||||||
from unittest.mock import AsyncMock, patch
|
from unittest.mock import AsyncMock, patch
|
||||||
|
|
||||||
from aiowithings import Device, Goals, MeasurementGroup, SleepSummary, WithingsClient
|
from aiowithings import Device, SleepSummary, WithingsClient
|
||||||
from aiowithings.models import NotificationConfiguration
|
from aiowithings.models import NotificationConfiguration
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -15,7 +15,8 @@ from homeassistant.components.withings.const import DOMAIN
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, load_json_object_fixture
|
from tests.common import MockConfigEntry, load_json_array_fixture
|
||||||
|
from tests.components.withings import load_goals_fixture, load_measurements_fixture
|
||||||
|
|
||||||
CLIENT_ID = "1234"
|
CLIENT_ID = "1234"
|
||||||
CLIENT_SECRET = "5678"
|
CLIENT_SECRET = "5678"
|
||||||
@ -128,32 +129,24 @@ def polling_config_entry(expires_at: int, scopes: list[str]) -> MockConfigEntry:
|
|||||||
def mock_withings():
|
def mock_withings():
|
||||||
"""Mock withings."""
|
"""Mock withings."""
|
||||||
|
|
||||||
devices_json = load_json_object_fixture("withings/get_device.json")
|
devices_json = load_json_array_fixture("withings/devices.json")
|
||||||
devices = [Device.from_api(device) for device in devices_json["devices"]]
|
devices = [Device.from_api(device) for device in devices_json]
|
||||||
|
|
||||||
meas_json = load_json_object_fixture("withings/get_meas.json")
|
measurement_groups = load_measurements_fixture("withings/measurements.json")
|
||||||
measurement_groups = [
|
|
||||||
MeasurementGroup.from_api(measurement)
|
|
||||||
for measurement in meas_json["measuregrps"]
|
|
||||||
]
|
|
||||||
|
|
||||||
sleep_json = load_json_object_fixture("withings/get_sleep.json")
|
sleep_json = load_json_array_fixture("withings/sleep_summaries.json")
|
||||||
sleep_summaries = [
|
sleep_summaries = [
|
||||||
SleepSummary.from_api(sleep_summary) for sleep_summary in sleep_json["series"]
|
SleepSummary.from_api(sleep_summary) for sleep_summary in sleep_json
|
||||||
]
|
]
|
||||||
|
|
||||||
notification_json = load_json_object_fixture("withings/notify_list.json")
|
notification_json = load_json_array_fixture("withings/notifications.json")
|
||||||
notifications = [
|
notifications = [
|
||||||
NotificationConfiguration.from_api(not_conf)
|
NotificationConfiguration.from_api(not_conf) for not_conf in notification_json
|
||||||
for not_conf in notification_json["profiles"]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
goals_json = load_json_object_fixture("withings/goals.json")
|
|
||||||
goals = Goals.from_api(goals_json)
|
|
||||||
|
|
||||||
mock = AsyncMock(spec=WithingsClient)
|
mock = AsyncMock(spec=WithingsClient)
|
||||||
mock.get_devices.return_value = devices
|
mock.get_devices.return_value = devices
|
||||||
mock.get_goals.return_value = goals
|
mock.get_goals.return_value = load_goals_fixture("withings/goals.json")
|
||||||
mock.get_measurement_in_period.return_value = measurement_groups
|
mock.get_measurement_in_period.return_value = measurement_groups
|
||||||
mock.get_measurement_since.return_value = measurement_groups
|
mock.get_measurement_since.return_value = measurement_groups
|
||||||
mock.get_sleep_summary_since.return_value = sleep_summaries
|
mock.get_sleep_summary_since.return_value = sleep_summaries
|
||||||
|
13
tests/components/withings/fixtures/devices.json
Normal file
13
tests/components/withings/fixtures/devices.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "Scale",
|
||||||
|
"battery": "high",
|
||||||
|
"model": "Body+",
|
||||||
|
"model_id": 5,
|
||||||
|
"timezone": "Europe/Amsterdam",
|
||||||
|
"first_session_date": null,
|
||||||
|
"last_session_date": 1693867179,
|
||||||
|
"deviceid": "f998be4b9ccc9e136fd8cd8e8e344c31ec3b271d",
|
||||||
|
"hash_deviceid": "f998be4b9ccc9e136fd8cd8e8e344c31ec3b271d"
|
||||||
|
}
|
||||||
|
]
|
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"devices": [
|
|
||||||
{
|
|
||||||
"type": "Scale",
|
|
||||||
"battery": "high",
|
|
||||||
"model": "Body+",
|
|
||||||
"model_id": 5,
|
|
||||||
"timezone": "Europe/Amsterdam",
|
|
||||||
"first_session_date": null,
|
|
||||||
"last_session_date": 1693867179,
|
|
||||||
"deviceid": "f998be4b9ccc9e136fd8cd8e8e344c31ec3b271d",
|
|
||||||
"hash_deviceid": "f998be4b9ccc9e136fd8cd8e8e344c31ec3b271d"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,313 +0,0 @@
|
|||||||
{
|
|
||||||
"more": false,
|
|
||||||
"timezone": "UTC",
|
|
||||||
"updatetime": 1564617600,
|
|
||||||
"offset": 0,
|
|
||||||
"measuregrps": [
|
|
||||||
{
|
|
||||||
"grpid": 1,
|
|
||||||
"attrib": 0,
|
|
||||||
"date": 1564660800,
|
|
||||||
"created": 1564660800,
|
|
||||||
"modified": 1564660800,
|
|
||||||
"category": 1,
|
|
||||||
"deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
|
||||||
"hash_deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
|
||||||
"measures": [
|
|
||||||
{
|
|
||||||
"type": 1,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 70
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 8,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 5
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 5,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 76,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 88,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 10
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 4,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 12,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 40
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 71,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 40
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 73,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 20
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 6,
|
|
||||||
"unit": -3,
|
|
||||||
"value": 70
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 9,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 70
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 10,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 11,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 54,
|
|
||||||
"unit": -2,
|
|
||||||
"value": 95
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 77,
|
|
||||||
"unit": -2,
|
|
||||||
"value": 95
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 91,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 123,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 155,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 168,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 169,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 100
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"modelid": 45,
|
|
||||||
"model": "BPM Connect",
|
|
||||||
"comment": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"grpid": 1,
|
|
||||||
"attrib": 0,
|
|
||||||
"date": 1564657200,
|
|
||||||
"created": 1564657200,
|
|
||||||
"modified": 1564657200,
|
|
||||||
"category": 1,
|
|
||||||
"deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
|
||||||
"hash_deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
|
||||||
"measures": [
|
|
||||||
{
|
|
||||||
"type": 1,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 71
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 8,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 51
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 5,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 61
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 76,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 51
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 88,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 11
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 4,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 21
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 12,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 41
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 71,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 41
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 73,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 21
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 6,
|
|
||||||
"unit": -3,
|
|
||||||
"value": 71
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 9,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 71
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 10,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 101
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 11,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 61
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 54,
|
|
||||||
"unit": -2,
|
|
||||||
"value": 96
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 77,
|
|
||||||
"unit": -2,
|
|
||||||
"value": 96
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 91,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 101
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"modelid": 45,
|
|
||||||
"model": "BPM Connect",
|
|
||||||
"comment": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"grpid": 1,
|
|
||||||
"attrib": 1,
|
|
||||||
"date": 1564664400,
|
|
||||||
"created": 1564664400,
|
|
||||||
"modified": 1564664400,
|
|
||||||
"category": 1,
|
|
||||||
"deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
|
||||||
"hash_deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
|
||||||
"measures": [
|
|
||||||
{
|
|
||||||
"type": 1,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 71
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 8,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 5,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 40
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 76,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 51
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 88,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 11
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 4,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 201
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 12,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 41
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 71,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 34
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 73,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 21
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 6,
|
|
||||||
"unit": -3,
|
|
||||||
"value": 71
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 9,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 71
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 10,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 101
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 11,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 61
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 54,
|
|
||||||
"unit": -2,
|
|
||||||
"value": 98
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 77,
|
|
||||||
"unit": -2,
|
|
||||||
"value": 96
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": 91,
|
|
||||||
"unit": 0,
|
|
||||||
"value": 102
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"modelid": 45,
|
|
||||||
"model": "BPM Connect",
|
|
||||||
"comment": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,201 +0,0 @@
|
|||||||
{
|
|
||||||
"more": false,
|
|
||||||
"offset": 0,
|
|
||||||
"series": [
|
|
||||||
{
|
|
||||||
"id": 2081804182,
|
|
||||||
"timezone": "Europe/Paris",
|
|
||||||
"model": 32,
|
|
||||||
"model_id": 63,
|
|
||||||
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
|
||||||
"startdate": 1618691453,
|
|
||||||
"enddate": 1618713173,
|
|
||||||
"date": "2021-04-18",
|
|
||||||
"data": {
|
|
||||||
"wakeupduration": 3060,
|
|
||||||
"wakeupcount": 1,
|
|
||||||
"durationtosleep": 540,
|
|
||||||
"remsleepduration": 2400,
|
|
||||||
"durationtowakeup": 1140,
|
|
||||||
"total_sleep_time": 18660,
|
|
||||||
"sleep_efficiency": 0.86,
|
|
||||||
"sleep_latency": 540,
|
|
||||||
"wakeup_latency": 1140,
|
|
||||||
"waso": 1380,
|
|
||||||
"nb_rem_episodes": 1,
|
|
||||||
"out_of_bed_count": 0,
|
|
||||||
"lightsleepduration": 10440,
|
|
||||||
"deepsleepduration": 5820,
|
|
||||||
"hr_average": 103,
|
|
||||||
"hr_min": 70,
|
|
||||||
"hr_max": 120,
|
|
||||||
"rr_average": 14,
|
|
||||||
"rr_min": 10,
|
|
||||||
"rr_max": 20,
|
|
||||||
"breathing_disturbances_intensity": 9,
|
|
||||||
"snoring": 1080,
|
|
||||||
"snoringepisodecount": 18,
|
|
||||||
"sleep_score": 37,
|
|
||||||
"apnea_hypopnea_index": 9
|
|
||||||
},
|
|
||||||
"created": 1620237476,
|
|
||||||
"modified": 1620237476
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2081804265,
|
|
||||||
"timezone": "Europe/Paris",
|
|
||||||
"model": 32,
|
|
||||||
"model_id": 63,
|
|
||||||
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
|
||||||
"startdate": 1618605055,
|
|
||||||
"enddate": 1618636975,
|
|
||||||
"date": "2021-04-17",
|
|
||||||
"data": {
|
|
||||||
"wakeupduration": 2520,
|
|
||||||
"wakeupcount": 3,
|
|
||||||
"durationtosleep": 900,
|
|
||||||
"remsleepduration": 6840,
|
|
||||||
"durationtowakeup": 420,
|
|
||||||
"total_sleep_time": 26880,
|
|
||||||
"sleep_efficiency": 0.91,
|
|
||||||
"sleep_latency": 900,
|
|
||||||
"wakeup_latency": 420,
|
|
||||||
"waso": 1200,
|
|
||||||
"nb_rem_episodes": 2,
|
|
||||||
"out_of_bed_count": 0,
|
|
||||||
"lightsleepduration": 12840,
|
|
||||||
"deepsleepduration": 7200,
|
|
||||||
"hr_average": 85,
|
|
||||||
"hr_min": 50,
|
|
||||||
"hr_max": 120,
|
|
||||||
"rr_average": 16,
|
|
||||||
"rr_min": 10,
|
|
||||||
"rr_max": 20,
|
|
||||||
"breathing_disturbances_intensity": 14,
|
|
||||||
"snoring": 1140,
|
|
||||||
"snoringepisodecount": 19,
|
|
||||||
"sleep_score": 90,
|
|
||||||
"apnea_hypopnea_index": 14
|
|
||||||
},
|
|
||||||
"created": 1620237480,
|
|
||||||
"modified": 1620237479
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2081804358,
|
|
||||||
"timezone": "Europe/Paris",
|
|
||||||
"model": 32,
|
|
||||||
"model_id": 63,
|
|
||||||
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
|
||||||
"startdate": 1618518658,
|
|
||||||
"enddate": 1618548058,
|
|
||||||
"date": "2021-04-16",
|
|
||||||
"data": {
|
|
||||||
"wakeupduration": 4080,
|
|
||||||
"wakeupcount": 1,
|
|
||||||
"durationtosleep": 840,
|
|
||||||
"remsleepduration": 2040,
|
|
||||||
"durationtowakeup": 1560,
|
|
||||||
"total_sleep_time": 16860,
|
|
||||||
"sleep_efficiency": 0.81,
|
|
||||||
"sleep_latency": 840,
|
|
||||||
"wakeup_latency": 1560,
|
|
||||||
"waso": 1680,
|
|
||||||
"nb_rem_episodes": 2,
|
|
||||||
"out_of_bed_count": 0,
|
|
||||||
"lightsleepduration": 11100,
|
|
||||||
"deepsleepduration": 3720,
|
|
||||||
"hr_average": 65,
|
|
||||||
"hr_min": 50,
|
|
||||||
"hr_max": 91,
|
|
||||||
"rr_average": 14,
|
|
||||||
"rr_min": 10,
|
|
||||||
"rr_max": 20,
|
|
||||||
"breathing_disturbances_intensity": -1,
|
|
||||||
"snoring": 1020,
|
|
||||||
"snoringepisodecount": 17,
|
|
||||||
"sleep_score": 20,
|
|
||||||
"apnea_hypopnea_index": -1
|
|
||||||
},
|
|
||||||
"created": 1620237484,
|
|
||||||
"modified": 1620237484
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2081804405,
|
|
||||||
"timezone": "Europe/Paris",
|
|
||||||
"model": 32,
|
|
||||||
"model_id": 63,
|
|
||||||
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
|
||||||
"startdate": 1618432203,
|
|
||||||
"enddate": 1618453143,
|
|
||||||
"date": "2021-04-15",
|
|
||||||
"data": {
|
|
||||||
"wakeupduration": 4080,
|
|
||||||
"wakeupcount": 1,
|
|
||||||
"durationtosleep": 840,
|
|
||||||
"remsleepduration": 2040,
|
|
||||||
"durationtowakeup": 1560,
|
|
||||||
"total_sleep_time": 16860,
|
|
||||||
"sleep_efficiency": 0.81,
|
|
||||||
"sleep_latency": 840,
|
|
||||||
"wakeup_latency": 1560,
|
|
||||||
"waso": 1680,
|
|
||||||
"nb_rem_episodes": 2,
|
|
||||||
"out_of_bed_count": 0,
|
|
||||||
"lightsleepduration": 11100,
|
|
||||||
"deepsleepduration": 3720,
|
|
||||||
"hr_average": 65,
|
|
||||||
"hr_min": 50,
|
|
||||||
"hr_max": 91,
|
|
||||||
"rr_average": 14,
|
|
||||||
"rr_min": 10,
|
|
||||||
"rr_max": 20,
|
|
||||||
"breathing_disturbances_intensity": -1,
|
|
||||||
"snoring": 1020,
|
|
||||||
"snoringepisodecount": 17,
|
|
||||||
"sleep_score": 20,
|
|
||||||
"apnea_hypopnea_index": -1
|
|
||||||
},
|
|
||||||
"created": 1620237486,
|
|
||||||
"modified": 1620237486
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2081804490,
|
|
||||||
"timezone": "Europe/Paris",
|
|
||||||
"model": 32,
|
|
||||||
"model_id": 63,
|
|
||||||
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
|
||||||
"startdate": 1618345805,
|
|
||||||
"enddate": 1618373504,
|
|
||||||
"date": "2021-04-14",
|
|
||||||
"data": {
|
|
||||||
"wakeupduration": 3600,
|
|
||||||
"wakeupcount": 2,
|
|
||||||
"durationtosleep": 780,
|
|
||||||
"remsleepduration": 3960,
|
|
||||||
"durationtowakeup": 300,
|
|
||||||
"total_sleep_time": 22680,
|
|
||||||
"sleep_efficiency": 0.86,
|
|
||||||
"sleep_latency": 780,
|
|
||||||
"wakeup_latency": 300,
|
|
||||||
"waso": 3939,
|
|
||||||
"nb_rem_episodes": 4,
|
|
||||||
"out_of_bed_count": 3,
|
|
||||||
"lightsleepduration": 12960,
|
|
||||||
"deepsleepduration": 5760,
|
|
||||||
"hr_average": 98,
|
|
||||||
"hr_min": 70,
|
|
||||||
"hr_max": 120,
|
|
||||||
"rr_average": 13,
|
|
||||||
"rr_min": 10,
|
|
||||||
"rr_max": 20,
|
|
||||||
"breathing_disturbances_intensity": 29,
|
|
||||||
"snoring": 960,
|
|
||||||
"snoringepisodecount": 16,
|
|
||||||
"sleep_score": 62,
|
|
||||||
"apnea_hypopnea_index": 29
|
|
||||||
},
|
|
||||||
"created": 1620237490,
|
|
||||||
"modified": 1620237489
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
307
tests/components/withings/fixtures/measurements.json
Normal file
307
tests/components/withings/fixtures/measurements.json
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"grpid": 1,
|
||||||
|
"attrib": 0,
|
||||||
|
"date": 1564660800,
|
||||||
|
"created": 1564660800,
|
||||||
|
"modified": 1564660800,
|
||||||
|
"category": 1,
|
||||||
|
"deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
||||||
|
"hash_deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
||||||
|
"measures": [
|
||||||
|
{
|
||||||
|
"type": 1,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 70
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 8,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 5,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 76,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 88,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 4,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 12,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 40
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 71,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 40
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 73,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 6,
|
||||||
|
"unit": -3,
|
||||||
|
"value": 70
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 9,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 70
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 10,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 11,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 54,
|
||||||
|
"unit": -2,
|
||||||
|
"value": 95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 77,
|
||||||
|
"unit": -2,
|
||||||
|
"value": 95
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 91,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 123,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 155,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 168,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 169,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 100
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"modelid": 45,
|
||||||
|
"model": "BPM Connect",
|
||||||
|
"comment": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"grpid": 1,
|
||||||
|
"attrib": 0,
|
||||||
|
"date": 1564657200,
|
||||||
|
"created": 1564657200,
|
||||||
|
"modified": 1564657200,
|
||||||
|
"category": 1,
|
||||||
|
"deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
||||||
|
"hash_deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
||||||
|
"measures": [
|
||||||
|
{
|
||||||
|
"type": 1,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 8,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 51
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 5,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 61
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 76,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 51
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 88,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 4,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 12,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 41
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 71,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 41
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 73,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 6,
|
||||||
|
"unit": -3,
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 9,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 10,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 101
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 11,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 61
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 54,
|
||||||
|
"unit": -2,
|
||||||
|
"value": 96
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 77,
|
||||||
|
"unit": -2,
|
||||||
|
"value": 96
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 91,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 101
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"modelid": 45,
|
||||||
|
"model": "BPM Connect",
|
||||||
|
"comment": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"grpid": 1,
|
||||||
|
"attrib": 1,
|
||||||
|
"date": 1564664400,
|
||||||
|
"created": 1564664400,
|
||||||
|
"modified": 1564664400,
|
||||||
|
"category": 1,
|
||||||
|
"deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
||||||
|
"hash_deviceid": "91a7e556c2022ef54dca6e07a853c3193734d148",
|
||||||
|
"measures": [
|
||||||
|
{
|
||||||
|
"type": 1,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 8,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 5,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 40
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 76,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 51
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 88,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 4,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 201
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 12,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 41
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 71,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 34
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 73,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 6,
|
||||||
|
"unit": -3,
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 9,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 10,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 101
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 11,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 61
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 54,
|
||||||
|
"unit": -2,
|
||||||
|
"value": 98
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 77,
|
||||||
|
"unit": -2,
|
||||||
|
"value": 96
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": 91,
|
||||||
|
"unit": 0,
|
||||||
|
"value": 102
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"modelid": 45,
|
||||||
|
"model": "BPM Connect",
|
||||||
|
"comment": null
|
||||||
|
}
|
||||||
|
]
|
20
tests/components/withings/fixtures/notifications.json
Normal file
20
tests/components/withings/fixtures/notifications.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"appli": 50,
|
||||||
|
"callbackurl": "https://not.my.callback/url",
|
||||||
|
"expires": 2147483647,
|
||||||
|
"comment": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appli": 50,
|
||||||
|
"callbackurl": "https://example.com/api/webhook/55a7335ea8dee830eed4ef8f84cda8f6d80b83af0847dc74032e86120bffed5e",
|
||||||
|
"expires": 2147483647,
|
||||||
|
"comment": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appli": 51,
|
||||||
|
"callbackurl": "https://example.com/api/webhook/55a7335ea8dee830eed4ef8f84cda8f6d80b83af0847dc74032e86120bffed5e",
|
||||||
|
"expires": 2147483647,
|
||||||
|
"comment": null
|
||||||
|
}
|
||||||
|
]
|
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"profiles": [
|
|
||||||
{
|
|
||||||
"appli": 50,
|
|
||||||
"callbackurl": "https://not.my.callback/url",
|
|
||||||
"expires": 2147483647,
|
|
||||||
"comment": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appli": 50,
|
|
||||||
"callbackurl": "https://example.com/api/webhook/55a7335ea8dee830eed4ef8f84cda8f6d80b83af0847dc74032e86120bffed5e",
|
|
||||||
"expires": 2147483647,
|
|
||||||
"comment": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appli": 51,
|
|
||||||
"callbackurl": "https://example.com/api/webhook/55a7335ea8dee830eed4ef8f84cda8f6d80b83af0847dc74032e86120bffed5e",
|
|
||||||
"expires": 2147483647,
|
|
||||||
"comment": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
197
tests/components/withings/fixtures/sleep_summaries.json
Normal file
197
tests/components/withings/fixtures/sleep_summaries.json
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 2081804182,
|
||||||
|
"timezone": "Europe/Paris",
|
||||||
|
"model": 32,
|
||||||
|
"model_id": 63,
|
||||||
|
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
||||||
|
"startdate": 1618691453,
|
||||||
|
"enddate": 1618713173,
|
||||||
|
"date": "2021-04-18",
|
||||||
|
"data": {
|
||||||
|
"wakeupduration": 3060,
|
||||||
|
"wakeupcount": 1,
|
||||||
|
"durationtosleep": 540,
|
||||||
|
"remsleepduration": 2400,
|
||||||
|
"durationtowakeup": 1140,
|
||||||
|
"total_sleep_time": 18660,
|
||||||
|
"sleep_efficiency": 0.86,
|
||||||
|
"sleep_latency": 540,
|
||||||
|
"wakeup_latency": 1140,
|
||||||
|
"waso": 1380,
|
||||||
|
"nb_rem_episodes": 1,
|
||||||
|
"out_of_bed_count": 0,
|
||||||
|
"lightsleepduration": 10440,
|
||||||
|
"deepsleepduration": 5820,
|
||||||
|
"hr_average": 103,
|
||||||
|
"hr_min": 70,
|
||||||
|
"hr_max": 120,
|
||||||
|
"rr_average": 14,
|
||||||
|
"rr_min": 10,
|
||||||
|
"rr_max": 20,
|
||||||
|
"breathing_disturbances_intensity": 9,
|
||||||
|
"snoring": 1080,
|
||||||
|
"snoringepisodecount": 18,
|
||||||
|
"sleep_score": 37,
|
||||||
|
"apnea_hypopnea_index": 9
|
||||||
|
},
|
||||||
|
"created": 1620237476,
|
||||||
|
"modified": 1620237476
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2081804265,
|
||||||
|
"timezone": "Europe/Paris",
|
||||||
|
"model": 32,
|
||||||
|
"model_id": 63,
|
||||||
|
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
||||||
|
"startdate": 1618605055,
|
||||||
|
"enddate": 1618636975,
|
||||||
|
"date": "2021-04-17",
|
||||||
|
"data": {
|
||||||
|
"wakeupduration": 2520,
|
||||||
|
"wakeupcount": 3,
|
||||||
|
"durationtosleep": 900,
|
||||||
|
"remsleepduration": 6840,
|
||||||
|
"durationtowakeup": 420,
|
||||||
|
"total_sleep_time": 26880,
|
||||||
|
"sleep_efficiency": 0.91,
|
||||||
|
"sleep_latency": 900,
|
||||||
|
"wakeup_latency": 420,
|
||||||
|
"waso": 1200,
|
||||||
|
"nb_rem_episodes": 2,
|
||||||
|
"out_of_bed_count": 0,
|
||||||
|
"lightsleepduration": 12840,
|
||||||
|
"deepsleepduration": 7200,
|
||||||
|
"hr_average": 85,
|
||||||
|
"hr_min": 50,
|
||||||
|
"hr_max": 120,
|
||||||
|
"rr_average": 16,
|
||||||
|
"rr_min": 10,
|
||||||
|
"rr_max": 20,
|
||||||
|
"breathing_disturbances_intensity": 14,
|
||||||
|
"snoring": 1140,
|
||||||
|
"snoringepisodecount": 19,
|
||||||
|
"sleep_score": 90,
|
||||||
|
"apnea_hypopnea_index": 14
|
||||||
|
},
|
||||||
|
"created": 1620237480,
|
||||||
|
"modified": 1620237479
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2081804358,
|
||||||
|
"timezone": "Europe/Paris",
|
||||||
|
"model": 32,
|
||||||
|
"model_id": 63,
|
||||||
|
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
||||||
|
"startdate": 1618518658,
|
||||||
|
"enddate": 1618548058,
|
||||||
|
"date": "2021-04-16",
|
||||||
|
"data": {
|
||||||
|
"wakeupduration": 4080,
|
||||||
|
"wakeupcount": 1,
|
||||||
|
"durationtosleep": 840,
|
||||||
|
"remsleepduration": 2040,
|
||||||
|
"durationtowakeup": 1560,
|
||||||
|
"total_sleep_time": 16860,
|
||||||
|
"sleep_efficiency": 0.81,
|
||||||
|
"sleep_latency": 840,
|
||||||
|
"wakeup_latency": 1560,
|
||||||
|
"waso": 1680,
|
||||||
|
"nb_rem_episodes": 2,
|
||||||
|
"out_of_bed_count": 0,
|
||||||
|
"lightsleepduration": 11100,
|
||||||
|
"deepsleepduration": 3720,
|
||||||
|
"hr_average": 65,
|
||||||
|
"hr_min": 50,
|
||||||
|
"hr_max": 91,
|
||||||
|
"rr_average": 14,
|
||||||
|
"rr_min": 10,
|
||||||
|
"rr_max": 20,
|
||||||
|
"breathing_disturbances_intensity": -1,
|
||||||
|
"snoring": 1020,
|
||||||
|
"snoringepisodecount": 17,
|
||||||
|
"sleep_score": 20,
|
||||||
|
"apnea_hypopnea_index": -1
|
||||||
|
},
|
||||||
|
"created": 1620237484,
|
||||||
|
"modified": 1620237484
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2081804405,
|
||||||
|
"timezone": "Europe/Paris",
|
||||||
|
"model": 32,
|
||||||
|
"model_id": 63,
|
||||||
|
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
||||||
|
"startdate": 1618432203,
|
||||||
|
"enddate": 1618453143,
|
||||||
|
"date": "2021-04-15",
|
||||||
|
"data": {
|
||||||
|
"wakeupduration": 4080,
|
||||||
|
"wakeupcount": 1,
|
||||||
|
"durationtosleep": 840,
|
||||||
|
"remsleepduration": 2040,
|
||||||
|
"durationtowakeup": 1560,
|
||||||
|
"total_sleep_time": 16860,
|
||||||
|
"sleep_efficiency": 0.81,
|
||||||
|
"sleep_latency": 840,
|
||||||
|
"wakeup_latency": 1560,
|
||||||
|
"waso": 1680,
|
||||||
|
"nb_rem_episodes": 2,
|
||||||
|
"out_of_bed_count": 0,
|
||||||
|
"lightsleepduration": 11100,
|
||||||
|
"deepsleepduration": 3720,
|
||||||
|
"hr_average": 65,
|
||||||
|
"hr_min": 50,
|
||||||
|
"hr_max": 91,
|
||||||
|
"rr_average": 14,
|
||||||
|
"rr_min": 10,
|
||||||
|
"rr_max": 20,
|
||||||
|
"breathing_disturbances_intensity": -1,
|
||||||
|
"snoring": 1020,
|
||||||
|
"snoringepisodecount": 17,
|
||||||
|
"sleep_score": 20,
|
||||||
|
"apnea_hypopnea_index": -1
|
||||||
|
},
|
||||||
|
"created": 1620237486,
|
||||||
|
"modified": 1620237486
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2081804490,
|
||||||
|
"timezone": "Europe/Paris",
|
||||||
|
"model": 32,
|
||||||
|
"model_id": 63,
|
||||||
|
"hash_deviceid": "201d0b9a0556d6b755166b2cf8d22d3bdf0487ee",
|
||||||
|
"startdate": 1618345805,
|
||||||
|
"enddate": 1618373504,
|
||||||
|
"date": "2021-04-14",
|
||||||
|
"data": {
|
||||||
|
"wakeupduration": 3600,
|
||||||
|
"wakeupcount": 2,
|
||||||
|
"durationtosleep": 780,
|
||||||
|
"remsleepduration": 3960,
|
||||||
|
"durationtowakeup": 300,
|
||||||
|
"total_sleep_time": 22680,
|
||||||
|
"sleep_efficiency": 0.86,
|
||||||
|
"sleep_latency": 780,
|
||||||
|
"wakeup_latency": 300,
|
||||||
|
"waso": 3939,
|
||||||
|
"nb_rem_episodes": 4,
|
||||||
|
"out_of_bed_count": 3,
|
||||||
|
"lightsleepduration": 12960,
|
||||||
|
"deepsleepduration": 5760,
|
||||||
|
"hr_average": 98,
|
||||||
|
"hr_min": 70,
|
||||||
|
"hr_max": 120,
|
||||||
|
"rr_average": 13,
|
||||||
|
"rr_min": 10,
|
||||||
|
"rr_max": 20,
|
||||||
|
"breathing_disturbances_intensity": 29,
|
||||||
|
"snoring": 960,
|
||||||
|
"snoringepisodecount": 16,
|
||||||
|
"sleep_score": 62,
|
||||||
|
"apnea_hypopnea_index": 29
|
||||||
|
},
|
||||||
|
"created": 1620237490,
|
||||||
|
"modified": 1620237489
|
||||||
|
}
|
||||||
|
]
|
@ -120,11 +120,9 @@ async def test_data_manager_webhook_subscription(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
withings: AsyncMock,
|
withings: AsyncMock,
|
||||||
webhook_config_entry: MockConfigEntry,
|
webhook_config_entry: MockConfigEntry,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test data manager webhook subscriptions."""
|
"""Test data manager webhook subscriptions."""
|
||||||
await setup_integration(hass, webhook_config_entry)
|
await setup_integration(hass, webhook_config_entry)
|
||||||
await hass_client_no_auth()
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=1))
|
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=1))
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -158,12 +156,10 @@ async def test_webhook_subscription_polling_config(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
withings: AsyncMock,
|
withings: AsyncMock,
|
||||||
polling_config_entry: MockConfigEntry,
|
polling_config_entry: MockConfigEntry,
|
||||||
hass_client_no_auth: ClientSessionGenerator,
|
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test webhook subscriptions not run when polling."""
|
"""Test webhook subscriptions not run when polling."""
|
||||||
await setup_integration(hass, polling_config_entry, False)
|
await setup_integration(hass, polling_config_entry, False)
|
||||||
await hass_client_no_auth()
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
freezer.tick(timedelta(seconds=1))
|
freezer.tick(timedelta(seconds=1))
|
||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from unittest.mock import AsyncMock, patch
|
from unittest.mock import AsyncMock, patch
|
||||||
|
|
||||||
from aiowithings import Goals, MeasurementGroup
|
|
||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
import pytest
|
import pytest
|
||||||
from syrupy import SnapshotAssertion
|
from syrupy import SnapshotAssertion
|
||||||
@ -11,14 +10,9 @@ from homeassistant.const import STATE_UNAVAILABLE, Platform
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
|
|
||||||
from . import setup_integration
|
from . import load_goals_fixture, load_measurements_fixture, setup_integration
|
||||||
|
|
||||||
from tests.common import (
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||||
MockConfigEntry,
|
|
||||||
async_fire_time_changed,
|
|
||||||
load_json_array_fixture,
|
|
||||||
load_json_object_fixture,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||||
@ -78,11 +72,6 @@ async def test_update_updates_incrementally(
|
|||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
meas_json = load_json_array_fixture("withings/get_meas_1.json")
|
|
||||||
measurement_groups = [
|
|
||||||
MeasurementGroup.from_api(measurement) for measurement in meas_json
|
|
||||||
]
|
|
||||||
|
|
||||||
assert withings.get_measurement_since.call_args_list == []
|
assert withings.get_measurement_since.call_args_list == []
|
||||||
await _skip_10_minutes()
|
await _skip_10_minutes()
|
||||||
assert (
|
assert (
|
||||||
@ -90,7 +79,10 @@ async def test_update_updates_incrementally(
|
|||||||
== "2019-08-01 12:00:00+00:00"
|
== "2019-08-01 12:00:00+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
withings.get_measurement_since.return_value = measurement_groups
|
withings.get_measurement_since.return_value = load_measurements_fixture(
|
||||||
|
"withings/measurements_1.json"
|
||||||
|
)
|
||||||
|
|
||||||
await _skip_10_minutes()
|
await _skip_10_minutes()
|
||||||
assert (
|
assert (
|
||||||
str(withings.get_measurement_since.call_args_list[1].args[0])
|
str(withings.get_measurement_since.call_args_list[1].args[0])
|
||||||
@ -116,21 +108,16 @@ async def test_update_new_measurement_creates_new_sensor(
|
|||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test fetching a new measurement will add a new sensor."""
|
"""Test fetching a new measurement will add a new sensor."""
|
||||||
meas_json = load_json_array_fixture("withings/get_meas_1.json")
|
withings.get_measurement_in_period.return_value = load_measurements_fixture(
|
||||||
measurement_groups = [
|
"withings/measurements_1.json"
|
||||||
MeasurementGroup.from_api(measurement) for measurement in meas_json
|
)
|
||||||
]
|
|
||||||
withings.get_measurement_in_period.return_value = measurement_groups
|
|
||||||
await setup_integration(hass, polling_config_entry, False)
|
await setup_integration(hass, polling_config_entry, False)
|
||||||
|
|
||||||
assert hass.states.get("sensor.henk_fat_mass") is None
|
assert hass.states.get("sensor.henk_fat_mass") is None
|
||||||
|
|
||||||
meas_json = load_json_object_fixture("withings/get_meas.json")
|
withings.get_measurement_in_period.return_value = load_measurements_fixture(
|
||||||
measurement_groups = [
|
"withings/measurements.json"
|
||||||
MeasurementGroup.from_api(measurement)
|
)
|
||||||
for measurement in meas_json["measuregrps"]
|
|
||||||
]
|
|
||||||
withings.get_measurement_in_period.return_value = measurement_groups
|
|
||||||
|
|
||||||
freezer.tick(timedelta(minutes=10))
|
freezer.tick(timedelta(minutes=10))
|
||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
@ -146,17 +133,15 @@ async def test_update_new_goals_creates_new_sensor(
|
|||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test fetching new goals will add a new sensor."""
|
"""Test fetching new goals will add a new sensor."""
|
||||||
goals_json = load_json_object_fixture("withings/goals_1.json")
|
|
||||||
goals = Goals.from_api(goals_json)
|
withings.get_goals.return_value = load_goals_fixture("withings/goals_1.json")
|
||||||
withings.get_goals.return_value = goals
|
|
||||||
await setup_integration(hass, polling_config_entry, False)
|
await setup_integration(hass, polling_config_entry, False)
|
||||||
|
|
||||||
assert hass.states.get("sensor.henk_step_goal") is None
|
assert hass.states.get("sensor.henk_step_goal") is None
|
||||||
assert hass.states.get("sensor.henk_weight_goal") is not None
|
assert hass.states.get("sensor.henk_weight_goal") is not None
|
||||||
|
|
||||||
goals_json = load_json_object_fixture("withings/goals.json")
|
withings.get_goals.return_value = load_goals_fixture("withings/goals.json")
|
||||||
goals = Goals.from_api(goals_json)
|
|
||||||
withings.get_goals.return_value = goals
|
|
||||||
|
|
||||||
freezer.tick(timedelta(hours=1))
|
freezer.tick(timedelta(hours=1))
|
||||||
async_fire_time_changed(hass)
|
async_fire_time_changed(hass)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user