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"
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 } })
def test_version_missing(self): with pytest.raises(ValueError): PingResponse({ "description": "A Minecraft Server", "players": { "max": 20, "online": 0 } })
def test_players_missing(self): with pytest.raises(ValueError): PingResponse({ "description": "A Minecraft Server", "version": { "name": "1.8-pre1", "protocol": 44 } })
def test_description_missing(self): with pytest.raises(ValueError): PingResponse({ "players": { "max": 20, "online": 0 }, "version": { "name": "1.8-pre1", "protocol": 44 } })
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"
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"
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")
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)
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"
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")
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]
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)
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)
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
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]
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"
def test_valid(self): players = PingResponse.Version({"name": "foo", "protocol": 5}) self.assertEqual(players.name, "foo") self.assertEqual(players.protocol, 5)
def test_valid(self): players = PingResponse.Players({"max": 20, "online": 5}) assert players.max == 20 assert players.online == 5
def test_sample_invalid(self): with pytest.raises(ValueError): PingResponse.Players({"max": 20, "online": 1, "sample": "foo"})
def test_sample_missing(self): players = PingResponse.Players({"max": 20, "online": 1}) assert players.sample == None
def test_protocol_invalid(self): with pytest.raises(ValueError): PingResponse.Version({"name": "foo", "protocol": "bar"})
def test_protocol_missing(self): with pytest.raises(ValueError): PingResponse.Version({"name": "foo"})
def test_invalid(self): with pytest.raises(ValueError): PingResponse.Version("foo")
def test_valid(self): players = PingResponse.Players({"max": 20, "online": 5}) self.assertEqual(players.max, 20) self.assertEqual(players.online, 5)
def test_name_invalid(self): with pytest.raises(ValueError): PingResponse.Version({"name": {}, "protocol": 5})
def test_sample_missing(self): players = PingResponse.Players({"max": 20, "online": 1}) self.assertIsNone(players.sample)
def test_valid(self): players = PingResponse.Version({"name": "foo", "protocol": 5}) assert players.name == "foo" assert players.protocol == 5
def test_name_missing(self): with pytest.raises(ValueError): PingResponse.Version({"protocol": 5})
def test_online_missing(self): with pytest.raises(ValueError): PingResponse.Players({"max": 20})