Esempio n. 1
0
    def test_shared_doorbell_attributes(self, mock):
        mock.post('https://oauth.ring.com/oauth/token',
                  text=load_fixture('ring_oauth.json'))
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/history',
                 text=load_fixture('ring_doorbots.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987653/health',
                 text=load_fixture('ring_doorboot_health_attrs_id987653.json'))

        data = self.ring_persistent
        for dev in data.doorbells:
            if dev.shared:
                self.assertEqual(987653, dev.account_id)
                self.assertEqual(51, dev.battery_life)
                self.assertEqual('123 Second St', dev.address)
                self.assertEqual('lpd_v1', dev.kind)
                self.assertEqual('Doorbell Pro', dev.model)
                self.assertEqual(False, dev.has_capability('battery'))
                self.assertEqual(True, dev.has_capability('volume'))
                self.assertEqual(-70.12345, dev.longitude)
                self.assertEqual('America/New_York', dev.timezone)
                self.assertEqual(5, dev.volume)
                self.assertEqual('Digital', dev.existing_doorbell_type)
Esempio n. 2
0
    def test_chime_attributes(self, mock):
        """Test the Ring Chime class and methods."""
        mock.post('https://oauth.ring.com/oauth/token',
                  text=load_fixture('ring_oauth.json'))
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/chimes/999999/health',
                 text=load_fixture('ring_chime_health_attrs.json'))

        data = self.ring
        dev = data.chimes[0]

        self.assertEqual('123 Main St', dev.address)
        self.assertNotEqual(99999, dev.account_id)
        self.assertEqual('abcdef123', dev.id)
        self.assertEqual('chime', dev.kind)
        self.assertEqual('Chime', dev.model)
        self.assertEqual(False, dev.has_capability('battery'))
        self.assertEqual(True, dev.has_capability('volume'))
        self.assertIsNotNone(dev.latitude)
        self.assertEqual('America/New_York', dev.timezone)
        self.assertEqual(2, dev.volume)
        self.assertEqual('ring_mock_wifi', dev.wifi_name)
        self.assertEqual('good', dev.wifi_signal_category)
        self.assertNotEqual(100, dev.wifi_signal_strength)
Esempio n. 3
0
    def test_stickup_cam_controls(self, mock):
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))
        mock.put(requests_mock.ANY, text='ok')

        data = self.ring_persistent
        for dev in data.stickup_cams:
            dev.lights = 'off'
            dev.lights = 'on'
            dev.siren = 0
            dev.siren = 30

            history = list(
                filter(lambda x: x.method == 'PUT', mock.request_history))
            self.assertEqual(
                '/clients_api/doorbots/987652/floodlight_light_off',
                history[0].path)
            self.assertEqual(
                '/clients_api/doorbots/987652/floodlight_light_on',
                history[1].path)
            self.assertEqual('/clients_api/doorbots/987652/siren_off',
                             history[2].path)
            self.assertNotIn('duration', history[2].qs)
            self.assertEqual('/clients_api/doorbots/987652/siren_on',
                             history[3].path)
            self.assertEqual('30', history[3].qs['duration'][0])
Esempio n. 4
0
    def test_security_system(self, mock):
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/chimes/999999/health',
                 text=load_fixture('ring_chime_health_attrs.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987653/health',
                 text=load_fixture('ring_doorboot_health_attrs_id987653.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))
        mock.post(
            'https://app.ring.com/api/v1/rs/connections',
            text=
            '{"server": "tmp.prd.rings.solutions", "authCode": "tmp", "onBattery": false}'
        )

        # Run this for python versions under 3.4
        current_version = LooseVersion(
            '%s.%s.%s' % (sys.version_info.major, sys.version_info.minor,
                          sys.version_info.micro))
        compared_version = LooseVersion('3.4.0')
        if current_version < compared_version:
            with pytest.raises(ImportError) as excinfo:
                security_system = self.ring.security_system
            assert 'Must use python version' in str(excinfo.value)
        else:
            security_system = self.ring.security_system
Esempio n. 5
0
def dynamo():
    with mock.patch('boto3.client'):
        dynamo_client = Dynamo()
    dynamo_client._handler.get_item.return_value = load_fixture(
        'dynamodb_get_item_response.json')
    dynamo_client._handler.set_item.return_value = load_fixture(
        'dynamodb_put_item_response.json')
    return dynamo_client
Esempio n. 6
0
def mocked_requests_get(*args, **kwargs):
    if args[0] == FETCH_DEVICES_URL:
        return MockResponse(load_fixture('fetch_devices.json'), 200)
    elif args[0] == FETCH_GEOFENCES_URL:
        return MockResponse(load_fixture('fetch_geofences.json'), 200)
    elif args[0] == CUR_SETTINGS_URL:
        return MockResponse(load_fixture('cur_settings.json'), 200)

    return MockResponse(None, 404)
Esempio n. 7
0
def mocked_requests_post_bad(*args, **kwargs):
    if args[0] == AUTH_LOGIN_URL:
        return MockResponse(load_fixture('auth_login_denied.json'), 401)
    elif args[0] == SEND_URL:
        return MockResponse(load_fixture('error.json'), 500)
    elif args[0] == STATUS_URL:
        return MockResponse(load_fixture('bad_temp_status.json'), 200)

    return MockResponse(None, 404)
Esempio n. 8
0
def mocked_requests_post(*args, **kwargs):
    if args[0] == AUTH_LOGIN_URL:
        return MockResponse(load_fixture('auth_login.json'), 200)
    elif args[0] == STATUS_URL:
        return MockResponse(load_fixture('status.json'), 200)
    elif args[0] == SEND_URL:
        return MockResponse(load_fixture('send.json'), 200)

    return MockResponse(None, 404)
Esempio n. 9
0
 def test_sanity_check(self, mock_post):
     melissa = Melissa(username="******", password="******")
     melissa._latest_temp = 28.9
     melissa._latest_status['12345678'] = json.loads(
         load_fixture('status.json'))['provider']
     data = json.loads(load_fixture('bad_temp_status.json'))['provider']
     device = '12345678'
     self.assertFalse(melissa.sanity_check(data, device))
     data = json.loads(load_fixture('bad_hum_status.json'))['provider']
     self.assertFalse(melissa.sanity_check(data, device))
Esempio n. 10
0
    def test_stickup_cam_attributes(self, mock):
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))

        data = self.ring_persistent
        for dev in data.stickup_cams:
            self.assertEqual('off', dev.lights)
            self.assertEqual(0, dev.siren)
Esempio n. 11
0
    def setUp(self, mock):
        """Setup unit test and load mock."""
        from ring_doorbell import Ring
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.post('https://api.ring.com/clients_api/session',
                  text=load_fixture('ring_session.json'))
        mock.put('https://api.ring.com/clients_api/device',
                 text=load_fixture('ring_devices.json'))

        self.ring = Ring(USERNAME, PASSWORD, cache_file=CACHE)
        self.ring_persistent = \
            Ring(USERNAME, PASSWORD, cache_file=CACHE, persist_token=True)

        self.assertTrue(hasattr(self.ring, "update"))
Esempio n. 12
0
def mock_ring_requests():
    with requests_mock.Mocker() as mock:
        mock.post("https://oauth.ring.com/oauth/token",
                  text=load_fixture("ring_oauth.json"))
        mock.post(
            "https://api.ring.com/clients_api/session",
            text=load_fixture("ring_session.json"),
        )
        mock.get(
            "https://api.ring.com/clients_api/ring_devices",
            text=load_fixture("ring_devices.json"),
        )
        mock.get(
            "https://api.ring.com/clients_api/chimes/999999/health",
            text=load_fixture("ring_chime_health_attrs.json"),
        )
        mock.get(
            "https://api.ring.com/clients_api/doorbots/987652/health",
            text=load_fixture("ring_doorboot_health_attrs.json"),
        )
        mock.get(
            "https://api.ring.com/clients_api/doorbots/987652/history",
            text=load_fixture("ring_doorbots.json"),
        )
        mock.get(
            "https://api.ring.com/clients_api/dings/active",
            text=load_fixture("ring_ding_active.json"),
        )
        mock.put(
            "https://api.ring.com/clients_api/doorbots/987652/floodlight_light_off",
            text="ok",
        )
        mock.put(
            "https://api.ring.com/clients_api/doorbots/987652/floodlight_light_on",
            text="ok",
        )
        mock.put("https://api.ring.com/clients_api/doorbots/987652/siren_on",
                 text="ok")
        mock.put("https://api.ring.com/clients_api/doorbots/987652/siren_off",
                 text="ok")
        mock.get(
            "https://api.ring.com/groups/v1/locations/mock-location-id/groups",
            text=load_fixture("ring_groups.json"),
        )
        mock.get(
            "https://api.ring.com/groups/v1/locations/mock-location-id/groups/mock-group-id/devices",
            text=load_fixture("ring_group_devices.json"),
        )
        mock.post(
            "https://api.ring.com/groups/v1/locations/mock-location-id/groups/mock-group-id/devices",
            text="ok",
        )
        yield mock
Esempio n. 13
0
    def test_empty_report(self):
        # Have the dependencies return an empty report
        # (this is the default)

        # Verify that we got the expected string
        expected = load_fixture("html_report_empty.html")
        self.assert_report(expected)
Esempio n. 14
0
    def test_successful_query_without_initial_token(self, mock):
        """Test automatic authentication on query without initial token"""
        mock.post('https://api.carson.live/api/v1.4.3/auth/login/',
                  text=load_fixture('carson.live', 'carson_login.json'))
        query_url = 'https://api.carson.live/api/v1.4.3/me/'
        mock.get(query_url, text=load_fixture('carson.live', 'carson_me.json'))

        auth = CarsonAuth(USERNAME, PASSWORD)

        auth.authenticated_query(query_url)

        # Token unchanged
        self.assertEqual(FIXTURE_TOKEN, auth.token)
        self.assertEqual(2, mock.call_count)
        self.assertEqual('JWT {}'.format(FIXTURE_TOKEN),
                         mock.last_request.headers.get('Authorization'))
Esempio n. 15
0
    def test_stickup_cam_attributes(self, mock):
        mock.post('https://oauth.ring.com/oauth/token',
                  text=load_fixture('ring_oauth.json'))
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))

        data = self.ring_persistent
        for dev in data.stickup_cams:
            self.assertEqual('hp_cam_v1', dev.kind)
            self.assertEqual('Floodlight Cam', dev.model)
            self.assertEqual(False, dev.has_capability('battery'))
            self.assertEqual(True, dev.has_capability('light'))
            self.assertEqual('off', dev.lights)
            self.assertEqual(0, dev.siren)
Esempio n. 16
0
def test_style_defs():
    style_str = Snippet.style_defs()
    expected_styles = load_fixture("snippet.css").strip()

    # Check that a sample of the styles are present
    # (use only a sample to make the test more robust
    # against Pygments changes).
    for expect_line in expected_styles.split("\n"):
        assert expect_line in style_str
Esempio n. 17
0
    def test_doorbell_attributes(self, mock):
        mock.post('https://oauth.ring.com/oauth/token',
                  text=load_fixture('ring_oauth.json'))
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/history',
                 text=load_fixture('ring_doorbots.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987653/health',
                 text=load_fixture('ring_doorboot_health_attrs_id987653.json'))

        data = self.ring_persistent
        for dev in data.doorbells:
            if not dev.shared:
                self.assertEqual('Front Door', dev.name)
                self.assertEqual(987652, dev.account_id)
                self.assertEqual('123 Main St', dev.address)
                self.assertEqual('lpd_v1', dev.kind)
                self.assertEqual('Doorbell Pro', dev.model)
                self.assertEqual(False, dev.has_capability('battery'))
                self.assertEqual(True, dev.has_capability('volume'))
                self.assertEqual(-70.12345, dev.longitude)
                self.assertEqual('America/New_York', dev.timezone)
                self.assertEqual(1, dev.volume)
                self.assertTrue(dev.has_subscription)
                self.assertEqual('online', dev.connection_status)

                self.assertIsInstance(dev.history(limit=1, kind='motion'),
                                      list)
                self.assertEqual(0, len(dev.history(limit=1, kind='ding')))
                self.assertEqual(
                    0,
                    len(
                        dev.history(limit=1,
                                    kind='ding',
                                    enforce_limit=True,
                                    retry=50)))

                self.assertEqual('Mechanical', dev.existing_doorbell_type)
                self.assertTrue(data._persist_token)
                self.assertEqual('ring_mock_wifi', dev.wifi_name)
                self.assertEqual('good', dev.wifi_signal_category)
                self.assertEqual(-58, dev.wifi_signal_strength)
Esempio n. 18
0
def scrape_mocked(fixture_file, url, scrape_fn):
    fixture = load_fixture("boatos_org", fixture_file, url)
    MockedRequest = namedtuple('MockedRequest', 'text')
    original_get = requests.get

    requests.get = MagicMock(return_value=MockedRequest(text=fixture))
    result = scrape_fn(url)
    requests.get = original_get

    return result
Esempio n. 19
0
    def test_multiple_snippets(self):
        self.use_default_values()

        # Have the snippet loader always report
        # multiple snippets for each source file
        self.set_num_snippets(2)

        # Verify that we got the expected string
        expected = load_fixture("html_report_two_snippets.html").strip()
        self.assert_report(expected)
Esempio n. 20
0
    def test_one_snippet(self):
        self.use_default_values()

        # Have the snippet loader always report
        # provide one snippet (for every source file)
        self.set_num_snippets(1)

        # Verify that we got the expected string
        expected = load_fixture("markdown_report_one_snippet.md").strip()
        self.assert_report(expected)
Esempio n. 21
0
    def test_recursive_retry(self, mock):
        """"Test recursive query retry on Authentication Failure"""
        mock.post('https://api.carson.live/api/v1.4.3/auth/login/',
                  text=load_fixture('carson.live', 'carson_login.json'))
        query_url = 'https://api.carson.live/api/v1.4.3/me/'
        mock.get(query_url,
                 text=load_fixture('carson.live', 'carson_auth_failure.json'),
                 status_code=401)

        auth = CarsonAuth(USERNAME, PASSWORD)

        with self.assertRaises(CarsonAPIError):
            auth.authenticated_query(query_url, retry_auth=2)

        # Token unchanged
        self.assertEqual(FIXTURE_TOKEN, auth.token)
        self.assertEqual(6, mock.call_count)
        self.assertEqual('JWT {}'.format(FIXTURE_TOKEN),
                         mock.last_request.headers.get('Authorization'))
Esempio n. 22
0
def scrape_mocked(fixture_file, url, scrape_fn):
    fixture = load_fixture("buzzfeed_com", fixture_file, url)
    MockedRequest = namedtuple('MockedRequest', ['text', 'raise_for_status'])
    original_get = requests.get

    requests.get = MagicMock(
        return_value=MockedRequest(text=fixture, raise_for_status=lambda: 0))
    result = scrape_fn()
    requests.get = original_get

    return result
Esempio n. 23
0
    def test_basic_attributes(self, mock):
        """Test the Ring class and methods."""
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/chimes/999999/health',
                 text=load_fixture('ring_chime_health_attrs.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987653/health',
                 text=load_fixture('ring_doorboot_health_attrs_id987653.json'))

        data = self.ring
        self.assertTrue(data.is_connected)
        self.assertIsInstance(data.cache, dict)
        self.assertFalse(data.debug)
        self.assertEqual(1, len(data.chimes))
        self.assertEqual(2, len(data.doorbells))
        self.assertEqual(1, len(data.stickup_cams))
        self.assertFalse(data._persist_token)
        self.assertEquals('http://localhost/', data._push_token_notify_url)
Esempio n. 24
0
    def test_doorbell_alerts(self, mock):
        mock.get('https://api.ring.com/clients_api/ring_devices',
                 text=load_fixture('ring_devices.json'))
        mock.get('https://api.ring.com/clients_api/dings/active',
                 text=load_fixture('ring_ding_active.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987652/health',
                 text=load_fixture('ring_doorboot_health_attrs.json'))
        mock.get('https://api.ring.com/clients_api/doorbots/987653/health',
                 text=load_fixture('ring_doorboot_health_attrs_id987653.json'))

        data = self.ring_persistent
        for dev in data.doorbells:
            self.assertEqual('America/New_York', dev.timezone)

            # call alerts
            dev.check_alerts()

            self.assertIsInstance(dev.alert, dict)
            self.assertIsInstance(dev.alert_expires_at, datetime)
            self.assertTrue(datetime.now() >= dev.alert_expires_at)
            self.assertIsNotNone(dev._ring.cache_file)
Esempio n. 25
0
    def test_update_token_fail(self, mock):
        """Test authentication failure in token update"""
        mock.post('https://api.carson.live/api/v1.4.3/auth/login/',
                  text=load_fixture('carson.live', 'carson_auth_failure.json'),
                  status_code=401)

        auth = CarsonAuth(USERNAME, PASSWORD)

        with self.assertRaises(CarsonAuthenticationError):
            auth.update_token()

        self.assertTrue(mock.called)
Esempio n. 26
0
    def _init_default_mocks(self, mock, c_mock_me_filename):
        c_mock_me_txt = load_fixture('carson.live', c_mock_me_filename)
        self.c_mock_me = json.loads(c_mock_me_txt).get('data')
        self.c_mock_first_property = self.c_mock_me['properties'][0]
        self.c_mock_first_door = self.c_mock_first_property['doors'][0]
        self.c_mock_first_camera = self.c_mock_first_property['cameras'][0]

        # ME Mock
        mock.get(C_API_URI + C_ME_ENDPOINT, text=c_mock_me_txt)

        # Eagle Eye Session Mock
        c_mock_esession_txt = load_fixture('carson.live',
                                           'carson_eagleeye_session.json')
        self.c_mock_esession = json.loads(c_mock_esession_txt).get('data')

        for b_id in [p['id'] for p in self.c_mock_me.get('properties')]:
            mock.get(C_API_URI + C_EEN_SESSION_ENDPOINT.format(b_id),
                     text=c_mock_esession_txt)

        # Device list Mock
        self.e_mock_device_list = setup_ee_device_list_mock(
            mock, self.c_mock_esession['activeBrandSubdomain'])
Esempio n. 27
0
    def test_raise_communication_error_wrong_json(self, mock):
        """Test failure on response with missing keys"""
        query_url = 'https://api.carson.live/api/v1.4.3/me/'
        mock.get(query_url,
                 text=load_fixture('carson.live', 'carson_missing_keys.json'))

        token, _ = get_encoded_token()

        auth = CarsonAuth(USERNAME, PASSWORD, token)

        with self.assertRaises(CarsonCommunicationError):
            auth.authenticated_query(query_url)

        self.assertTrue(mock.called)
Esempio n. 28
0
def _assert_format(
    src_tokens,
    src_filename,
    start_line,
    last_line,
    violation_lines,
    expected_fixture,
):
    snippet = Snippet(src_tokens, src_filename, start_line, last_line,
                      violation_lines, None)
    result = snippet.html()

    expected_str = load_fixture(expected_fixture, encoding="utf-8")

    assert expected_str.strip() == result.strip()
    assert isinstance(result, str)
Esempio n. 29
0
    def test_successful_query_with_initial_token(self, mock):
        """Test query with initial valid token"""
        query_url = 'https://api.carson.live/api/v1.4.3/me/'
        mock.get(query_url, text=load_fixture('carson.live', 'carson_me.json'))

        token, _ = get_encoded_token()

        auth = CarsonAuth(USERNAME, PASSWORD, token)

        auth.authenticated_query(query_url)

        # Token unchanged
        self.assertEqual(token, auth.token)
        self.assertEqual(1, mock.call_count)
        self.assertEqual('JWT {}'.format(token),
                         mock.last_request.headers.get('Authorization'))
Esempio n. 30
0
    def test_update_token_success(self, mock):
        """Test token update"""
        mock.post('https://api.carson.live/api/v1.4.3/auth/login/',
                  text=load_fixture('carson.live', 'carson_login.json'))

        mock_token_update_cb = Mock()

        auth = CarsonAuth(USERNAME,
                          PASSWORD,
                          token_update_cb=mock_token_update_cb)
        token = auth.update_token()

        self.assertEqual(auth.username, USERNAME)
        self.assertEqual(FIXTURE_TOKEN, token)
        self.assertEqual(FIXTURE_TOKEN, auth.token)
        self.assertTrue(mock.called)
        self.assertEqual(USERNAME, mock.last_request.json().get('username'))
        self.assertEqual(PASSWORD, mock.last_request.json().get('password'))
        mock_token_update_cb.assert_called_once_with(FIXTURE_TOKEN)