Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions homeassistant/components/unifi/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,7 @@
LOGGER,
)
from .controller import get_controller
from .errors import (
AlreadyConfigured,
AuthenticationRequired,
CannotConnect,
NoLocalUser,
)
from .errors import AlreadyConfigured, AuthenticationRequired, CannotConnect

DEFAULT_PORT = 8443
DEFAULT_SITE_ID = "default"
Expand Down Expand Up @@ -134,8 +129,6 @@ async def async_step_site(self, user_input=None):

for site in self.sites.values():
if desc == site["desc"]:
if "role" not in site:
raise NoLocalUser
self.config[CONF_SITE_ID] = site["name"]
break

Expand All @@ -154,9 +147,6 @@ async def async_step_site(self, user_input=None):
except AlreadyConfigured:
return self.async_abort(reason="already_configured")

except NoLocalUser:
return self.async_abort(reason="no_local_user")

if len(self.sites) == 1:
self.desc = next(iter(self.sites.values()))["desc"]
return await self.async_step_site(user_input={})
Expand Down
4 changes: 3 additions & 1 deletion homeassistant/components/unifi/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,9 +290,11 @@ async def async_setup(self):
for site in sites.values():
if self.site == site["name"]:
self._site_name = site["desc"]
self._site_role = site["role"]
break

description = await self.api.site_description()
self._site_role = description[0]["site_role"]

except CannotConnect:
raise ConfigEntryNotReady

Expand Down
4 changes: 0 additions & 4 deletions homeassistant/components/unifi/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,5 @@ class LoginRequired(UnifiException):
"""Component got logged out."""


class NoLocalUser(UnifiException):
"""No local user."""


class UserLevel(UnifiException):
"""User level too low."""
2 changes: 1 addition & 1 deletion homeassistant/components/unifi/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "Ubiquiti UniFi",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/unifi",
"requirements": ["aiounifi==21"],
"requirements": ["aiounifi==22"],
"codeowners": ["@Kane610"],
"quality_scale": "platinum"
}
3 changes: 1 addition & 2 deletions homeassistant/components/unifi/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
"unknown_client_mac": "No client available on that MAC address"
},
"abort": {
"already_configured": "Controller site is already configured",
"no_local_user": "No local user found, configure a local account on controller and try again"
"already_configured": "Controller site is already configured"
}
},
"options": {
Expand Down
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ aiopylgtv==0.3.3
aioswitcher==1.1.0

# homeassistant.components.unifi
aiounifi==21
aiounifi==22

# homeassistant.components.wwlln
aiowwlln==2.0.2
Expand Down
2 changes: 1 addition & 1 deletion requirements_test_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ aiopylgtv==0.3.3
aioswitcher==1.1.0

# homeassistant.components.unifi
aiounifi==21
aiounifi==22

# homeassistant.components.wwlln
aiowwlln==2.0.2
Expand Down
46 changes: 0 additions & 46 deletions tests/components/unifi/test_config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,52 +222,6 @@ async def test_flow_fails_site_already_configured(hass, aioclient_mock):
assert result["reason"] == "already_configured"


async def test_flow_fails_site_has_no_local_user(hass, aioclient_mock):
"""Test config flow."""
entry = MockConfigEntry(
domain=UNIFI_DOMAIN, data={"controller": {"host": "1.2.3.4", "site": "site_id"}}
)
entry.add_to_hass(hass)

result = await hass.config_entries.flow.async_init(
UNIFI_DOMAIN, context={"source": "user"}
)

assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
assert result["step_id"] == "user"

aioclient_mock.get("https://1.2.3.4:1234", status=302)

aioclient_mock.post(
"https://1.2.3.4:1234/api/login",
json={"data": "login successful", "meta": {"rc": "ok"}},
headers={"content-type": "application/json"},
)

aioclient_mock.get(
"https://1.2.3.4:1234/api/self/sites",
json={
"data": [{"desc": "Site name", "name": "site_id"}],
"meta": {"rc": "ok"},
},
headers={"content-type": "application/json"},
)

result = await hass.config_entries.flow.async_configure(
result["flow_id"],
user_input={
CONF_HOST: "1.2.3.4",
CONF_USERNAME: "username",
CONF_PASSWORD: "password",
CONF_PORT: 1234,
CONF_VERIFY_SSL: True,
},
)

assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
assert result["reason"] == "no_local_user"


async def test_flow_fails_user_credentials_faulty(hass, aioclient_mock):
"""Test config flow."""
result = await hass.config_entries.flow.async_init(
Expand Down
4 changes: 4 additions & 0 deletions tests/components/unifi/test_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,15 @@
CONFIGURATION = []

SITES = {"Site name": {"desc": "Site name", "name": "site_id", "role": "admin"}}
DESCRIPTION = [{"name": "username", "site_name": "site_id", "site_role": "admin"}]


async def setup_unifi_integration(
hass,
config=ENTRY_CONFIG,
options=ENTRY_OPTIONS,
sites=SITES,
site_description=DESCRIPTION,
clients_response=None,
devices_response=None,
clients_all_response=None,
Expand Down Expand Up @@ -130,6 +132,8 @@ async def mock_request(self, method, path, json=None):
with patch("aiounifi.Controller.check_unifi_os", return_value=True), patch(
"aiounifi.Controller.login", return_value=True,
), patch("aiounifi.Controller.sites", return_value=sites), patch(
"aiounifi.Controller.site_description", return_value=site_description
), patch(
"aiounifi.Controller.request", new=mock_request
), patch.object(
aiounifi.websocket.WSClient, "start", return_value=True
Expand Down
8 changes: 4 additions & 4 deletions tests/components/unifi/test_switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

from .test_controller import (
CONTROLLER_HOST,
DESCRIPTION,
ENTRY_CONFIG,
SITES,
setup_unifi_integration,
)

Expand Down Expand Up @@ -289,12 +289,12 @@ async def test_controller_not_client(hass):

async def test_not_admin(hass):
"""Test that switch platform only work on an admin account."""
sites = deepcopy(SITES)
sites["Site name"]["role"] = "not admin"
description = deepcopy(DESCRIPTION)
description[0]["site_role"] = "not admin"
controller = await setup_unifi_integration(
hass,
options={CONF_TRACK_CLIENTS: False, CONF_TRACK_DEVICES: False},
sites=sites,
site_description=description,
clients_response=[CLIENT_1],
devices_response=[DEVICE_1],
)
Expand Down