class HouseActionsTestCase(unittest.TestCase):
    """Testing house actions"""
    def setUp(self):
        self.house = House(1)  # one minute timeframe
        self.house.influence = 0.2
        self.house.devices_settings = {
            'energy_src': 'grid',
            'cooling_lvl': 0.5,
            'heating_lvl': 0.5,
            'light_lvl': 0.5,
            'curtains_lvl': 0.5
        }
        self.house.battery['current'] = 0.5

        self.house_empty_battery = House(1)
        self.house_empty_battery.battery['current'] = 0.2
        self.house_empty_battery.devices_settings = {
            'energy_src': 'grid',
        }

    def test_action_sources(self):
        """Test changing between power sources"""

        self.house.action_source_battery()
        self.assertTrue(self.house.devices_settings['energy_src'], 'battery')

        self.house.action_source_grid()
        self.assertTrue(self.house.devices_settings['energy_src'], 'grid')

    def test_action_more_cooling(self):
        """Test more cooling"""

        self.house.action_more_cooling()
        self.assertEqual(self.house.devices_settings['cooling_lvl'], 0.7)

        for _ in range(3):
            self.house.action_more_cooling()
        self.assertEqual(self.house.devices_settings['cooling_lvl'], 1)

    def test_action_less_cooling(self):
        """Test less cooling"""

        self.house.action_less_cooling()
        self.assertEqual(self.house.devices_settings['cooling_lvl'], 0.3)

        for _ in range(3):
            self.house.action_less_cooling()
        self.assertEqual(self.house.devices_settings['cooling_lvl'], 0)

    def test_action_more_heating(self):
        """Test more heating"""

        self.house.action_more_heating()
        self.assertEqual(self.house.devices_settings['heating_lvl'], 0.7)

        for _ in range(3):
            self.house.action_more_heating()
        self.assertEqual(self.house.devices_settings['heating_lvl'], 1)

    def test_action_less_heating(self):
        """Test less heating"""

        self.house.action_less_heating()
        self.assertEqual(self.house.devices_settings['heating_lvl'], 0.3)

        for _ in range(3):
            self.house.action_less_heating()
        self.assertEqual(self.house.devices_settings['heating_lvl'], 0)

    def test_action_more_light(self):
        """Test more light"""

        self.house.action_more_light()
        self.assertEqual(self.house.devices_settings['light_lvl'], 0.6)

        for _ in range(4):
            self.house.action_more_light()
        self.assertEqual(self.house.devices_settings['light_lvl'], 1)

    def test_action_less_light(self):
        """Test less light"""

        self.house.action_less_light()
        self.assertEqual(self.house.devices_settings['light_lvl'], 0.4)

        for _ in range(4):
            self.house.action_less_light()
        self.assertEqual(self.house.devices_settings['light_lvl'], 0)

    def test_action_curtains_up(self):
        """Test curtains up"""

        self.house.action_curtains_up()
        self.assertEqual(self.house.devices_settings['curtains_lvl'], 0.4)

        for _ in range(6):
            self.house.action_curtains_up()
        self.assertEqual(self.house.devices_settings['curtains_lvl'], 0)

    def test_action_curtains_down(self):
        """Test curtains down"""

        self.house.action_curtains_down()
        self.assertEqual(self.house.devices_settings['curtains_lvl'], 0.6)

        for _ in range(4):
            self.house.action_curtains_down()
        self.assertEqual(self.house.devices_settings['curtains_lvl'], 1)

    def test_action_nop(self):
        """Test action nop"""

        devices_settings = dict(self.house.devices_settings)
        self.house.action_nop()
        self.assertDictEqual(devices_settings, self.house.devices_settings,
                             "Action Nop shouldn't change devices' settings")