Beispiel #1
0
class TestFritzhome(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome("10.0.0.1", "user", "pass")
        self.fritz._request = self.mock

    @raises(LoginError)
    def test_login_fail(self):
        self.mock.side_effect = [
            Helper.response("login_rsp_without_valid_sid"),
            Helper.response("login_rsp_without_valid_sid"),
        ]

        self.fritz.login()

    def test_login(self):
        self.mock.side_effect = [
            Helper.response("login_rsp_without_valid_sid"),
            Helper.response("login_rsp_with_valid_sid"),
        ]

        self.fritz.login()

    def test_logout(self):
        self.fritz.logout()
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/login_sid.lua",
            {
                "sid": None,
                "security:command/logout": "1"
            },
        )

    def test_aha_request(self):
        self.fritz._aha_request(cmd="testcmd")
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "switchcmd": "testcmd"
            },
        )

        self.fritz._aha_request(cmd="testcmd", ain="1")
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "switchcmd": "testcmd",
                "ain": "1"
            },
        )

        self.fritz._aha_request(cmd="testcmd",
                                ain="1",
                                param={
                                    "a": "1",
                                    "b": "2"
                                })
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "switchcmd": "testcmd",
                "ain": "1",
                "a": "1",
                "b": "2",
            },
        )

    @raises(InvalidError)
    def test_aha_request_invalid(self):
        self.mock.side_effect = [
            "inval",
        ]

        self.fritz._aha_request(cmd="estcmd")

    def test_get_device_element(self):
        self.mock.side_effect = [
            Helper.response("base/device_list"),
            Helper.response("base/device_list"),
            Helper.response("base/device_list"),
        ]

        element = self.fritz.get_device_element("08761 0000434")
        eq_(element.attrib["identifier"], "08761 0000434")
        eq_(element.attrib["fwversion"], "03.33")

        element = self.fritz.get_device_element("08761 1048079")
        eq_(element.attrib["identifier"], "08761 1048079")
        eq_(element.attrib["fwversion"], "03.44")

        element = self.fritz.get_device_element("unknown")
        eq_(element, None)

    def test_get_device_by_ain(self):
        self.mock.side_effect = [
            Helper.response("base/device_list"),
            Helper.response("base/device_list"),
        ]

        self.fritz.update_devices()
        device = self.fritz.get_device_by_ain("08761 0000434")
        eq_(device.ain, "08761 0000434")

    def test_aha_get_devices(self):
        self.mock.side_effect = [
            Helper.response("base/device_list"),
        ]
        self.fritz.update_devices()

        devices = self.fritz.get_devices()
        eq_(devices[0].name, "Steckdose")
        eq_(devices[1].name, "FRITZ!DECT Rep 100 #1")

        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "switchcmd": "getdevicelistinfos"
            },
        )

    def test_get_device_name(self):
        self.mock.side_effect = ["testname"]

        eq_(self.fritz.get_device_name(ain="1234"), "testname")

        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "ain": "1234",
                "switchcmd": "getswitchname"
            },
        )

    def test_get_template_by_ain(self):
        self.mock.side_effect = [
            Helper.response("templates/template_list"),
            Helper.response("templates/template_list"),
        ]

        self.fritz.update_templates()
        device = self.fritz.get_template_by_ain("tmp0B32F7-1B0650682")
        eq_(device.ain, "tmp0B32F7-1B0650682")

    def test_aha_get_templates(self):
        self.mock.side_effect = [
            Helper.response("templates/template_list"),
        ]
        self.fritz.update_templates()

        templates = self.fritz.get_templates()
        eq_(templates[0].name, "Base Data")
        eq_(templates[1].name, "One Device")

        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "switchcmd": "gettemplatelistinfos"
            },
        )

    def test_aha_apply_template(self):
        self.fritz.apply_template("1234")

        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "ain": "1234",
                "switchcmd": "applytemplate"
            },
        )

    def test_set_target_temperature(self):
        self.fritz.set_target_temperature("1", 25.5)
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "ain": "1",
                "switchcmd": "sethkrtsoll",
                "param": 51
            },
        )

        self.fritz.set_target_temperature("1", 0.0)
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "ain": "1",
                "switchcmd": "sethkrtsoll",
                "param": 253
            },
        )

        self.fritz.set_target_temperature("1", 32.0)
        self.fritz._request.assert_called_with(
            "http://10.0.0.1/webservices/homeautoswitch.lua",
            {
                "sid": None,
                "ain": "1",
                "switchcmd": "sethkrtsoll",
                "param": 254
            },
        )
class TestFritzhomeTemplate(object):
    def setup(self):
        self.mock = MagicMock()
        self.fritz = Fritzhome("10.0.0.1", "user", "pass")
        self.fritz._request = self.mock
        self.fritz._devices = {}

        self.mock.side_effect = [Helper.response("templates/template_list")]

        self.fritz.update_templates()

    def test_template_init(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B0650682")

        eq_(template.ain, "tmp0B32F7-1B0650682")
        eq_(template._functionsbitmask, 320)
        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_with_single_device(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B0650234")

        eq_(template.devices, ["08735 0525249"])

    def test_template_with_multiple_devices(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1C40A2B8A")

        expected_devices = set(["08735 0525249",
                                "08735 0525249",
                                "08735 0340143",
                                "08735 0526125"])
        eq_(len(expected_devices.intersection(template.devices)), len(expected_devices))

    def test_template_applies_hkr_summer(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA20")

        assert_true(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_hkr_temperature(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA21")

        assert_false(template.apply_hkr_summer)
        assert_true(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_hkr_holidays(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA22")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_true(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_hkr_time_table(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA23")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_true(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_relay_manual(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA24")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_true(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_relay_automatic(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA25")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_true(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_level(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA26")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_true(template.apply_level)
        assert_false(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_color(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA27")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_true(template.apply_color)
        assert_false(template.apply_dialhelper)

    def test_template_applies_dialhelper(self):
        template = self.fritz.get_template_by_ain("tmp0B32F7-1B064FA28")

        assert_false(template.apply_hkr_summer)
        assert_false(template.apply_hkr_temperature)
        assert_false(template.apply_hkr_holidays)
        assert_false(template.apply_hkr_time_table)
        assert_false(template.apply_relay_manual)
        assert_false(template.apply_relay_automatic)
        assert_false(template.apply_level)
        assert_false(template.apply_color)
        assert_true(template.apply_dialhelper)