From 65c3ffd522345069e7a358641a3556e10be2f6e4 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Fri, 29 Apr 2022 19:00:44 +0200 Subject: [PATCH] Fix sql integration issues 5.0 beta (#71063) Co-authored-by: Paulus Schoutsen --- homeassistant/components/sql/config_flow.py | 30 ++++++++----------- homeassistant/components/sql/strings.json | 4 +++ .../components/sql/translations/en.json | 4 +++ tests/components/sql/__init__.py | 12 +++++++- tests/components/sql/test_config_flow.py | 27 ++++++++++------- tests/components/sql/test_sensor.py | 2 +- 6 files changed, 48 insertions(+), 31 deletions(-) diff --git a/homeassistant/components/sql/config_flow.py b/homeassistant/components/sql/config_flow.py index 4bb9f6c724c..9150cb8f63d 100644 --- a/homeassistant/components/sql/config_flow.py +++ b/homeassistant/components/sql/config_flow.py @@ -23,17 +23,12 @@ _LOGGER = logging.getLogger(__name__) DATA_SCHEMA = vol.Schema( { - vol.Optional(CONF_DB_URL): selector.TextSelector(selector.TextSelectorConfig()), - vol.Required(CONF_COLUMN_NAME): selector.TextSelector( - selector.TextSelectorConfig() - ), - vol.Required(CONF_QUERY): selector.TextSelector(selector.TextSelectorConfig()), - vol.Optional(CONF_UNIT_OF_MEASUREMENT): selector.TextSelector( - selector.TextSelectorConfig() - ), - vol.Optional(CONF_VALUE_TEMPLATE): selector.TemplateSelector( - selector.TemplateSelectorConfig() - ), + vol.Required(CONF_NAME, default="Select SQL Query"): selector.TextSelector(), + vol.Optional(CONF_DB_URL): selector.TextSelector(), + vol.Required(CONF_COLUMN_NAME): selector.TextSelector(), + vol.Required(CONF_QUERY): selector.TextSelector(), + vol.Optional(CONF_UNIT_OF_MEASUREMENT): selector.TextSelector(), + vol.Optional(CONF_VALUE_TEMPLATE): selector.TemplateSelector(), } ) @@ -109,8 +104,7 @@ class SQLConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): column = user_input[CONF_COLUMN_NAME] uom = user_input.get(CONF_UNIT_OF_MEASUREMENT) value_template = user_input.get(CONF_VALUE_TEMPLATE) - - name = f"Select {column} SQL query" + name = user_input[CONF_NAME] try: validate_sql_select(query) @@ -182,17 +176,17 @@ class SQLOptionsFlowHandler(config_entries.OptionsFlow): description={ "suggested_value": self.entry.options[CONF_DB_URL] }, - ): selector.selector({"text": {}}), + ): selector.TextSelector(), vol.Required( CONF_QUERY, description={"suggested_value": self.entry.options[CONF_QUERY]}, - ): selector.selector({"text": {}}), + ): selector.TextSelector(), vol.Required( CONF_COLUMN_NAME, description={ "suggested_value": self.entry.options[CONF_COLUMN_NAME] }, - ): selector.selector({"text": {}}), + ): selector.TextSelector(), vol.Optional( CONF_UNIT_OF_MEASUREMENT, description={ @@ -200,7 +194,7 @@ class SQLOptionsFlowHandler(config_entries.OptionsFlow): CONF_UNIT_OF_MEASUREMENT ) }, - ): selector.selector({"text": {}}), + ): selector.TextSelector(), vol.Optional( CONF_VALUE_TEMPLATE, description={ @@ -208,7 +202,7 @@ class SQLOptionsFlowHandler(config_entries.OptionsFlow): CONF_VALUE_TEMPLATE ) }, - ): selector.selector({"text": {}}), + ): selector.TemplateSelector(), } ), errors=errors, diff --git a/homeassistant/components/sql/strings.json b/homeassistant/components/sql/strings.json index 0d174060d1b..8d3a194ac3e 100644 --- a/homeassistant/components/sql/strings.json +++ b/homeassistant/components/sql/strings.json @@ -12,6 +12,7 @@ "user": { "data": { "db_url": "Database URL", + "name": "[%key:common::config_flow::data::name%]", "query": "Select Query", "column": "Column", "unit_of_measurement": "Unit of Measure", @@ -19,6 +20,7 @@ }, "data_description": { "db_url": "Database URL, leave empty to use default HA database", + "name": "Name that will be used for Config Entry and also the Sensor", "query": "Query to run, needs to start with 'SELECT'", "column": "Column for returned query to present as state", "unit_of_measurement": "Unit of Measure (optional)", @@ -32,6 +34,7 @@ "init": { "data": { "db_url": "[%key:component::sql::config::step::user::data::db_url%]", + "name": "[%key:component::sql::config::step::user::data::name%]", "query": "[%key:component::sql::config::step::user::data::query%]", "column": "[%key:component::sql::config::step::user::data::column%]", "unit_of_measurement": "[%key:component::sql::config::step::user::data::unit_of_measurement%]", @@ -39,6 +42,7 @@ }, "data_description": { "db_url": "[%key:component::sql::config::step::user::data_description::db_url%]", + "name": "[%key:component::sql::config::step::user::data_description::name%]", "query": "[%key:component::sql::config::step::user::data_description::query%]", "column": "[%key:component::sql::config::step::user::data_description::column%]", "unit_of_measurement": "[%key:component::sql::config::step::user::data_description::unit_of_measurement%]", diff --git a/homeassistant/components/sql/translations/en.json b/homeassistant/components/sql/translations/en.json index 3b1fc223c00..4b72d024df4 100644 --- a/homeassistant/components/sql/translations/en.json +++ b/homeassistant/components/sql/translations/en.json @@ -13,6 +13,7 @@ "data": { "column": "Column", "db_url": "Database URL", + "name": "Name", "query": "Select Query", "unit_of_measurement": "Unit of Measure", "value_template": "Value Template" @@ -20,6 +21,7 @@ "data_description": { "column": "Column for returned query to present as state", "db_url": "Database URL, leave empty to use default HA database", + "name": "Name that will be used for Config Entry and also the Sensor", "query": "Query to run, needs to start with 'SELECT'", "unit_of_measurement": "Unit of Measure (optional)", "value_template": "Value Template (optional)" @@ -38,6 +40,7 @@ "data": { "column": "Column", "db_url": "Database URL", + "name": "Name", "query": "Select Query", "unit_of_measurement": "Unit of Measure", "value_template": "Value Template" @@ -45,6 +48,7 @@ "data_description": { "column": "Column for returned query to present as state", "db_url": "Database URL, leave empty to use default HA database", + "name": "Name that will be used for Config Entry and also the Sensor", "query": "Query to run, needs to start with 'SELECT'", "unit_of_measurement": "Unit of Measure (optional)", "value_template": "Value Template (optional)" diff --git a/tests/components/sql/__init__.py b/tests/components/sql/__init__.py index 7138a86a5d6..db65034bd11 100644 --- a/tests/components/sql/__init__.py +++ b/tests/components/sql/__init__.py @@ -6,19 +6,28 @@ from typing import Any from homeassistant.components.recorder import CONF_DB_URL from homeassistant.components.sql.const import CONF_COLUMN_NAME, CONF_QUERY, DOMAIN from homeassistant.config_entries import SOURCE_USER -from homeassistant.const import CONF_UNIT_OF_MEASUREMENT +from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry ENTRY_CONFIG = { CONF_DB_URL: "sqlite://", + CONF_NAME: "Get Value", CONF_QUERY: "SELECT 5 as value", CONF_COLUMN_NAME: "value", CONF_UNIT_OF_MEASUREMENT: "MiB", } ENTRY_CONFIG_INVALID_QUERY = { + CONF_DB_URL: "sqlite://", + CONF_NAME: "Get Value", + CONF_QUERY: "UPDATE 5 as value", + CONF_COLUMN_NAME: "size", + CONF_UNIT_OF_MEASUREMENT: "MiB", +} + +ENTRY_CONFIG_INVALID_QUERY_OPT = { CONF_DB_URL: "sqlite://", CONF_QUERY: "UPDATE 5 as value", CONF_COLUMN_NAME: "size", @@ -27,6 +36,7 @@ ENTRY_CONFIG_INVALID_QUERY = { ENTRY_CONFIG_NO_RESULTS = { CONF_DB_URL: "sqlite://", + CONF_NAME: "Get Value", CONF_QUERY: "SELECT kalle as value from no_table;", CONF_COLUMN_NAME: "value", CONF_UNIT_OF_MEASUREMENT: "MiB", diff --git a/tests/components/sql/test_config_flow.py b/tests/components/sql/test_config_flow.py index d38abce5da7..ec851b491b7 100644 --- a/tests/components/sql/test_config_flow.py +++ b/tests/components/sql/test_config_flow.py @@ -14,7 +14,12 @@ from homeassistant.data_entry_flow import ( RESULT_TYPE_FORM, ) -from . import ENTRY_CONFIG, ENTRY_CONFIG_INVALID_QUERY, ENTRY_CONFIG_NO_RESULTS +from . import ( + ENTRY_CONFIG, + ENTRY_CONFIG_INVALID_QUERY, + ENTRY_CONFIG_INVALID_QUERY_OPT, + ENTRY_CONFIG_NO_RESULTS, +) from tests.common import MockConfigEntry @@ -40,14 +45,14 @@ async def test_form(hass: HomeAssistant) -> None: print(ENTRY_CONFIG) assert result2["type"] == RESULT_TYPE_CREATE_ENTRY - assert result2["title"] == "Select value SQL query" + assert result2["title"] == "Get Value" assert result2["options"] == { "db_url": "sqlite://", + "name": "Get Value", "query": "SELECT 5 as value", "column": "value", "unit_of_measurement": "MiB", "value_template": None, - "name": "Select value SQL query", } assert len(mock_setup_entry.mock_calls) == 1 @@ -67,14 +72,14 @@ async def test_import_flow_success(hass: HomeAssistant) -> None: await hass.async_block_till_done() assert result2["type"] == RESULT_TYPE_CREATE_ENTRY - assert result2["title"] == "Select value SQL query" + assert result2["title"] == "Get Value" assert result2["options"] == { "db_url": "sqlite://", + "name": "Get Value", "query": "SELECT 5 as value", "column": "value", "unit_of_measurement": "MiB", "value_template": None, - "name": "Select value SQL query", } assert len(mock_setup_entry.mock_calls) == 1 @@ -158,14 +163,14 @@ async def test_flow_fails_invalid_query(hass: HomeAssistant) -> None: ) assert result5["type"] == RESULT_TYPE_CREATE_ENTRY - assert result5["title"] == "Select value SQL query" + assert result5["title"] == "Get Value" assert result5["options"] == { "db_url": "sqlite://", + "name": "Get Value", "query": "SELECT 5 as value", "column": "value", "unit_of_measurement": "MiB", "value_template": None, - "name": "Select value SQL query", } @@ -176,11 +181,11 @@ async def test_options_flow(hass: HomeAssistant) -> None: data={}, options={ "db_url": "sqlite://", + "name": "Get Value", "query": "SELECT 5 as value", "column": "value", "unit_of_measurement": "MiB", "value_template": None, - "name": "Select value SQL query", }, ) entry.add_to_hass(hass) @@ -223,11 +228,11 @@ async def test_options_flow_fails_db_url(hass: HomeAssistant) -> None: data={}, options={ "db_url": "sqlite://", + "name": "Get Value", "query": "SELECT 5 as value", "column": "value", "unit_of_measurement": "MiB", "value_template": None, - "name": "Select value SQL query", }, ) entry.add_to_hass(hass) @@ -267,11 +272,11 @@ async def test_options_flow_fails_invalid_query( data={}, options={ "db_url": "sqlite://", + "name": "Get Value", "query": "SELECT 5 as value", "column": "value", "unit_of_measurement": "MiB", "value_template": None, - "name": "Select size SQL query", }, ) entry.add_to_hass(hass) @@ -287,7 +292,7 @@ async def test_options_flow_fails_invalid_query( result2 = await hass.config_entries.options.async_configure( result["flow_id"], - user_input=ENTRY_CONFIG_INVALID_QUERY, + user_input=ENTRY_CONFIG_INVALID_QUERY_OPT, ) assert result2["type"] == RESULT_TYPE_FORM diff --git a/tests/components/sql/test_sensor.py b/tests/components/sql/test_sensor.py index 77717ec400c..0eb3bf70683 100644 --- a/tests/components/sql/test_sensor.py +++ b/tests/components/sql/test_sensor.py @@ -52,7 +52,7 @@ async def test_import_query(hass: HomeAssistant) -> None: assert hass.config_entries.async_entries(DOMAIN) options = hass.config_entries.async_entries(DOMAIN)[0].options - assert options[CONF_NAME] == "Select value SQL query" + assert options[CONF_NAME] == "count_tables" async def test_query_value_template(hass: HomeAssistant) -> None: