From 92fef0f2ba7078782b23431ddd7acfe2c5aee50c Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 30 Nov 2022 14:05:01 +0100 Subject: [PATCH] Improve resource validation in scrape config flow (#82965) * Improve resource validation in scrape * Coverage --- homeassistant/components/scrape/config_flow.py | 5 ++++- tests/components/scrape/test_config_flow.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/scrape/config_flow.py b/homeassistant/components/scrape/config_flow.py index d28d2feb40d..f4b6420df66 100644 --- a/homeassistant/components/scrape/config_flow.py +++ b/homeassistant/components/scrape/config_flow.py @@ -123,9 +123,12 @@ async def validate_rest_setup( hass = async_get_hass() rest_config: dict[str, Any] = COMBINED_SCHEMA(user_input) try: - create_rest_data_from_config(hass, rest_config) + rest = create_rest_data_from_config(hass, rest_config) + await rest.async_update() except Exception as err: raise SchemaFlowError("resource_error") from err + if rest.data is None: + raise SchemaFlowError("resource_error") return user_input diff --git a/tests/components/scrape/test_config_flow.py b/tests/components/scrape/test_config_flow.py index 67a55f5a144..883d9ec4ab9 100644 --- a/tests/components/scrape/test_config_flow.py +++ b/tests/components/scrape/test_config_flow.py @@ -115,6 +115,22 @@ async def test_flow_fails(hass: HomeAssistant, get_data: MockRestData) -> None: assert result2["errors"] == {"base": "resource_error"} + with patch( + "homeassistant.components.rest.RestData", + return_value=MockRestData("test_scrape_sensor_no_data"), + ): + result2 = await hass.config_entries.flow.async_configure( + result["flow_id"], + user_input={ + CONF_RESOURCE: "https://www.home-assistant.io", + CONF_METHOD: "GET", + CONF_VERIFY_SSL: True, + CONF_TIMEOUT: 10.0, + }, + ) + + assert result2["errors"] == {"base": "resource_error"} + with patch("homeassistant.components.rest.RestData", return_value=get_data,), patch( "homeassistant.components.scrape.async_setup_entry", return_value=True,