async def test_same_host(hass: HomeAssistantType) -> None:
    """Test abort in case of same host name."""
    with patch(
            "aiodns.DNSResolver.query",
            side_effect=aiodns.error.DNSError,
    ):
        with patch(
                "mcstatus.server.MinecraftServer.status",
                return_value=PingResponse(STATUS_RESPONSE_RAW),
        ):
            unique_id = "mc.dummyserver.com-25565"
            config_data = {
                CONF_NAME: DEFAULT_NAME,
                CONF_HOST: "mc.dummyserver.com",
                CONF_PORT: DEFAULT_PORT,
            }
            mock_config_entry = MockConfigEntry(domain=DOMAIN,
                                                unique_id=unique_id,
                                                data=config_data)
            mock_config_entry.add_to_hass(hass)

            result = await hass.config_entries.flow.async_init(
                DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT)

            assert result["type"] == RESULT_TYPE_ABORT
            assert result["reason"] == "already_configured"
Пример #2
0
    def test_raw(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertEqual(
            response.raw, {
                "description": "A Minecraft Server",
                "players": {
                    "max": 20,
                    "online": 0
                },
                "version": {
                    "name": "1.8-pre1",
                    "protocol": 44
                }
            })
Пример #3
0
 def test_version_missing(self):
     with pytest.raises(ValueError):
         PingResponse({
             "description": "A Minecraft Server",
             "players": {
                 "max": 20,
                 "online": 0
             }
         })
Пример #4
0
 def test_players_missing(self):
     with pytest.raises(ValueError):
         PingResponse({
             "description": "A Minecraft Server",
             "version": {
                 "name": "1.8-pre1",
                 "protocol": 44
             }
         })
Пример #5
0
 def test_description_missing(self):
     with pytest.raises(ValueError):
         PingResponse({
             "players": {
                 "max": 20,
                 "online": 0
             },
             "version": {
                 "name": "1.8-pre1",
                 "protocol": 44
             }
         })
Пример #6
0
    def test_description(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            },
        })

        assert response.description == "A Minecraft Server"
Пример #7
0
async def test_connection_succeeded_with_host(hass: HomeAssistant) -> None:
    """Test config entry in case of a successful connection with a host name."""
    with patch("aiodns.DNSResolver.query", side_effect=aiodns.error.DNSError,), patch(
        "mcstatus.server.MinecraftServer.status",
        return_value=PingResponse(STATUS_RESPONSE_RAW),
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT
        )

        assert result["type"] == FlowResultType.CREATE_ENTRY
        assert result["title"] == USER_INPUT[CONF_HOST]
        assert result["data"][CONF_NAME] == USER_INPUT[CONF_NAME]
        assert result["data"][CONF_HOST] == "mc.dummyserver.com"
Пример #8
0
    def test_sample(self):
        players = PingResponse.Players({
            "max":
            20,
            "online":
            1,
            "sample": [{
                "name": 'Dinnerbone',
                'id': "61699b2e-d327-4a01-9f1e-0ea8c3f06bc6"
            }]
        })

        self.assertIsNotNone(players.sample)
        self.assertEqual(players.sample[0].name, "Dinnerbone")
Пример #9
0
    def test_favicon_missing(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertIsNone(response.favicon)
Пример #10
0
    def test_sample(self):
        players = PingResponse.Players({
            "max":
            20,
            "online":
            1,
            "sample": [{
                "name": "Dinnerbone",
                "id": "61699b2e-d327-4a01-9f1e-0ea8c3f06bc6"
            }]
        })

        assert players.sample != None
        assert players.sample[0].name == "Dinnerbone"
Пример #11
0
    def test_favicon(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            },
            "favicon": "data:image/png;base64,foo"
        })

        self.assertEqual(response.favicon, "data:image/png;base64,foo")
Пример #12
0
async def test_connection_succeeded_with_host(hass: HomeAssistantType) -> None:
    """Test config entry in case of a successful connection with a host name."""
    with patch("mcstatus.server.MinecraftServer.ping", return_value=50):
        with patch(
                "mcstatus.server.MinecraftServer.status",
                return_value=PingResponse(STATUS_RESPONSE_RAW),
        ):
            result = await hass.config_entries.flow.async_init(
                DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT)

            assert result["type"] == RESULT_TYPE_CREATE_ENTRY
            assert result[
                "title"] == f"{USER_INPUT[CONF_HOST]}:{USER_INPUT[CONF_PORT]}"
            assert result["data"][CONF_NAME] == USER_INPUT[CONF_NAME]
            assert result["data"][CONF_HOST] == USER_INPUT[CONF_HOST]
            assert result["data"][CONF_PORT] == USER_INPUT[CONF_PORT]
Пример #13
0
    def test_version(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 0
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertIsNotNone(response.version)
        self.assertEqual(response.version.name, "1.8-pre1")
        self.assertEqual(response.version.protocol, 44)
Пример #14
0
    def test_players(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 5
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            }
        })

        self.assertIsNotNone(response.players)
        self.assertEqual(response.players.max, 20)
        self.assertEqual(response.players.online, 5)
Пример #15
0
    def test_players(self):
        response = PingResponse({
            "description": "A Minecraft Server",
            "players": {
                "max": 20,
                "online": 5
            },
            "version": {
                "name": "1.8-pre1",
                "protocol": 44
            },
        })

        assert response.players != None
        assert response.players.max == 20
        assert response.players.online == 5
Пример #16
0
async def test_connection_succeeded_with_srv_record(
        hass: HomeAssistant) -> None:
    """Test config entry in case of a successful connection with a SRV record."""
    with patch(
            "aiodns.DNSResolver.query",
            return_value=SRV_RECORDS,
    ), patch(
            "mcstatus.server.MinecraftServer.status",
            return_value=PingResponse(STATUS_RESPONSE_RAW),
    ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT_SRV)

        assert result["type"] == RESULT_TYPE_CREATE_ENTRY
        assert result["title"] == USER_INPUT_SRV[CONF_HOST]
        assert result["data"][CONF_NAME] == USER_INPUT_SRV[CONF_NAME]
        assert result["data"][CONF_HOST] == USER_INPUT_SRV[CONF_HOST]
Пример #17
0
async def test_connection_succeeded_with_ip6(hass: HomeAssistant) -> None:
    """Test config entry in case of a successful connection with an IPv6 address."""
    with patch("getmac.get_mac_address",
               return_value="01:23:45:67:89:ab"), patch(
                   "aiodns.DNSResolver.query",
                   side_effect=aiodns.error.DNSError,
               ), patch(
                   "mcstatus.server.MinecraftServer.status",
                   return_value=PingResponse(STATUS_RESPONSE_RAW),
               ):
        result = await hass.config_entries.flow.async_init(
            DOMAIN, context={"source": SOURCE_USER}, data=USER_INPUT_IPV6)

        assert result["type"] == RESULT_TYPE_CREATE_ENTRY
        assert result["title"] == USER_INPUT_IPV6[CONF_HOST]
        assert result["data"][CONF_NAME] == USER_INPUT_IPV6[CONF_NAME]
        assert result["data"][CONF_HOST] == "::ffff:0101:0101"
Пример #18
0
    def test_valid(self):
        players = PingResponse.Version({"name": "foo", "protocol": 5})

        self.assertEqual(players.name, "foo")
        self.assertEqual(players.protocol, 5)
Пример #19
0
    def test_valid(self):
        players = PingResponse.Players({"max": 20, "online": 5})

        assert players.max == 20
        assert players.online == 5
Пример #20
0
 def test_sample_invalid(self):
     with pytest.raises(ValueError):
         PingResponse.Players({"max": 20, "online": 1, "sample": "foo"})
Пример #21
0
 def test_sample_missing(self):
     players = PingResponse.Players({"max": 20, "online": 1})
     assert players.sample == None
Пример #22
0
 def test_protocol_invalid(self):
     with pytest.raises(ValueError):
         PingResponse.Version({"name": "foo", "protocol": "bar"})
Пример #23
0
 def test_protocol_missing(self):
     with pytest.raises(ValueError):
         PingResponse.Version({"name": "foo"})
Пример #24
0
 def test_invalid(self):
     with pytest.raises(ValueError):
         PingResponse.Version("foo")
Пример #25
0
    def test_valid(self):
        players = PingResponse.Players({"max": 20, "online": 5})

        self.assertEqual(players.max, 20)
        self.assertEqual(players.online, 5)
Пример #26
0
 def test_name_invalid(self):
     with pytest.raises(ValueError):
         PingResponse.Version({"name": {}, "protocol": 5})
Пример #27
0
 def test_sample_missing(self):
     players = PingResponse.Players({"max": 20, "online": 1})
     self.assertIsNone(players.sample)
Пример #28
0
    def test_valid(self):
        players = PingResponse.Version({"name": "foo", "protocol": 5})

        assert players.name == "foo"
        assert players.protocol == 5
Пример #29
0
 def test_name_missing(self):
     with pytest.raises(ValueError):
         PingResponse.Version({"protocol": 5})
Пример #30
0
 def test_online_missing(self):
     with pytest.raises(ValueError):
         PingResponse.Players({"max": 20})