Пример #1
0
 def test_custom_event_url_without_port(self, MockServer) -> None:
     """Event URL should use custom port if none was provided."""
     MockServer.return_value.url = "http://127.0.0.1:81"
     hub = Hub("1.2.3.4", "1234", "token", 420, event_url="http://foo.local")
     wait_for(hub.start())
     url = unquote(requests[0]["url"])
     self.assertRegex(url, r"http://foo\.local:420$")
Пример #2
0
 def test_stop_server(self, MockServer) -> None:
     """Hub should stop a server when stopped."""
     hub = Hub("1.2.3.4", "1234", "token", True)
     run(hub.start())
     self.assertTrue(MockServer.return_value.start.called)
     hub.stop()
     self.assertTrue(MockServer.return_value.stop.called)
Пример #3
0
 def test_custom_event_url(self, MockServer) -> None:
     """Event URL should be configurable."""
     MockServer.return_value.url = "http://127.0.0.1:81"
     hub = Hub("1.2.3.4", "1234", "token", event_url="http://foo.local")
     wait_for(hub.start())
     url = unquote(requests[0]["url"])
     self.assertRegex(url, r"http://foo\.local$")
Пример #4
0
 def test_default_event_url(self, MockServer) -> None:
     """Default event URL should be server URL."""
     MockServer.return_value.url = "http://127.0.0.1:81"
     hub = Hub("1.2.3.4", "1234", "token")
     wait_for(hub.start())
     url = unquote(requests[0]["url"])
     self.assertRegex(url, r"http://127.0.0.1:81$")
Пример #5
0
 def test_start_no_hsm(self, MockServer) -> None:
     hub = Hub("1.2.3.4", "1234", "token")
     wait_for(hub.start())
     self.assertEqual(len(requests), 13)
     self.assertRegex(requests[1]["url"], "devices$")
     self.assertRegex(requests[2]["url"], r"devices/\d+$")
     self.assertRegex(requests[3]["url"], r"devices/\d+$")
     self.assertRegex(requests[-2]["url"], "modes$")
     self.assertRegex(requests[-1]["url"], "hsm$")
Пример #6
0
 def test_start(self, MockServer) -> None:
     """start() should request data from the Hubitat hub."""
     hub = Hub("1.2.3.4", "1234", "token")
     run(hub.start())
     # 33 requests - 1 to get device list, 32 to update devices
     self.assertEqual(len(requests), 33)
     self.assertRegex(requests[1]["url"], "devices$")
     self.assertRegex(requests[2]["url"], "devices/\d+$")
     self.assertRegex(requests[-1]["url"], "devices/\d+$")
Пример #7
0
    def test_process_set_hsm(self, MockServer) -> None:
        """Started hub should allow mode to be updated."""
        hub = Hub("1.2.3.4", "1234", "token")
        wait_for(hub.start())
        self.assertEqual(hub.hsm_status, "armedAway")
        wait_for(hub.set_hsm(HSM_DISARM))
        self.assertRegex(requests[-1]["url"], f"hsm/{HSM_DISARM}$")

        hub._process_event(events["hsm"])
        self.assertEqual(hub.hsm_status, "armedAway")
Пример #8
0
    def test_process_set_mode(self, MockServer) -> None:
        """Started hub should allow mode to be updated."""
        hub = Hub("1.2.3.4", "1234", "token")
        wait_for(hub.start())
        self.assertEqual(hub.mode, "Day")
        wait_for(hub.set_mode("Evening"))
        self.assertRegex(requests[-1]["url"], "modes/2$")

        hub._process_event(events["mode"])
        self.assertEqual(hub.mode, "Evening")
Пример #9
0
    def test_process_event(self, MockServer) -> None:
        """Started hub should process a device event."""
        hub = Hub("1.2.3.4", "1234", "token")
        run(hub.start())
        device = hub.devices["176"]
        attr = device.attributes["switch"]
        self.assertEqual(attr.value, "off")

        hub.process_event(events[0])

        attr = device.attributes["switch"]
        self.assertEqual(attr.value, "on")
Пример #10
0
    def test_process_other_event(self, MockServer) -> None:
        """Started hub should ignore non-device, non-mode events."""
        hub = Hub("1.2.3.4", "1234", "token")
        wait_for(hub.start())
        device = hub.devices["176"]
        attr = device.attributes["switch"]
        self.assertEqual(attr.value, "off")

        hub._process_event(events["other"])

        attr = device.attributes["switch"]
        self.assertEqual(attr.value, "off")
Пример #11
0
    def test_set_event_url(self, MockServer) -> None:
        """Started hub should allow mode to be updated."""
        server_url = "http://127.0.0.1:81"
        MockServer.return_value.url = server_url
        hub = Hub("1.2.3.4", "1234", "token")
        wait_for(hub.start())

        wait_for(hub.set_event_url(None))
        event_url = unquote(requests[-1]["url"])
        self.assertRegex(event_url, f"postURL/{server_url}$")

        other_url = "http://10.0.1.1:4443"
        wait_for(hub.set_event_url(other_url))
        event_url = unquote(requests[-1]["url"])
        self.assertRegex(event_url, f"postURL/{other_url}$")
Пример #12
0
 def test_start(self, MockServer) -> None:
     """start() should request data from the Hubitat hub."""
     hub = Hub("1.2.3.4", "1234", "token")
     wait_for(hub.start())
     # 13 requests:
     #   0: set event URL
     #   1: request devices
     #   2...: request device details
     #   -2: request modes
     #   -1: request hsm status
     self.assertEqual(len(requests), 13)
     self.assertRegex(requests[1]["url"], "devices$")
     self.assertRegex(requests[2]["url"], r"devices/\d+$")
     self.assertRegex(requests[3]["url"], r"devices/\d+$")
     self.assertRegex(requests[-2]["url"], "modes$")
     self.assertRegex(requests[-1]["url"], "hsm$")
Пример #13
0
    def test_process_hsm_event(self, MockServer) -> None:
        """Started hub should emit HSM events."""
        hub = Hub("1.2.3.4", "1234", "token")
        wait_for(hub.start())

        handler_called = False

        def listener(_: Any):
            nonlocal handler_called
            handler_called = True

        hub._process_event(events["hsm"])
        self.assertFalse(handler_called)

        hub.add_hsm_listener(listener)
        hub._process_event(events["hsm"])
        self.assertTrue(handler_called)
Пример #14
0
 def test_start_server(self, MockServer) -> None:
     """Hub should start a server when asked to."""
     hub = Hub("1.2.3.4", "1234", "token", True)
     run(hub.start())
     self.assertTrue(MockServer.called)
Пример #15
0
 def test_custom_event_port(self, MockServer) -> None:
     """Event server port should be configurable."""
     MockServer.return_value.url = "http://127.0.0.1:81"
     hub = Hub("1.2.3.4", "1234", "token", 420)
     wait_for(hub.start())
     self.assertEqual(MockServer.call_args[0][2], 420)
Пример #16
0
 def test_devices_loaded(self, MockServer) -> None:
     """Started hub should have parsed device info."""
     hub = Hub("1.2.3.4", "1234", "token")
     run(hub.start())
     self.assertEqual(len(hub.devices), 9)
Пример #17
0
 def test_custom_event_port_from_url(self, MockServer) -> None:
     """Event server port should come from event URL if none was provided."""
     MockServer.return_value.url = "http://127.0.0.1:81"
     hub = Hub("1.2.3.4", "1234", "token", event_url="http://foo.local:416")
     wait_for(hub.start())
     self.assertEqual(MockServer.call_args[0][2], 416)
Пример #18
0
 def test_custom_event_port_and_url(self, MockServer) -> None:
     """Explicit event server port should override port from URL."""
     MockServer.return_value.url = "http://127.0.0.1:81"
     hub = Hub("1.2.3.4", "1234", "token", 420, "http://foo.local:416")
     wait_for(hub.start())
     self.assertEqual(MockServer.call_args[0][2], 420)