"""The tests for the Ring component.""" from copy import deepcopy import os import unittest import requests_mock from datetime import timedelta from homeassistant import setup import homeassistant.components.ring as ring from tests.common import get_test_config_dir, get_test_home_assistant, load_fixture ATTRIBUTION = "Data provided by Ring.com" VALID_CONFIG = { "ring": {"username": "foo", "password": "bar", "scan_interval": timedelta(10)} } class TestRing(unittest.TestCase): """Tests the Ring component.""" 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 test case class.""" self.hass = get_test_home_assistant() self.cache = get_test_config_dir(ring.DEFAULT_CACHEDB) self.config = VALID_CONFIG def tearDown(self): # pylint: disable=invalid-name """Stop everything that was started.""" self.hass.stop() self.cleanup() @requests_mock.Mocker() def test_setup(self, mock): """Test the setup.""" 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"), ) response = ring.setup(self.hass, self.config) assert response @requests_mock.Mocker() def test_setup_component_no_login(self, mock): """Test the setup when no login is configured.""" mock.post( "https://api.ring.com/clients_api/session", text=load_fixture("ring_session.json"), ) conf = deepcopy(VALID_CONFIG) del conf["ring"]["username"] assert not setup.setup_component(self.hass, ring.DOMAIN, conf) @requests_mock.Mocker() def test_setup_component_no_pwd(self, mock): """Test the setup when no password is configured.""" mock.post( "https://api.ring.com/clients_api/session", text=load_fixture("ring_session.json"), ) conf = deepcopy(VALID_CONFIG) del conf["ring"]["password"] assert not setup.setup_component(self.hass, ring.DOMAIN, conf)