From daa96c93590489bb6c7c47a96c461821c4f6432f Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Thu, 30 Apr 2020 23:33:09 +0200 Subject: [PATCH 1/4] Add simple options flow --- homeassistant/components/unifi/config_flow.py | 37 ++++++++++++++++++- homeassistant/components/unifi/strings.json | 9 +++++ tests/components/unifi/test_config_flow.py | 36 ++++++++++++++++-- 3 files changed, 78 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/unifi/config_flow.py b/homeassistant/components/unifi/config_flow.py index f42acf54e9df82..0ec4f2fa743395 100644 --- a/homeassistant/components/unifi/config_flow.py +++ b/homeassistant/components/unifi/config_flow.py @@ -175,7 +175,42 @@ async def async_step_init(self, user_input=None): """Manage the UniFi options.""" self.controller = self.hass.data[UNIFI_DOMAIN][self.config_entry.entry_id] self.options[CONF_BLOCK_CLIENT] = self.controller.option_block_clients - return await self.async_step_device_tracker() + if self.show_advanced_options: + return await self.async_step_device_tracker() + else: + return await self.async_step_simple_options() + + async def async_step_simple_options(self, user_input=None): + """For simple Jack.""" + if user_input is not None: + self.options.update(user_input) + return await self._update_options() + + clients_to_block = {} + + for client in self.controller.api.clients.values(): + clients_to_block[ + client.mac + ] = f"{client.name or client.hostname} ({client.mac})" + + return self.async_show_form( + step_id="simple_options", + data_schema=vol.Schema( + { + vol.Optional( + CONF_TRACK_CLIENTS, + default=self.controller.option_track_clients, + ): bool, + vol.Optional( + CONF_TRACK_DEVICES, + default=self.controller.option_track_devices, + ): bool, + vol.Optional( + CONF_BLOCK_CLIENT, default=self.options[CONF_BLOCK_CLIENT] + ): cv.multi_select(clients_to_block), + } + ), + ) async def async_step_device_tracker(self, user_input=None): """Manage the device tracker options.""" diff --git a/homeassistant/components/unifi/strings.json b/homeassistant/components/unifi/strings.json index 6c142d371c925a..e15b1ba6f71d27 100644 --- a/homeassistant/components/unifi/strings.json +++ b/homeassistant/components/unifi/strings.json @@ -46,6 +46,15 @@ "description": "Configure client controls\n\nCreate switches for serial numbers you want to control network access for.", "title": "UniFi options 2/3" }, + "simple_options": { + "data": { + "track_clients": "Track network clients", + "track_devices": "Track network devices (Ubiquiti devices)", + "block_client": "Network access controlled clients" + }, + "description": "Configure statistics sensors", + "title": "UniFi options 3/3" + }, "statistics_sensors": { "data": { "allow_bandwidth_sensors": "Bandwidth usage sensors for network clients" diff --git a/tests/components/unifi/test_config_flow.py b/tests/components/unifi/test_config_flow.py index ae738ba8a644ef..489ae25a60c8c2 100644 --- a/tests/components/unifi/test_config_flow.py +++ b/tests/components/unifi/test_config_flow.py @@ -264,14 +264,14 @@ async def test_flow_fails_unknown_problem(hass, aioclient_mock): assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT -async def test_option_flow(hass): - """Test config flow options.""" +async def test_advanced_option_flow(hass): + """Test advanced config flow options.""" controller = await setup_unifi_integration( hass, clients_response=CLIENTS, wlans_response=WLANS ) result = await hass.config_entries.options.async_init( - controller.config_entry.entry_id + controller.config_entry.entry_id, context={"show_advanced_options": True} ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM @@ -315,3 +315,33 @@ async def test_option_flow(hass): CONF_BLOCK_CLIENT: [CLIENTS[0]["mac"]], CONF_ALLOW_BANDWIDTH_SENSORS: True, } + + +async def test_simple_option_flow(hass): + """Test simple config flow options.""" + controller = await setup_unifi_integration( + hass, clients_response=CLIENTS, wlans_response=WLANS + ) + + result = await hass.config_entries.options.async_init( + controller.config_entry.entry_id, context={"show_advanced_options": False} + ) + + assert result["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result["step_id"] == "simple_options" + + result = await hass.config_entries.options.async_configure( + result["flow_id"], + user_input={ + CONF_TRACK_CLIENTS: False, + CONF_TRACK_DEVICES: False, + CONF_BLOCK_CLIENT: [CLIENTS[0]["mac"]], + }, + ) + + assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert result["data"] == { + CONF_TRACK_CLIENTS: False, + CONF_TRACK_DEVICES: False, + CONF_BLOCK_CLIENT: [CLIENTS[0]["mac"]], + } From ef361ce7a76beb390c1bc31c84516648dbd4d8ee Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Thu, 30 Apr 2020 23:36:52 +0200 Subject: [PATCH 2/4] Better strings --- homeassistant/components/unifi/strings.json | 4 ++-- homeassistant/components/unifi/translations/en.json | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/unifi/strings.json b/homeassistant/components/unifi/strings.json index e15b1ba6f71d27..b3d89d918eb3ce 100644 --- a/homeassistant/components/unifi/strings.json +++ b/homeassistant/components/unifi/strings.json @@ -52,8 +52,8 @@ "track_devices": "Track network devices (Ubiquiti devices)", "block_client": "Network access controlled clients" }, - "description": "Configure statistics sensors", - "title": "UniFi options 3/3" + "description": "Configure UniFi integration", + "title": "UniFi options" }, "statistics_sensors": { "data": { diff --git a/homeassistant/components/unifi/translations/en.json b/homeassistant/components/unifi/translations/en.json index 618c393b7aa523..a49d9477507a1c 100644 --- a/homeassistant/components/unifi/translations/en.json +++ b/homeassistant/components/unifi/translations/en.json @@ -46,6 +46,15 @@ "description": "Configure device tracking", "title": "UniFi options 1/3" }, + "simple_options": { + "data": { + "track_clients": "Track network clients", + "track_devices": "Track network devices (Ubiquiti devices)", + "block_client": "Network access controlled clients" + }, + "description": "Configure UniFi integration", + "title": "UniFi options" + }, "statistics_sensors": { "data": { "allow_bandwidth_sensors": "Bandwidth usage sensors for network clients" From d5277597c3b0561bd06b899897b123f6c4bc8f9e Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Fri, 1 May 2020 00:24:08 +0200 Subject: [PATCH 3/4] Fix CI lint --- homeassistant/components/unifi/config_flow.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/unifi/config_flow.py b/homeassistant/components/unifi/config_flow.py index 0ec4f2fa743395..72ba593bae6ed6 100644 --- a/homeassistant/components/unifi/config_flow.py +++ b/homeassistant/components/unifi/config_flow.py @@ -175,10 +175,11 @@ async def async_step_init(self, user_input=None): """Manage the UniFi options.""" self.controller = self.hass.data[UNIFI_DOMAIN][self.config_entry.entry_id] self.options[CONF_BLOCK_CLIENT] = self.controller.option_block_clients + if self.show_advanced_options: return await self.async_step_device_tracker() - else: - return await self.async_step_simple_options() + + return await self.async_step_simple_options() async def async_step_simple_options(self, user_input=None): """For simple Jack.""" From 509d771be688c29cbe108a92de4a90c5aaf56d3a Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Fri, 1 May 2020 01:27:10 +0200 Subject: [PATCH 4/4] Use references for strings.json --- homeassistant/components/unifi/strings.json | 9 ++++----- homeassistant/components/unifi/translations/en.json | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/unifi/strings.json b/homeassistant/components/unifi/strings.json index b3d89d918eb3ce..da1d6200ed5cf9 100644 --- a/homeassistant/components/unifi/strings.json +++ b/homeassistant/components/unifi/strings.json @@ -48,12 +48,11 @@ }, "simple_options": { "data": { - "track_clients": "Track network clients", - "track_devices": "Track network devices (Ubiquiti devices)", - "block_client": "Network access controlled clients" + "track_clients": "[%key:component::unifi::options::step::device_tracker::data::track_clients%]", + "track_devices": "[%key:component::unifi::options::step::device_tracker::data::track_devices%]", + "block_client": "[%key:component::unifi::options::step::client_control::data::block_client%]" }, - "description": "Configure UniFi integration", - "title": "UniFi options" + "description": "Configure UniFi integration" }, "statistics_sensors": { "data": { diff --git a/homeassistant/components/unifi/translations/en.json b/homeassistant/components/unifi/translations/en.json index a49d9477507a1c..fd7096686e1fbc 100644 --- a/homeassistant/components/unifi/translations/en.json +++ b/homeassistant/components/unifi/translations/en.json @@ -48,12 +48,11 @@ }, "simple_options": { "data": { - "track_clients": "Track network clients", - "track_devices": "Track network devices (Ubiquiti devices)", - "block_client": "Network access controlled clients" + "track_clients": "[%key:component::unifi::options::step::device_tracker::data::track_clients%]", + "track_devices": "[%key:component::unifi::options::step::device_tracker::data::track_devices%]", + "block_client": "[%key:component::unifi::options::step::client_control::data::block_client%]" }, - "description": "Configure UniFi integration", - "title": "UniFi options" + "description": "Configure UniFi integration" }, "statistics_sensors": { "data": {