parent
a8add06a40
commit
2baa838ba7
|
@ -363,7 +363,6 @@ omit =
|
|||
homeassistant/components/sensor/pocketcasts.py
|
||||
homeassistant/components/sensor/pvoutput.py
|
||||
homeassistant/components/sensor/qnap.py
|
||||
homeassistant/components/sensor/ring.py
|
||||
homeassistant/components/sensor/sabnzbd.py
|
||||
homeassistant/components/sensor/scrape.py
|
||||
homeassistant/components/sensor/sensehat.py
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
"""The tests for the Ring sensor platform."""
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
from homeassistant.components.sensor import ring
|
||||
from tests.common import get_test_home_assistant
|
||||
|
||||
VALID_CONFIG = {
|
||||
"platform": "ring",
|
||||
"username": "foo",
|
||||
"password": "bar",
|
||||
"monitored_conditions": [
|
||||
"battery", "last_activity", "volume"
|
||||
]
|
||||
}
|
||||
|
||||
ATTRIBUTION = 'Data provided by Ring.com'
|
||||
|
||||
|
||||
def mocked_requests_get(*args, **kwargs):
|
||||
"""Mock requests.get invocations."""
|
||||
class MockResponse:
|
||||
"""Class to represent a mocked response."""
|
||||
|
||||
def __init__(self, json_data, status_code):
|
||||
"""Initialize the mock response class."""
|
||||
self.json_data = json_data
|
||||
self.status_code = status_code
|
||||
|
||||
def json(self):
|
||||
"""Return the json of the response."""
|
||||
return self.json_data
|
||||
|
||||
if str(args[0]).startswith('https://api.ring.com/clients_api/session'):
|
||||
return MockResponse({
|
||||
"profile": {
|
||||
"authentication_token": "12345678910",
|
||||
"email": "foo@bar.org",
|
||||
"features": {
|
||||
"chime_dnd_enabled": False,
|
||||
"chime_pro_enabled": True,
|
||||
"delete_all_enabled": True,
|
||||
"delete_all_settings_enabled": False,
|
||||
"device_health_alerts_enabled": True,
|
||||
"floodlight_cam_enabled": True,
|
||||
"live_view_settings_enabled": True,
|
||||
"lpd_enabled": True,
|
||||
"lpd_motion_announcement_enabled": False,
|
||||
"multiple_calls_enabled": True,
|
||||
"multiple_delete_enabled": True,
|
||||
"nw_enabled": True,
|
||||
"nw_larger_area_enabled": False,
|
||||
"nw_user_activated": False,
|
||||
"owner_proactive_snoozing_enabled": True,
|
||||
"power_cable_enabled": False,
|
||||
"proactive_snoozing_enabled": False,
|
||||
"reactive_snoozing_enabled": False,
|
||||
"remote_logging_format_storing": False,
|
||||
"remote_logging_level": 1,
|
||||
"ringplus_enabled": True,
|
||||
"starred_events_enabled": True,
|
||||
"stickupcam_setup_enabled": True,
|
||||
"subscriptions_enabled": True,
|
||||
"ujet_enabled": False,
|
||||
"video_search_enabled": False,
|
||||
"vod_enabled": False},
|
||||
"first_name": "Home",
|
||||
"id": 999999,
|
||||
"last_name": "Assistant"}
|
||||
}, 201)
|
||||
elif str(args[0])\
|
||||
.startswith("https://api.ring.com/clients_api/ring_devices"):
|
||||
return MockResponse({
|
||||
"authorized_doorbots": [],
|
||||
"chimes": [
|
||||
{
|
||||
"address": "123 Main St",
|
||||
"alerts": {"connection": "online"},
|
||||
"description": "Downstairs",
|
||||
"device_id": "abcdef123",
|
||||
"do_not_disturb": {"seconds_left": 0},
|
||||
"features": {"ringtones_enabled": True},
|
||||
"firmware_version": "1.2.3",
|
||||
"id": 999999,
|
||||
"kind": "chime",
|
||||
"latitude": 12.000000,
|
||||
"longitude": -70.12345,
|
||||
"owned": True,
|
||||
"owner": {
|
||||
"email": "foo@bar.org",
|
||||
"first_name": "Marcelo",
|
||||
"id": 999999,
|
||||
"last_name": "Assistant"},
|
||||
"settings": {
|
||||
"ding_audio_id": None,
|
||||
"ding_audio_user_id": None,
|
||||
"motion_audio_id": None,
|
||||
"motion_audio_user_id": None,
|
||||
"volume": 2},
|
||||
"time_zone": "America/New_York"}],
|
||||
"doorbots": [
|
||||
{
|
||||
"address": "123 Main St",
|
||||
"alerts": {"connection": "online"},
|
||||
"battery_life": 4081,
|
||||
"description": "Front Door",
|
||||
"device_id": "aacdef123",
|
||||
"external_connection": False,
|
||||
"features": {
|
||||
"advanced_motion_enabled": False,
|
||||
"motion_message_enabled": False,
|
||||
"motions_enabled": True,
|
||||
"people_only_enabled": False,
|
||||
"shadow_correction_enabled": False,
|
||||
"show_recordings": True},
|
||||
"firmware_version": "1.4.26",
|
||||
"id": 987652,
|
||||
"kind": "lpd_v1",
|
||||
"latitude": 12.000000,
|
||||
"longitude": -70.12345,
|
||||
"motion_snooze": None,
|
||||
"owned": True,
|
||||
"owner": {
|
||||
"email": "foo@bar.org",
|
||||
"first_name": "Home",
|
||||
"id": 999999,
|
||||
"last_name": "Assistant"},
|
||||
"settings": {
|
||||
"chime_settings": {
|
||||
"duration": 3,
|
||||
"enable": True,
|
||||
"type": 0},
|
||||
"doorbell_volume": 1,
|
||||
"enable_vod": True,
|
||||
"live_view_preset_profile": "highest",
|
||||
"live_view_presets": [
|
||||
"low",
|
||||
"middle",
|
||||
"high",
|
||||
"highest"],
|
||||
"motion_announcement": False,
|
||||
"motion_snooze_preset_profile": "low",
|
||||
"motion_snooze_presets": [
|
||||
"none",
|
||||
"low",
|
||||
"medium",
|
||||
"high"]},
|
||||
"subscribed": True,
|
||||
"subscribed_motions": True,
|
||||
"time_zone": "America/New_York"}]
|
||||
}, 200)
|
||||
elif str(args[0]).startswith("https://api.ring.com/clients_api/doorbots"):
|
||||
return MockResponse([{
|
||||
"answered": False,
|
||||
"created_at": "2017-03-05T15:03:40.000Z",
|
||||
"events": [],
|
||||
"favorite": False,
|
||||
"id": 987654321,
|
||||
"kind": "motion",
|
||||
"recording": {"status": "ready"},
|
||||
"snapshot_url": ""
|
||||
}], 200)
|
||||
|
||||
|
||||
class TestRingSetup(unittest.TestCase):
|
||||
"""Test the Ring platform."""
|
||||
|
||||
# pylint: disable=invalid-name
|
||||
DEVICES = []
|
||||
|
||||
def add_devices(self, devices, action):
|
||||
"""Mock add devices."""
|
||||
for device in devices:
|
||||
self.DEVICES.append(device)
|
||||
|
||||
def setUp(self):
|
||||
"""Initialize values for this testcase class."""
|
||||
self.hass = get_test_home_assistant()
|
||||
self.config = VALID_CONFIG
|
||||
|
||||
def tearDown(self):
|
||||
"""Stop everything that was started."""
|
||||
self.hass.stop()
|
||||
|
||||
@mock.patch('requests.Session.get', side_effect=mocked_requests_get)
|
||||
@mock.patch('requests.Session.post', side_effect=mocked_requests_get)
|
||||
def test_setup(self, get_mock, post_mock):
|
||||
"""Test if component loaded successfully."""
|
||||
self.assertTrue(
|
||||
ring.setup_platform(self.hass, VALID_CONFIG,
|
||||
self.add_devices, None))
|
||||
|
||||
@mock.patch('requests.Session.get', side_effect=mocked_requests_get)
|
||||
@mock.patch('requests.Session.post', side_effect=mocked_requests_get)
|
||||
def test_sensor(self, get_mock, post_mock):
|
||||
"""Test the Ring sensor class and methods."""
|
||||
ring.setup_platform(self.hass, VALID_CONFIG, self.add_devices, None)
|
||||
|
||||
for device in self.DEVICES:
|
||||
device.update()
|
||||
if device.name == 'Front Door Battery':
|
||||
self.assertEqual(100, device.state)
|
||||
self.assertEqual('lpd_v1',
|
||||
device.device_state_attributes['kind'])
|
||||
self.assertNotEqual('chimes',
|
||||
device.device_state_attributes['type'])
|
||||
if device.name == 'Downstairs Volume':
|
||||
self.assertEqual(2, device.state)
|
||||
self.assertEqual('1.2.3',
|
||||
device.device_state_attributes['firmware'])
|
||||
self.assertEqual('mdi:bell-ring', device.icon)
|
||||
self.assertEqual('chimes',
|
||||
device.device_state_attributes['type'])
|
||||
if device.name == 'Front Door Last Activity':
|
||||
self.assertFalse(device.device_state_attributes['answered'])
|
||||
self.assertEqual('America/New_York',
|
||||
device.device_state_attributes['timezone'])
|
||||
|
||||
self.assertIsNone(device.entity_picture)
|
||||
self.assertEqual(ATTRIBUTION,
|
||||
device.device_state_attributes['attribution'])
|
Loading…
Reference in New Issue