diff --git a/homeassistant/components/generic/config_flow.py b/homeassistant/components/generic/config_flow.py index df8946ccbad..70703bbc6ae 100644 --- a/homeassistant/components/generic/config_flow.py +++ b/homeassistant/components/generic/config_flow.py @@ -324,16 +324,7 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): # abort if we've already got this one. if self.check_for_existing(import_config): return self.async_abort(reason="already_exists") - errors, still_format = await async_test_still(self.hass, import_config) - if errors.get(CONF_STILL_IMAGE_URL) == "template_error": - _LOGGER.warning( - "Could not render template, but it could be that " - "referenced entities are still initialising. " - "Continuing assuming that imported YAML template is valid" - ) - errors.pop(CONF_STILL_IMAGE_URL) - still_format = import_config.get(CONF_CONTENT_TYPE, "image/jpeg") - errors = errors | await async_test_stream(self.hass, import_config) + # Don't bother testing the still or stream details on yaml import. still_url = import_config.get(CONF_STILL_IMAGE_URL) stream_url = import_config.get(CONF_STREAM_SOURCE) name = import_config.get( @@ -341,15 +332,10 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN): ) if CONF_LIMIT_REFETCH_TO_URL_CHANGE not in import_config: import_config[CONF_LIMIT_REFETCH_TO_URL_CHANGE] = False - if not errors: - import_config[CONF_CONTENT_TYPE] = still_format - await self.async_set_unique_id(self.flow_id) - return self.async_create_entry(title=name, data={}, options=import_config) - _LOGGER.error( - "Error importing generic IP camera platform config: unexpected error '%s'", - list(errors.values()), - ) - return self.async_abort(reason="unknown") + still_format = import_config.get(CONF_CONTENT_TYPE, "image/jpeg") + import_config[CONF_CONTENT_TYPE] = still_format + await self.async_set_unique_id(self.flow_id) + return self.async_create_entry(title=name, data={}, options=import_config) class GenericOptionsFlowHandler(OptionsFlow): diff --git a/tests/components/generic/test_camera.py b/tests/components/generic/test_camera.py index 5a96391e10e..6e8b804f848 100644 --- a/tests/components/generic/test_camera.py +++ b/tests/components/generic/test_camera.py @@ -43,12 +43,12 @@ async def test_fetching_url(hass, hass_client, fakeimgbytes_png, mock_av_open): resp = await client.get("/api/camera_proxy/camera.config_test") assert resp.status == HTTPStatus.OK - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 body = await resp.read() assert body == fakeimgbytes_png resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 2 @respx.mock @@ -143,19 +143,19 @@ async def test_limit_refetch(hass, hass_client, fakeimgbytes_png, fakeimgbytes_j ): resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 assert resp.status == HTTPStatus.OK hass.states.async_set("sensor.temp", "10") resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 2 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_png resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 2 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_png @@ -164,7 +164,7 @@ async def test_limit_refetch(hass, hass_client, fakeimgbytes_png, fakeimgbytes_j # Url change = fetch new image resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 4 + assert respx.calls.call_count == 3 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_jpg @@ -172,7 +172,7 @@ async def test_limit_refetch(hass, hass_client, fakeimgbytes_png, fakeimgbytes_j # Cause a template render error hass.states.async_remove("sensor.temp") resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 4 + assert respx.calls.call_count == 3 assert resp.status == HTTPStatus.OK body = await resp.read() assert body == fakeimgbytes_jpg @@ -392,14 +392,14 @@ async def test_camera_content_type( client = await hass_client() resp_1 = await client.get("/api/camera_proxy/camera.config_test_svg") - assert respx.calls.call_count == 3 + assert respx.calls.call_count == 1 assert resp_1.status == HTTPStatus.OK assert resp_1.content_type == "image/svg+xml" body = await resp_1.read() assert body == fakeimgbytes_svg resp_2 = await client.get("/api/camera_proxy/camera.config_test_jpg") - assert respx.calls.call_count == 4 + assert respx.calls.call_count == 2 assert resp_2.status == HTTPStatus.OK assert resp_2.content_type == "image/jpeg" body = await resp_2.read() @@ -432,7 +432,7 @@ async def test_timeout_cancelled(hass, hass_client, fakeimgbytes_png, fakeimgbyt resp = await client.get("/api/camera_proxy/camera.config_test") assert resp.status == HTTPStatus.OK - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 assert await resp.read() == fakeimgbytes_png respx.get("http://example.com").respond(stream=fakeimgbytes_jpg) @@ -442,7 +442,7 @@ async def test_timeout_cancelled(hass, hass_client, fakeimgbytes_png, fakeimgbyt side_effect=asyncio.CancelledError(), ): resp = await client.get("/api/camera_proxy/camera.config_test") - assert respx.calls.call_count == 2 + assert respx.calls.call_count == 1 assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR respx.get("http://example.com").side_effect = [ @@ -450,7 +450,7 @@ async def test_timeout_cancelled(hass, hass_client, fakeimgbytes_png, fakeimgbyt httpx.TimeoutException, ] - for total_calls in range(3, 5): + for total_calls in range(2, 4): resp = await client.get("/api/camera_proxy/camera.config_test") assert respx.calls.call_count == total_calls assert resp.status == HTTPStatus.OK diff --git a/tests/components/generic/test_config_flow.py b/tests/components/generic/test_config_flow.py index 548b09cf0bb..5b779166ee8 100644 --- a/tests/components/generic/test_config_flow.py +++ b/tests/components/generic/test_config_flow.py @@ -167,8 +167,9 @@ async def test_form_only_still_sample(hass, user_flow, image_file): async def test_form_rtsp_mode(hass, fakeimg_png, mock_av_open, user_flow): """Test we complete ok if the user enters a stream url.""" with mock_av_open as mock_setup: - data = TESTDATA + data = TESTDATA.copy() data[CONF_RTSP_TRANSPORT] = "tcp" + data[CONF_STREAM_SOURCE] = "rtsp://127.0.0.1/testurl/2" result2 = await hass.config_entries.flow.async_configure( user_flow["flow_id"], data ) @@ -178,7 +179,7 @@ async def test_form_rtsp_mode(hass, fakeimg_png, mock_av_open, user_flow): assert result2["options"] == { CONF_STILL_IMAGE_URL: "http://127.0.0.1/testurl/1", CONF_AUTHENTICATION: HTTP_BASIC_AUTHENTICATION, - CONF_STREAM_SOURCE: "http://127.0.0.1/testurl/2", + CONF_STREAM_SOURCE: "rtsp://127.0.0.1/testurl/2", CONF_RTSP_TRANSPORT: "tcp", CONF_USERNAME: "fred_flintstone", CONF_PASSWORD: "bambam", @@ -216,7 +217,6 @@ async def test_form_only_stream(hass, mock_av_open, fakeimgbytes_jpg): assert result3["options"] == { CONF_AUTHENTICATION: HTTP_BASIC_AUTHENTICATION, CONF_STREAM_SOURCE: "http://127.0.0.1/testurl/2", - CONF_RTSP_TRANSPORT: "tcp", CONF_USERNAME: "fred_flintstone", CONF_PASSWORD: "bambam", CONF_LIMIT_REFETCH_TO_URL_CHANGE: False, @@ -551,31 +551,6 @@ async def test_import(hass, fakeimg_png, mock_av_open): assert result2["type"] == data_entry_flow.RESULT_TYPE_ABORT -@respx.mock -async def test_import_invalid_still_image(hass, mock_av_open): - """Test configuration.yaml import used during migration.""" - respx.get("http://127.0.0.1/testurl/1").respond(stream=b"invalid") - with mock_av_open: - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=TESTDATA_YAML - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "unknown" - - -@respx.mock -async def test_import_other_error(hass, fakeimgbytes_png): - """Test that non-specific import errors are raised.""" - respx.get("http://127.0.0.1/testurl/1").respond(stream=fakeimgbytes_png) - with patch( - "homeassistant.components.generic.config_flow.av.open", - side_effect=OSError("other error"), - ), pytest.raises(OSError): - await hass.config_entries.flow.async_init( - DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=TESTDATA_YAML - ) - - # These above can be deleted after deprecation period is finished.