示例#1
0
    def test_get_device(self, m):
        """Check that device retrieval works."""
        dev1_devid = 'dev1'
        dev1 = DEVICE.get_response_ok(name='Dev1', dev_id=dev1_devid)
        dev1_info = DEVICE_INFO.get_response_ok(dev_id=dev1_devid)
        dev1_info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$',
                                    dev1_devid)
        dev1_settings = DEVICE_SETTINGS.get_response_ok()
        dev1_settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                        dev1_devid)
        dev1_activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                          '$DEVID$', dev1_devid)

        dev2_devid = 'dev2'
        dev2 = DEVICE.get_response_ok(name='Dev2', dev_id=dev2_devid)
        dev2_info = DEVICE_INFO.get_response_ok(dev_id=dev1_devid)
        dev2_info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$',
                                    dev2_devid)
        dev2_settings = DEVICE_SETTINGS.get_response_ok()
        dev2_settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                        dev2_devid)
        dev2_activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                          '$DEVID$', dev2_devid)

        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())
        m.get(CONST.DEVICES_URL, text='[' + dev1 + ',' + dev2 + ']')
        m.get(dev1_info_url, text=dev1_info)
        m.get(dev2_info_url, text=dev2_info)
        m.get(dev1_settings_url, text=dev1_settings)
        m.get(dev2_settings_url, text=dev2_settings)
        m.get(dev1_activities_url,
              text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)
        m.get(dev2_activities_url,
              text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)

        # Reset
        self.skybell.logout()

        # Get and test all devices
        # pylint: disable=W0212
        dev1_dev = self.skybell.get_device(dev1_devid)
        dev2_dev = self.skybell.get_device(dev2_devid)

        self.assertIsNotNone(dev1_dev)
        self.assertIsNotNone(dev2_dev)
        self.assertEqual(json.loads(dev1), dev1_dev._device_json)
        self.assertEqual(json.loads(dev2), dev2_dev._device_json)
        self.assertEqual(json.loads(dev1_info), dev1_dev._info_json)
        self.assertEqual(json.loads(dev2_info), dev2_dev._info_json)
        self.assertEqual(json.loads(dev1_settings), dev1_dev._settings_json)
        self.assertEqual(json.loads(dev2_settings), dev2_dev._settings_json)
示例#2
0
    def tests_settings_failed(self, m):
        """Check that the Skybell device settings fail without changing."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'
        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok(do_not_disturb=True)
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                   DEVICE.DEVID)
        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL, '$DEVID$',
                                     DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)
        m.patch(settings_url,
                text=DEVICE_SETTINGS.PATHCH_RESPONSE_BAD_REQUEST,
                status_code=400)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)
        self.assertEqual(device.do_not_disturb, True)

        # Test setting to false then validate still True
        device.do_not_disturb = False
        self.assertEqual(device.do_not_disturb, True)
示例#3
0
    def tests_settings_change(self, m):
        """Check that the Skybell device changes data."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'
        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                   DEVICE.DEVID)
        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL, '$DEVID$',
                                     DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)
        m.patch(settings_url, text=DEVICE_SETTINGS.PATCH_RESPONSE_OK)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        # pylint: disable=W0212
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)

        # Change and test new values
        for value in CONST.SETTINGS_DO_NOT_DISTURB_VALUES:
            device.do_not_disturb = value
            self.assertEqual(device.do_not_disturb,
                             distutils.util.strtobool(value))

        for value in CONST.SETTINGS_OUTDOOR_CHIME_VALUES:
            device.outdoor_chime_level = value
            self.assertEqual(device.outdoor_chime_level, value)

        for value in [True, False]:
            device.motion_sensor = value
            self.assertEqual(device.motion_sensor, value)

        for value in CONST.SETTINGS_MOTION_THRESHOLD_VALUES:
            device.motion_threshold = value
            self.assertEqual(device.motion_threshold, value)

        for value in CONST.SETTINGS_VIDEO_PROFILE_VALUES:
            device.video_profile = value
            self.assertEqual(device.video_profile, value)

        for value in CONST.SETTINGS_LED_VALUES:
            rgb = (value, value, value)
            device.led_rgb = rgb
            self.assertEqual(device.led_rgb, rgb)

        for value in CONST.SETTINGS_LED_INTENSITY_VALUES:
            device.led_intensity = value
            self.assertEqual(device.led_intensity, value)
示例#4
0
    def tests_activities(self, m):
        """Check that the Skybell device activities work."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'

        avatar_text = DEVICE_AVATAR.get_response_ok()
        avatar_url = str.replace(CONST.DEVICE_AVATAR_URL,
                                 '$DEVID$', DEVICE.DEVID)

        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL,
                                   '$DEVID$', DEVICE.DEVID)

        activities_text = '[' + \
                          DEVICE_ACTIVITIES.get_response_ok(
                              dev_id=DEVICE.DEVID,
                              event=CONST.EVENT_BUTTON) + ',' + \
                          DEVICE_ACTIVITIES.get_response_ok(
                              dev_id=DEVICE.DEVID,
                              event=CONST.EVENT_MOTION) + ',' + \
                          DEVICE_ACTIVITIES.get_response_ok(
                              dev_id=DEVICE.DEVID,
                              event=CONST.EVENT_ON_DEMAND) + ']'
        activities_json = json.loads(activities_text)

        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                     '$DEVID$', DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(avatar_url, text=avatar_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=activities_text)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)
        # pylint: disable=W0212
        self.assertEqual(device._activities, activities_json)

        # Get all activities from device
        activities = device.activities(limit=100)
        self.assertIsNotNone(activities)
        self.assertEqual(len(activities), 3)

        # Get only button activities
        activities = device.activities(event=CONST.EVENT_BUTTON)
        self.assertIsNotNone(activities)
        self.assertEqual(len(activities), 1)
        self.assertEqual(activities[0][CONST.EVENT], CONST.EVENT_BUTTON)
示例#5
0
    def tests_latest_event(self, m):
        """Check that the latest event is always obtained."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'

        avatar_text = DEVICE_AVATAR.get_response_ok()
        avatar_url = str.replace(CONST.DEVICE_AVATAR_URL,
                                 '$DEVID$', DEVICE.DEVID)

        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL,
                                   '$DEVID$', DEVICE.DEVID)

        activity_1 = DEVICE_ACTIVITIES.get_response_ok(
            dev_id=DEVICE.DEVID,
            event=CONST.EVENT_BUTTON,
            state='alpha',
            created_at=datetime.datetime(2017, 1, 1, 0, 0, 0))

        activity_2 = DEVICE_ACTIVITIES.get_response_ok(
            dev_id=DEVICE.DEVID,
            event=CONST.EVENT_BUTTON,
            state='beta',
            created_at=datetime.datetime(2017, 1, 1, 0, 0, 1))

        activities_text = '[' + activity_1 + ',' + activity_2 + ']'

        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                     '$DEVID$', DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(avatar_url, text=avatar_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=activities_text)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)

        # Get latest button event
        event = device.latest(CONST.EVENT_BUTTON)

        # Test
        self.assertIsNotNone(event)
        self.assertEqual(event.get(CONST.STATE), 'beta')
示例#6
0
    def tests_bad_activities(self, m):
        """Check that device activities recovers from bad data."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'

        avatar_text = DEVICE_AVATAR.get_response_ok()
        avatar_url = str.replace(CONST.DEVICE_AVATAR_URL,
                                 '$DEVID$', DEVICE.DEVID)

        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL,
                                   '$DEVID$', DEVICE.DEVID)

        activities_text = DEVICE_ACTIVITIES.get_response_ok(
            dev_id=DEVICE.DEVID,
            event=CONST.EVENT_BUTTON)

        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                     '$DEVID$', DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(avatar_url, text=avatar_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=activities_text)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)

        # Get all activities from device
        activities = device.activities(limit=100)
        self.assertIsNotNone(activities)
        self.assertEqual(len(activities), 1)

        # Force our device variable empty
        # pylint: disable=W0212
        device._activities = None

        # Get all activities from device
        activities = device.activities(limit=100)
        self.assertIsNotNone(activities)
        self.assertEqual(len(activities), 0)
示例#7
0
    def tests_newest_event_cached(self, m):
        """Check that the a newer cached event is kept over an older event."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device = DEVICE.get_response_ok()
        device_text = '[' + device + ']'
        device_url = str.replace(CONST.DEVICE_URL, '$DEVID$', DEVICE.DEVID)

        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                   DEVICE.DEVID)

        activity_1 = DEVICE_ACTIVITIES.get_response_ok(
            dev_id=DEVICE.DEVID,
            event=CONST.EVENT_BUTTON,
            state='alpha',
            created_at=datetime.datetime(2017, 1, 1, 0, 0, 0))

        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL, '$DEVID$',
                                     DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(device_url, text=device)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text='[' + activity_1 + ']')

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)

        # Get latest button event
        event = device.latest(CONST.EVENT_BUTTON)

        # Test
        self.assertIsNotNone(event)
        self.assertEqual(event.get(CONST.STATE), 'alpha')

        activity_2 = DEVICE_ACTIVITIES.get_response_ok(
            dev_id=DEVICE.DEVID,
            event=CONST.EVENT_BUTTON,
            state='beta',
            created_at=datetime.datetime(2014, 1, 1, 0, 0, 1))

        m.get(activities_url, text='[' + activity_2 + ']')

        # Refresh device
        device.refresh()

        # Get latest button event
        event = device.latest(CONST.EVENT_BUTTON)

        # Test
        self.assertIsNotNone(event)
        self.assertEqual(event.get(CONST.STATE), 'alpha')
示例#8
0
    def tests_device_init(self, m):
        """Check that the Skybell device init's properly."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'
        device_json = json.loads(device_text)

        info_text = DEVICE_INFO.get_response_ok()
        info_json = json.loads(info_text)
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_json = json.loads(settings_text)
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                   DEVICE.DEVID)

        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL, '$DEVID$',
                                     DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)

        # Check device states match
        self.assertIsNotNone(device)
        # pylint: disable=W0212

        # Test Device Details
        self.assertEqual(device.name, device_json[0][CONST.NAME])
        self.assertEqual(device.type, device_json[0][CONST.TYPE])
        self.assertEqual(device.status, device_json[0][CONST.STATUS])
        self.assertEqual(device.device_id, device_json[0][CONST.ID])
        self.assertTrue(device.is_up)
        self.assertEqual(device.location[0],
                         device_json[0][CONST.LOCATION][CONST.LOCATION_LAT])
        self.assertEqual(device.location[1],
                         device_json[0][CONST.LOCATION][CONST.LOCATION_LNG])
        self.assertEqual(device.image,
                         device_json[0][CONST.AVATAR][CONST.AVATAR_URL])

        # Test Info Details
        self.assertEqual(device.wifi_status,
                         info_json[CONST.STATUS][CONST.WIFI_LINK])
        self.assertEqual(device.wifi_ssid, info_json[CONST.WIFI_SSID])
        self.assertEqual(device.last_check_in, info_json[CONST.CHECK_IN])

        # Test Settings Details
        self.assertEqual(device.do_not_disturb,
                         settings_json[CONST.SETTINGS_DO_NOT_DISTURB])
        self.assertEqual(device.outdoor_chime_level,
                         settings_json[CONST.SETTINGS_OUTDOOR_CHIME])
        self.assertEqual(device.motion_sensor,
                         (settings_json[CONST.SETTINGS_MOTION_POLICY]
                          == CONST.SETTINGS_MOTION_POLICY_ON))
        self.assertEqual(device.motion_threshold,
                         settings_json[CONST.SETTINGS_MOTION_THRESHOLD])
        self.assertEqual(device.video_profile,
                         settings_json[CONST.SETTINGS_VIDEO_PROFILE])
        self.assertEqual(device.led_rgb, (settings_json[CONST.SETTINGS_LED_R],
                                          settings_json[CONST.SETTINGS_LED_G],
                                          settings_json[CONST.SETTINGS_LED_B]))
        self.assertEqual(device.led_intensity,
                         settings_json[CONST.SETTINGS_LED_INTENSITY])
        # Test Desc
        self.assertIsNotNone(device.desc)
示例#9
0
    def tests_settings_validation(self, m):
        """Check that the Skybell device settings validate."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_text = '[' + DEVICE.get_response_ok() + ']'
        info_text = DEVICE_INFO.get_response_ok()
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        settings_text = DEVICE_SETTINGS.get_response_ok()
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                   DEVICE.DEVID)
        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL, '$DEVID$',
                                     DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)
        m.patch(settings_url, text=DEVICE_SETTINGS.PATCH_RESPONSE_OK)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)
        self.assertIsNotNone(device)

        # Change and test new values
        with self.assertRaises(skybellpy.SkybellException):
            device.do_not_disturb = "monkey"

        with self.assertRaises(skybellpy.SkybellException):
            device.outdoor_chime_level = "bamboo"

        with self.assertRaises(skybellpy.SkybellException):
            device.motion_sensor = "dumbo"

        with self.assertRaises(skybellpy.SkybellException):
            device.motion_threshold = "lists"

        with self.assertRaises(skybellpy.SkybellException):
            device.video_profile = "alpha"

        with self.assertRaises(skybellpy.SkybellException):
            device.led_rgb = "grapes"

        with self.assertRaises(skybellpy.SkybellException):
            device.led_rgb = ("oranges", "apples", "peaches")

        with self.assertRaises(skybellpy.SkybellException):
            device.led_rgb = (500, -600, 70.1)

        with self.assertRaises(skybellpy.SkybellException):
            device.led_rgb = (-1, 266, 11)

        with self.assertRaises(skybellpy.SkybellException):
            device.led_intensity = "purple"

        with self.assertRaises(skybellpy.SkybellException):
            device.led_intensity = -500

        with self.assertRaises(skybellpy.SkybellException):
            device.led_intensity = 70.1

        with self.assertRaises(skybellpy.SkybellException):
            # pylint: disable=W0212
            device._set_setting({"lol": "kik"})

        with self.assertRaises(skybellpy.SkybellException):
            # pylint: disable=W0212
            device._set_setting({CONST.SETTINGS_MOTION_POLICY: "kik"})
示例#10
0
    def tests_device_refresh(self, m):
        """Check that the Skybell device refreshes data."""
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())

        # Set up device
        device_name = 'Shut The Back Door'
        device_text = '[' + DEVICE.get_response_ok(name=device_name) + ']'

        device_ssid = 'Super SSID64'
        device_wifi_status = 'good'
        info_text = DEVICE_INFO.get_response_ok(ssid=device_ssid,
                                                wifi_status=device_wifi_status)
        info_url = str.replace(CONST.DEVICE_INFO_URL, '$DEVID$', DEVICE.DEVID)

        do_not_disturb = False
        outdoor_chime = CONST.SETTINGS_OUTDOOR_CHIME_HIGH
        motion_policy = CONST.SETTINGS_MOTION_POLICY_ON
        motion_threshold = CONST.SETTINGS_MOTION_THRESHOLD_HIGH
        video_profile = CONST.SETTINGS_VIDEO_PROFILE_720P_BETTER
        led_rgb = (255, 255, 255)
        led_intensity = 100
        settings_text = DEVICE_SETTINGS.get_response_ok(
            do_not_disturb, outdoor_chime, motion_policy, motion_threshold,
            video_profile, led_rgb, led_intensity)
        settings_url = str.replace(CONST.DEVICE_SETTINGS_URL, '$DEVID$',
                                   DEVICE.DEVID)
        activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL, '$DEVID$',
                                     DEVICE.DEVID)

        m.get(CONST.DEVICES_URL, text=device_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)
        m.get(activities_url, text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)

        # Logout to reset everything
        self.skybell.logout()

        # Get our specific device
        device = self.skybell.get_device(DEVICE.DEVID)

        # Check device states match
        self.assertIsNotNone(device)
        # pylint: disable=W0212
        self.assertEqual(device.name, device_name)
        self.assertEqual(device.wifi_status, device_wifi_status)
        self.assertEqual(device.wifi_ssid, device_ssid)
        self.assertEqual(device.do_not_disturb, do_not_disturb)
        self.assertEqual(device.outdoor_chime_level, outdoor_chime)
        self.assertTrue(device.outdoor_chime)
        self.assertEqual(device.motion_sensor, True)
        self.assertEqual(device.motion_threshold, motion_threshold)
        self.assertEqual(device.video_profile, video_profile)
        self.assertEqual(device.led_rgb, led_rgb)
        self.assertEqual(device.led_intensity, led_intensity)

        # Change the values
        device_name = 'Shut The Front Door'
        device_text = DEVICE.get_response_ok(name=device_name)
        device_url = str.replace(CONST.DEVICE_URL, '$DEVID$', DEVICE.DEVID)

        device_ssid = 'Gamecube'
        device_wifi_status = 'bad'
        info_text = DEVICE_INFO.get_response_ok(ssid=device_ssid,
                                                wifi_status=device_wifi_status)

        do_not_disturb = True
        outdoor_chime = CONST.SETTINGS_OUTDOOR_CHIME_OFF
        motion_policy = CONST.SETTINGS_MOTION_POLICY_OFF
        motion_threshold = CONST.SETTINGS_MOTION_THRESHOLD_LOW
        video_profile = CONST.SETTINGS_VIDEO_PROFILE_480P
        led_rgb = (128, 128, 128)
        led_intensity = 25
        settings_text = DEVICE_SETTINGS.get_response_ok(
            do_not_disturb, outdoor_chime, motion_policy, motion_threshold,
            video_profile, led_rgb, led_intensity)

        m.get(device_url, text=device_text)
        m.get(info_url, text=info_text)
        m.get(settings_url, text=settings_text)

        # Refresh the device
        device = self.skybell.get_device(DEVICE.DEVID, refresh=True)

        # Check new values
        self.assertEqual(device.name, device_name)
        self.assertEqual(device.wifi_status, device_wifi_status)
        self.assertEqual(device.wifi_ssid, device_ssid)
        self.assertEqual(device.name, device_name)
        self.assertEqual(device.wifi_status, device_wifi_status)
        self.assertEqual(device.wifi_ssid, device_ssid)
        self.assertEqual(device.do_not_disturb, do_not_disturb)
        self.assertEqual(device.outdoor_chime_level, outdoor_chime)
        self.assertFalse(device.outdoor_chime)
        self.assertEqual(device.motion_sensor, False)
        self.assertEqual(device.motion_threshold, motion_threshold)
        self.assertEqual(device.video_profile, video_profile)
        self.assertEqual(device.led_rgb, led_rgb)
        self.assertEqual(device.led_intensity, led_intensity)
示例#11
0
    def test_all_device_refresh(self, m):
        """Check that device refresh works and reuses the same objects."""
        dev1_devid = 'dev1'
        dev1a = DEVICE.get_response_ok(name='Dev1', dev_id=dev1_devid)
        dev1a_avatar = DEVICE_AVATAR.get_response_ok('dev1a')
        dev1a_avatar_url = str.replace(CONST.DEVICE_AVATAR_URL,
                                       '$DEVID$', dev1_devid)
        dev1a_info = DEVICE_INFO.get_response_ok(dev_id=dev1_devid)
        dev1a_info_url = str.replace(CONST.DEVICE_INFO_URL,
                                     '$DEVID$', dev1_devid)
        dev1a_settings = DEVICE_SETTINGS.get_response_ok()
        dev1a_settings_url = str.replace(CONST.DEVICE_SETTINGS_URL,
                                         '$DEVID$', dev1_devid)

        dev1a_activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                           '$DEVID$', dev1_devid)

        dev2_devid = 'dev2'
        dev2a = DEVICE.get_response_ok(name='Dev2', dev_id=dev2_devid)
        dev2a_avatar = DEVICE_AVATAR.get_response_ok('dev2a')
        dev2a_avatar_url = str.replace(CONST.DEVICE_AVATAR_URL,
                                       '$DEVID$', dev2_devid)
        dev2a_info = DEVICE_INFO.get_response_ok(dev_id=dev1_devid)
        dev2a_info_url = str.replace(CONST.DEVICE_INFO_URL,
                                     '$DEVID$', dev2_devid)
        dev2a_settings = DEVICE_SETTINGS.get_response_ok()
        dev2a_settings_url = str.replace(CONST.DEVICE_SETTINGS_URL,
                                         '$DEVID$', dev2_devid)

        dev2a_activities_url = str.replace(CONST.DEVICE_ACTIVITIES_URL,
                                           '$DEVID$', dev2_devid)

        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())
        m.get(CONST.DEVICES_URL, text='[' + dev1a + ',' + dev2a + ']')
        m.get(dev1a_avatar_url, text=dev1a_avatar)
        m.get(dev2a_avatar_url, text=dev2a_avatar)
        m.get(dev1a_info_url, text=dev1a_info)
        m.get(dev2a_info_url, text=dev2a_info)
        m.get(dev1a_settings_url, text=dev1a_settings)
        m.get(dev2a_settings_url, text=dev2a_settings)
        m.get(dev1a_activities_url,
              text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)
        m.get(dev2a_activities_url,
              text=DEVICE_ACTIVITIES.EMPTY_ACTIVITIES_RESPONSE)

        # Reset
        self.skybell.logout()

        # Get all devices
        self.skybell.get_devices()

        # Get and check devices
        # pylint: disable=W0212
        dev1a_dev = self.skybell.get_device(dev1_devid)
        self.assertEqual(json.loads(dev1a)['id'], dev1a_dev.device_id)

        dev2a_dev = self.skybell.get_device(dev2_devid)
        self.assertEqual(json.loads(dev2a)['id'], dev2a_dev.device_id)

        # Change device states
        dev1b = DEVICE.get_response_ok(name='Dev1_new', dev_id=dev1_devid)
        dev2b = DEVICE.get_response_ok(name='Dev2_new', dev_id=dev2_devid)

        m.get(CONST.DEVICES_URL, text='[' + dev1b + ',' + dev2b + ']')

        # Refresh all devices
        self.skybell.get_devices(refresh=True)

        # Get and check devices again, ensuring they are the same object
        # Future note: "if a is b" tests that the object is the same
        # Asserting dev1a_dev is dev1b_dev tests if they are the same object
        dev1b_dev = self.skybell.get_device(dev1_devid)
        self.assertEqual(json.loads(dev1b)['id'], dev1b_dev.device_id)
        self.assertIs(dev1a_dev, dev1b_dev)

        dev2b_dev = self.skybell.get_device(dev2_devid)
        self.assertEqual(json.loads(dev2b)['id'], dev2b_dev.device_id)
        self.assertIs(dev2a_dev, dev2b_dev)