"""The tests for the Yamaha Media player platform.""" import unittest from unittest.mock import patch, MagicMock from homeassistant.setup import setup_component import homeassistant.components.media_player as mp from homeassistant.components.yamaha import media_player as yamaha from tests.common import get_test_home_assistant def _create_zone_mock(name, url): zone = MagicMock() zone.ctrl_url = url zone.zone = name return zone class FakeYamahaDevice: """A fake Yamaha device.""" def __init__(self, ctrl_url, name, zones=None): """Initialize the fake Yamaha device.""" self.ctrl_url = ctrl_url self.name = name self.zones = zones or [] def zone_controllers(self): """Return controllers for all available zones.""" return self.zones class TestYamahaMediaPlayer(unittest.TestCase): """Test the Yamaha media player.""" def setUp(self): """Set up things to be run when tests are started.""" self.hass = get_test_home_assistant() self.main_zone = _create_zone_mock('Main zone', 'http://main') self.device = FakeYamahaDevice( 'http://receiver', 'Receiver', zones=[self.main_zone]) def tearDown(self): """Stop everything that was started.""" self.hass.stop() def enable_output(self, port, enabled): """Enable output on a specific port.""" data = { 'entity_id': 'media_player.yamaha_receiver_main_zone', 'port': port, 'enabled': enabled } self.hass.services.call(yamaha.DOMAIN, yamaha.SERVICE_ENABLE_OUTPUT, data, True) def create_receiver(self, mock_rxv): """Create a mocked receiver.""" mock_rxv.return_value = self.device config = { 'media_player': { 'platform': 'yamaha', 'host': '127.0.0.1' } } assert setup_component(self.hass, mp.DOMAIN, config) @patch('rxv.RXV') def test_enable_output(self, mock_rxv): """Test enabling and disabling outputs.""" self.create_receiver(mock_rxv) self.enable_output('hdmi1', True) self.main_zone.enable_output.assert_called_with('hdmi1', True) self.enable_output('hdmi2', False) self.main_zone.enable_output.assert_called_with('hdmi2', False)