From a7cf76491b5a4409c9dae9d082f12a8e9f50bcb4 Mon Sep 17 00:00:00 2001 From: Robert Van Gorkom Date: Thu, 2 Jul 2020 13:09:49 -0700 Subject: [PATCH] Fix withings bug that grabbed oldest value instead of the newest (#37362) Co-authored-by: Paulus Schoutsen --- homeassistant/components/withings/common.py | 9 +++- tests/components/withings/test_sensor.py | 59 +++++++++++++++++++-- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/withings/common.py b/homeassistant/components/withings/common.py index b7c3cec6d9b..5d8d5799fc1 100644 --- a/homeassistant/components/withings/common.py +++ b/homeassistant/components/withings/common.py @@ -770,8 +770,13 @@ class DataManager: response = await self._hass.async_add_executor_job(self._api.measure_get_meas) - groups = query_measure_groups( - response, MeasureTypes.ANY, MeasureGroupAttribs.UNAMBIGUOUS + # Sort from oldest to newest. + groups = sorted( + query_measure_groups( + response, MeasureTypes.ANY, MeasureGroupAttribs.UNAMBIGUOUS + ), + key=lambda group: group.created.datetime, + reverse=False, ) return { diff --git a/tests/components/withings/test_sensor.py b/tests/components/withings/test_sensor.py index abfc4758251..3370c23e3d8 100644 --- a/tests/components/withings/test_sensor.py +++ b/tests/components/withings/test_sensor.py @@ -1,5 +1,4 @@ """Tests for the Withings component.""" -import time from typing import Any from unittest.mock import patch @@ -40,8 +39,8 @@ PERSON0 = new_profile_config( MeasureGetMeasGroup( attrib=MeasureGetMeasGroupAttrib.DEVICE_ENTRY_FOR_USER, category=MeasureGetMeasGroupCategory.REAL, - created=time.time(), - date=time.time(), + created=arrow.utcnow().shift(hours=-1), + date=arrow.utcnow().shift(hours=-1), deviceid="DEV_ID", grpid=1, measures=( @@ -87,11 +86,61 @@ PERSON0 = new_profile_config( ), ), ), + MeasureGetMeasGroup( + attrib=MeasureGetMeasGroupAttrib.DEVICE_ENTRY_FOR_USER, + category=MeasureGetMeasGroupCategory.REAL, + created=arrow.utcnow().shift(hours=-2), + date=arrow.utcnow().shift(hours=-2), + deviceid="DEV_ID", + grpid=1, + measures=( + MeasureGetMeasMeasure(type=MeasureType.WEIGHT, unit=0, value=71), + MeasureGetMeasMeasure( + type=MeasureType.FAT_MASS_WEIGHT, unit=0, value=51 + ), + MeasureGetMeasMeasure( + type=MeasureType.FAT_FREE_MASS, unit=0, value=61 + ), + MeasureGetMeasMeasure( + type=MeasureType.MUSCLE_MASS, unit=0, value=51 + ), + MeasureGetMeasMeasure(type=MeasureType.BONE_MASS, unit=0, value=11), + MeasureGetMeasMeasure(type=MeasureType.HEIGHT, unit=0, value=21), + MeasureGetMeasMeasure( + type=MeasureType.TEMPERATURE, unit=0, value=41 + ), + MeasureGetMeasMeasure( + type=MeasureType.BODY_TEMPERATURE, unit=0, value=41 + ), + MeasureGetMeasMeasure( + type=MeasureType.SKIN_TEMPERATURE, unit=0, value=21 + ), + MeasureGetMeasMeasure( + type=MeasureType.FAT_RATIO, unit=-3, value=71 + ), + MeasureGetMeasMeasure( + type=MeasureType.DIASTOLIC_BLOOD_PRESSURE, unit=0, value=71 + ), + MeasureGetMeasMeasure( + type=MeasureType.SYSTOLIC_BLOOD_PRESSURE, unit=0, value=101 + ), + MeasureGetMeasMeasure( + type=MeasureType.HEART_RATE, unit=0, value=61 + ), + MeasureGetMeasMeasure(type=MeasureType.SP02, unit=-2, value=96), + MeasureGetMeasMeasure( + type=MeasureType.HYDRATION, unit=-2, value=96 + ), + MeasureGetMeasMeasure( + type=MeasureType.PULSE_WAVE_VELOCITY, unit=0, value=101 + ), + ), + ), MeasureGetMeasGroup( attrib=MeasureGetMeasGroupAttrib.DEVICE_ENTRY_FOR_USER_AMBIGUOUS, category=MeasureGetMeasGroupCategory.REAL, - created=time.time(), - date=time.time(), + created=arrow.utcnow(), + date=arrow.utcnow(), deviceid="DEV_ID", grpid=1, measures=(