def test_get_relevant_item(self):
        load_mocks()
        oh = OpenHAB(openhab_mock_base)

        light_apartment = oh.get_relevant_items("Licht",
                                                oh.get_location("wohnung"))

        self.assertIsInstance(light_apartment, set)
        self.assertEqual(len(light_apartment), 3)
        self.assertIn(oh.items["Lampe_Esszimmer"], light_apartment)
        self.assertIn(oh.items["Lampe_Vitrine"], light_apartment)
        self.assertIn(oh.items["Lampe_Bett"], light_apartment)

        light_diningroom = oh.get_relevant_items("Licht",
                                                 oh.get_location("esszimmer"))

        self.assertIsInstance(light_diningroom, set)
        self.assertEqual(len(light_diningroom), 2)
        self.assertIn(oh.items["Lampe_Esszimmer"], light_diningroom)
        self.assertIn(oh.items["Lampe_Vitrine"], light_diningroom)

        stereo = oh.get_relevant_items("Anlage", None)

        self.assertIsInstance(stereo, set)
        self.assertEqual(len(stereo), 1)
        self.assertIn(oh.items["Anlage"], stereo)

        light_and_stereo = oh.get_relevant_items(
            ["Licht", "Anlage"], oh.get_location("schlafzimmer"))

        self.assertIsInstance(light_and_stereo, set)
        self.assertEqual(len(light_and_stereo), 2)
        self.assertIn(oh.items["Lampe_Bett"], light_and_stereo)
        self.assertIn(oh.items["Anlage"], light_and_stereo)
    def test_get_state(self):
        load_mocks()
        add_get_state_mock()
        oh = OpenHAB(openhab_mock_base)

        state = oh.get_state(oh.items['Lampe_Bett'])
        self.assertEqual("OFF", state)
    def test_send_command(self):
        load_mocks()
        add_item_command_mock()
        oh = OpenHAB("http://localhost:8080")
        light_dining = oh.items["Lampe_Esszimmer"]
        stereo = oh.items["Anlage_An_Aus"]

        oh.send_command_to_devices([light_dining, stereo], "OFF")
    def test_get_location_by_tag(self):
        load_mocks()
        oh = OpenHAB(openhab_mock_base)
        location = oh.get_location("schlafzimmer")

        self.assertIsInstance(location, Item)
        self.assertTrue(location.is_location())
        self.assertFalse(location.is_equipment())
        self.assertFalse(location.is_point())
    def test_switch_on_callback_anlage(self):
        load_mocks()
        add_anlage_an_aus_command_mock()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(
                TestIntent(user_intent("switchDeviceOn")),
                TestSlots(dict(device=TestSlot([TestValue("anlage")])))))

        self.assertTrue(success)
        self.assertEqual("Ich habe dir die anlage eingeschaltet.", message)
    def test_switch_on_callback_empty(self):
        load_mocks()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(TestIntent(user_intent("switchDeviceOn")),
                              TestSlots({})))

        self.assertFalse(success)
        self.assertEqual(
            "Ich habe nicht verstanden, welches Gerät du einschalten möchtest.",
            message)
    def test_get_items_with_attributes(self):
        load_mocks()
        oh = OpenHAB(openhab_mock_base)

        items = oh.get_items_with_attributes(
            "Point_Measurement",
            "Property_Temperature",
            location=oh.get_location("wohnzimmer"))

        self.assertIsInstance(items, list)
        self.assertEqual(len(items), 1)
        self.assertIn(oh.items["Temperature_Livingroom"], items)
    def test_increase_volume(self):
        load_mocks()
        add_anlage_volume_command_mock()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(
                TestIntent(user_intent("increaseProperty")),
                TestSlots(dict(property=TestSlot([TestValue("lautstärke")])))))

        self.assertTrue(success)
        self.assertEqual("Ich habe die lautstärke im schlafzimmer erhöht.",
                         message)
    def test_get_temperature_callback(self):
        load_mocks()
        add_get_temperature_mock()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(
                TestIntent(user_intent("getTemperature")),
                TestSlots(dict(room=TestSlot([TestValue("wohnzimmer")])))))

        self.assertIsNone(success)
        self.assertEqual("Die Temperatur im wohnzimmer beträgt 23,1 Grad.",
                         message)
    def test_switch_on_callback_unknown_room(self):
        load_mocks()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(
                TestIntent(user_intent("switchDeviceOn")),
                TestSlots(dict(room=TestSlot([TestValue("blubbzimmer")])))))

        self.assertFalse(success)
        self.assertEqual(
            "Ich habe keinen Ort mit der Bezeichnung blubbzimmer gefunden.",
            message)
    def test_play_wohnzimmer(self):
        load_mocks()
        add_player_command_mock()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(
                TestIntent(user_intent("playMedia")),
                TestSlots(dict(room=TestSlot([TestValue("wohnzimmer")])))))

        self.assertTrue(success)
        self.assertEqual("Ich habe die Wiedergabe im wohnzimmer fortgesetzt.",
                         message)
    def test_increase_brightness(self):
        load_mocks()
        add_esszimmer_lights_command_mock()
        assistant = get_test_assistant(openhab_mock_base)

        success, message = assistant.callback(
            TestIntentMessage(
                TestIntent(user_intent("increaseProperty")),
                TestSlots(
                    dict(property=TestSlot([TestValue("helligkeit")]),
                         room=TestSlot([TestValue("esszimmer")])))))

        self.assertTrue(success)
        self.assertEqual("Ich habe die Helligkeit im esszimmer verstärkt.",
                         message)
    def test_get_injections(self):
        load_mocks()
        oh = OpenHAB(openhab_mock_base)
        injections = oh.get_injections()

        self.assertIsInstance(injections, tuple)
        self.assertEqual(len(injections), 2)

        items, locations = injections

        self.assertIsInstance(items, list)
        self.assertIsInstance(locations, list)

        self.assertIn("fernseher", items)
        self.assertNotIn("fernseher", locations)

        self.assertIn("schlafzimmer", locations)
        self.assertNotIn("schlafzimmer", items)
    def test_get_not_existing_location(self):
        load_mocks()
        oh = OpenHAB(openhab_mock_base)
        location = oh.get_location("NotExisting")

        self.assertIsNone(location)