"""The tests for the Ring sensor platform.""" import os import unittest import requests_mock from homeassistant.components.sensor import ring from homeassistant.components import ring as base_ring from tests.components.test_ring import ATTRIBUTION, VALID_CONFIG from tests.common import ( get_test_config_dir, get_test_home_assistant, load_fixture) class TestRingSensorSetup(unittest.TestCase): """Test the Ring platform.""" DEVICES = [] def add_entities(self, devices, action): """Mock add devices.""" for device in devices: self.DEVICES.append(device) def cleanup(self): """Cleanup any data created from the tests.""" if os.path.isfile(self.cache): os.remove(self.cache) def setUp(self): """Initialize values for this testcase class.""" self.hass = get_test_home_assistant() self.cache = get_test_config_dir(base_ring.DEFAULT_CACHEDB) self.config = { 'username': 'foo', 'password': 'bar', 'monitored_conditions': [ 'battery', 'last_activity', 'last_ding', 'last_motion', 'volume', 'wifi_signal_category', 'wifi_signal_strength'] } def tearDown(self): """Stop everything that was started.""" self.hass.stop() self.cleanup() @requests_mock.Mocker() def test_sensor(self, mock): """Test the Ring sensor class and methods.""" 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/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/chimes/999999/health', text=load_fixture('ring_chime_health_attrs.json')) base_ring.setup(self.hass, VALID_CONFIG) ring.setup_platform(self.hass, self.config, self.add_entities, None) for device in self.DEVICES: device.update() if device.name == 'Front Battery': assert 80 == device.state assert 'hp_cam_v1' == \ device.device_state_attributes['kind'] assert 'stickup_cams' == \ device.device_state_attributes['type'] if device.name == 'Front Door Battery': assert 100 == device.state assert 'lpd_v1' == \ device.device_state_attributes['kind'] assert 'chimes' != \ device.device_state_attributes['type'] if device.name == 'Downstairs Volume': assert 2 == device.state assert '1.2.3' == \ device.device_state_attributes['firmware'] assert 'ring_mock_wifi' == \ device.device_state_attributes['wifi_name'] assert 'mdi:bell-ring' == device.icon assert 'chimes' == \ device.device_state_attributes['type'] if device.name == 'Front Door Last Activity': assert not device.device_state_attributes['answered'] assert 'America/New_York' == \ device.device_state_attributes['timezone'] if device.name == 'Downstairs WiFi Signal Strength': assert -39 == device.state if device.name == 'Front Door WiFi Signal Category': assert 'good' == device.state if device.name == 'Front Door WiFi Signal Strength': assert -58 == device.state assert device.entity_picture is None assert ATTRIBUTION == \ device.device_state_attributes['attribution']