async def setup_mikrotik_entry(hass, **kwargs): """Set up Mikrotik integration successfully.""" support_wireless = kwargs.get("support_wireless", True) dhcp_data = kwargs.get("dhcp_data", DHCP_DATA) wireless_data = kwargs.get("wireless_data", WIRELESS_DATA) def mock_command(self, cmd, params=None): if cmd == mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.IS_WIRELESS]: return support_wireless if cmd == mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.DHCP]: return dhcp_data if cmd == mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.WIRELESS]: return wireless_data if cmd == mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.ARP]: return ARP_DATA return {} config_entry = MockConfigEntry( domain=mikrotik.DOMAIN, data=MOCK_DATA, options=MOCK_OPTIONS ) config_entry.add_to_hass(hass) if "force_dhcp" in kwargs: config_entry.options = {**config_entry.options, "force_dhcp": True} if "arp_ping" in kwargs: config_entry.options = {**config_entry.options, "arp_ping": True} with patch("librouteros.connect"), patch.object( mikrotik.hub.MikrotikData, "command", new=mock_command ): await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() return hass.data[mikrotik.DOMAIN][config_entry.entry_id]
async def test_device_registry_cleanup( hass: HomeAssistant, mock_config_entry: MockConfigEntry, aioclient_mock: AiohttpClientMocker, caplog: LogCaptureFixture, ) -> None: """Test that we remove untracked repositories from the decvice registry.""" mock_config_entry.options = {CONF_REPOSITORIES: ["home-assistant/core"]} await setup_github_integration(hass, mock_config_entry, aioclient_mock) device_registry = dr.async_get(hass) devices = dr.async_entries_for_config_entry( registry=device_registry, config_entry_id=mock_config_entry.entry_id, ) assert len(devices) == 1 mock_config_entry.options = {CONF_REPOSITORIES: []} assert await hass.config_entries.async_reload(mock_config_entry.entry_id) await hass.async_block_till_done() assert ( f"Unlinking device {devices[0].id} for untracked repository home-assistant/core from config entry {mock_config_entry.entry_id}" in caplog.text) devices = dr.async_entries_for_config_entry( registry=device_registry, config_entry_id=mock_config_entry.entry_id, ) assert len(devices) == 0
async def test_options_flow( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_setup_entry: None, ) -> None: """Test options flow.""" mock_config_entry.options = { CONF_REPOSITORIES: ["homeassistant/core", "homeassistant/architecture"] } mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() result = await hass.config_entries.options.async_init(mock_config_entry.entry_id) assert result["type"] == "form" assert result["step_id"] == "init" result = await hass.config_entries.options.async_configure( result["flow_id"], user_input={CONF_REPOSITORIES: ["homeassistant/core"]}, ) assert "homeassistant/architecture" not in result["data"][CONF_REPOSITORIES]
async def test_options_deleting_effect(hass): """Test options for deleting effect""" test_effects = { "test": { "color_scheme": "Mood", "color": "Green", "cycle_speed": 1, "mode": 1 }, "test_2": { "color_scheme": "Mood", "color": "Green", "cycle_speed": 1, "mode": 1, }, } expected_effetcs = { "test": { "color_scheme": "Mood", "color": "Green", "cycle_speed": 1, "mode": 1 }, } entry = MockConfigEntry(domain=cololight.DOMAIN, data=DEMO_USER_INPUT, unique_id=HOST) entry.add_to_hass(hass) entry.options = test_effects result = await hass.config_entries.options.async_init(entry.entry_id) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "init" result = await hass.config_entries.options.async_configure( result["flow_id"], user_input={"select": "Delete"}) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "options_delete_custom_effect" result = await hass.config_entries.options.async_configure( result["flow_id"], user_input={ "name": ["test_2"], }, ) assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert entry.options == expected_effetcs
async def test_entry_diagnostics( hass: HomeAssistant, hass_client: ClientSession, mock_config_entry: MockConfigEntry, aioclient_mock: AiohttpClientMocker, ) -> None: """Test config entry diagnostics.""" mock_config_entry.options = {CONF_REPOSITORIES: ["home-assistant/core"]} response_json = json.loads(load_fixture("graphql.json", DOMAIN)) response_json["data"]["repository"]["full_name"] = "home-assistant/core" aioclient_mock.post( "https://api.github.com/graphql", json=response_json, headers=json.loads(load_fixture("base_headers.json", DOMAIN)), ) aioclient_mock.get( "https://api.github.com/rate_limit", json={"resources": { "core": { "remaining": 100, "limit": 100 } }}, headers={"Content-Type": "application/json"}, ) await setup_github_integration(hass, mock_config_entry, aioclient_mock) result = await get_diagnostics_for_config_entry( hass, hass_client, mock_config_entry, ) assert result["options"]["repositories"] == ["home-assistant/core"] assert result["rate_limit"] == { "resources": { "core": { "remaining": 100, "limit": 100 } } } assert (result["repositories"]["home-assistant/core"]["full_name"] == "home-assistant/core")