def get_lock_detail(self, access_token, lock_id): response = self._call_api( "get", API_GET_LOCK_URL.format(lock_id=lock_id), access_token=access_token) return LockDetail(response.json())
def get_lock_detail(self, access_token, lock_id): return LockDetail( self._dict_to_api( self._build_get_lock_detail_request(access_token, lock_id)).json())
async def _mock_lock_from_fixture(hass, path): json_dict = await _load_json_fixture(hass, path) return LockDetail(json_dict)
def test_update_lock_with_activity(self): lock = LockDetail( json.loads(load_fixture("get_lock.online_with_doorsense.json"))) self.assertEqual("ABC", lock.device_id) self.assertEqual(LockStatus.LOCKED, lock.lock_status) self.assertEqual(LockDoorStatus.OPEN, lock.door_state) self.assertEqual(dateutil.parser.parse("2017-12-10T04:48:30.272Z"), lock.lock_status_datetime) self.assertEqual(dateutil.parser.parse("2017-12-10T04:48:30.272Z"), lock.door_state_datetime) lock_operation_activity = LockOperationActivity( json.loads(load_fixture("lock_activity.json"))) unlock_operation_activity = LockOperationActivity( json.loads(load_fixture("unlock_activity.json"))) open_operation_activity = DoorOperationActivity( json.loads(load_fixture("door_open_activity.json"))) closed_operation_activity = DoorOperationActivity( json.loads(load_fixture("door_closed_activity.json"))) closed_operation_wrong_deviceid_activity = DoorOperationActivity( json.loads( load_fixture("door_closed_activity_wrong_deviceid.json"))) closed_operation_wrong_houseid_activity = DoorOperationActivity( json.loads( load_fixture("door_closed_activity_wrong_houseid.json"))) self.assertTrue( update_lock_detail_from_activity(lock, unlock_operation_activity)) self.assertEqual(LockStatus.UNLOCKED, lock.lock_status) self.assertEqual( as_utc_from_local( datetime.datetime.fromtimestamp(1582007217000 / 1000)), lock.lock_status_datetime, ) self.assertTrue( update_lock_detail_from_activity(lock, lock_operation_activity)) self.assertEqual(LockStatus.LOCKED, lock.lock_status) self.assertEqual( as_utc_from_local( datetime.datetime.fromtimestamp(1582007218000 / 1000)), lock.lock_status_datetime, ) # returns false we send an older activity self.assertFalse( update_lock_detail_from_activity(lock, unlock_operation_activity)) self.assertTrue( update_lock_detail_from_activity(lock, closed_operation_activity)) self.assertEqual(LockDoorStatus.CLOSED, lock.door_state) self.assertEqual( as_utc_from_local( datetime.datetime.fromtimestamp(1582007217000 / 1000)), lock.door_state_datetime, ) self.assertTrue( update_lock_detail_from_activity(lock, open_operation_activity)) self.assertEqual(LockDoorStatus.OPEN, lock.door_state) self.assertEqual( as_utc_from_local( datetime.datetime.fromtimestamp(1582007219000 / 1000)), lock.door_state_datetime, ) # returns false we send an older activity self.assertFalse( update_lock_detail_from_activity(lock, closed_operation_activity)) with self.assertRaises(ValueError): update_lock_detail_from_activity( lock, closed_operation_wrong_deviceid_activity) # We do not always have the houseid so we do not throw # as long as the deviceid is correct since they are unique self.assertFalse( update_lock_detail_from_activity( lock, closed_operation_wrong_houseid_activity)) self.assertEqual(LockDoorStatus.OPEN, lock.door_state) self.assertEqual(LockStatus.LOCKED, lock.lock_status) activities = _convert_lock_result_to_activities( json.loads(load_fixture("unlock.json"))) for activity in activities: self.assertTrue(update_lock_detail_from_activity(lock, activity)) self.assertEqual(LockDoorStatus.CLOSED, lock.door_state) self.assertEqual(LockStatus.UNLOCKED, lock.lock_status)
async def async_get_lock_detail(self, access_token, lock_id): response = await self._async_dict_to_api( self._build_get_lock_detail_request(access_token, lock_id)) return LockDetail(await response.json())
def test_update_lock_details_from_pubnub_message(self): lock = LockDetail( json.loads(load_fixture("get_lock.online_with_doorsense.json"))) self.assertEqual("ABC", lock.device_id) self.assertEqual(LockStatus.LOCKED, lock.lock_status) self.assertEqual(LockDoorStatus.OPEN, lock.door_state) self.assertEqual(dateutil.parser.parse("2017-12-10T04:48:30.272Z"), lock.lock_status_datetime) self.assertEqual(dateutil.parser.parse("2017-12-10T04:48:30.272Z"), lock.door_state_datetime) self.assertTrue( update_lock_details_from_pubnub_message( lock, dateutil.parser.parse("2017-12-10T05:48:30.272Z"), {LOCK_STATUS_KEY: "kAugLockState_Unlocking"}, )) self.assertEqual(LockStatus.UNLOCKED, lock.lock_status) self.assertTrue( update_lock_details_from_pubnub_message( lock, dateutil.parser.parse("2017-12-10T05:48:30.272Z"), {DOOR_STATE_KEY: "closed"}, )) self.assertEqual(LockDoorStatus.CLOSED, lock.door_state) self.assertFalse( update_lock_details_from_pubnub_message( lock, dateutil.parser.parse("2017-12-10T02:48:30.272Z"), {DOOR_STATE_KEY: "open"}, )) self.assertEqual(LockDoorStatus.CLOSED, lock.door_state) self.assertTrue( update_lock_details_from_pubnub_message( lock, dateutil.parser.parse("2017-12-10T10:48:30.272Z"), { DOOR_STATE_KEY: "open", LOCK_STATUS_KEY: "kAugLockState_Locking" }, )) self.assertEqual(LockStatus.LOCKED, lock.lock_status) self.assertEqual(LockDoorStatus.OPEN, lock.door_state) self.assertFalse( update_lock_details_from_pubnub_message( lock, dateutil.parser.parse("2017-12-10T11:48:30.272Z"), { LOCK_STATUS_KEY: "DoorStateChanged", "lockID": "xxx", "timeStamp": 1615087688187, }, )) self.assertFalse( update_lock_details_from_pubnub_message( lock, dateutil.parser.parse("2017-12-10T12:48:30.272Z"), { DOOR_STATE_KEY: "init", "lockID": "xxx", "timeStamp": 1615087688187, }, ))
def _mock_doorsense_missing_august_lock_detail(lockid): doorsense_lock_detail_data = _mock_august_lock_data(lockid=lockid) del doorsense_lock_detail_data["LockStatus"]["doorState"] return LockDetail(doorsense_lock_detail_data)
def _mock_doorsense_enabled_august_lock_detail(lockid): doorsense_lock_detail_data = _mock_august_lock_data(lockid=lockid) return LockDetail(doorsense_lock_detail_data)
def _mock_inoperative_august_lock_detail(lockid): inoperative_lock_detail_data = _mock_august_lock_data(lockid=lockid) del inoperative_lock_detail_data["Bridge"] return LockDetail(inoperative_lock_detail_data)
def _mock_operative_august_lock_detail(lockid): operative_lock_detail_data = _mock_august_lock_data(lockid=lockid) return LockDetail(operative_lock_detail_data)