"""The tests for the Yamaha Media player platform."""
import unittest
import xml.etree.ElementTree as ET

import rxv


def sample_content(name):
    """Read content into a string from a file."""
    with open('tests/components/media_player/yamaha_samples/%s' % name,
              encoding='utf-8') as content:
        return content.read()


class FakeYamaha(rxv.rxv.RXV):
    """Fake Yamaha receiver.

    This inherits from RXV but overrides methods for testing that
    would normally have hit the network. This makes it easier to
    ensure that usage of the rxv library by HomeAssistant is as we'd
    expect.
    """

    _fake_input = 'HDMI1'

    def _discover_features(self):
        """Fake the discovery feature."""
        self._desc_xml = ET.fromstring(sample_content('desc.xml'))

    @property
    def input(self):
        """A fake input for the receiver."""
        return self._fake_input

    @input.setter
    def input(self, input_name):
        """Set the input for the fake receiver."""
        assert input_name in self.inputs()
        self._fake_input = input_name

    def inputs(self):
        """All inputs of the fake receiver."""
        return {'AUDIO1': None,
                'AUDIO2': None,
                'AV1': None,
                'AV2': None,
                'AV3': None,
                'AV4': None,
                'AV5': None,
                'AV6': None,
                'AirPlay': 'AirPlay',
                'HDMI1': None,
                'HDMI2': None,
                'HDMI3': None,
                'HDMI4': None,
                'HDMI5': None,
                'NET RADIO': 'NET_RADIO',
                'Pandora': 'Pandora',
                'Rhapsody': 'Rhapsody',
                'SERVER': 'SERVER',
                'SiriusXM': 'SiriusXM',
                'Spotify': 'Spotify',
                'TUNER': 'Tuner',
                'USB': 'USB',
                'V-AUX': None,
                'iPod (USB)': 'iPod_USB'}


# pylint: disable=no-member, invalid-name
class TestYamaha(unittest.TestCase):
    """Test the media_player yamaha module."""

    def setUp(self):
        """Setup things to be run when tests are started."""
        super(TestYamaha, self).setUp()
        self.rec = FakeYamaha("http://10.0.0.0:80/YamahaRemoteControl/ctrl")

    def test_get_playback_support(self):
        """Test the playback."""
        rec = self.rec
        support = rec.get_playback_support()
        self.assertFalse(support.play)
        self.assertFalse(support.pause)
        self.assertFalse(support.stop)
        self.assertFalse(support.skip_f)
        self.assertFalse(support.skip_r)

        rec.input = 'NET RADIO'
        support = rec.get_playback_support()
        self.assertTrue(support.play)
        self.assertFalse(support.pause)
        self.assertTrue(support.stop)
        self.assertFalse(support.skip_f)
        self.assertFalse(support.skip_r)
