User management (#15420)
* User management * Lint * Fix dict * Reuse data instance * OrderedDict all the way
This commit is contained in:
parent
84858f5c19
commit
70fe463ef0
21 changed files with 982 additions and 116 deletions
|
@ -6,21 +6,26 @@ import pytest
|
|||
from homeassistant.scripts import auth as script_auth
|
||||
from homeassistant.auth.providers import homeassistant as hass_auth
|
||||
|
||||
from tests.common import register_auth_provider
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def data(hass):
|
||||
"""Create a loaded data class."""
|
||||
data = hass_auth.Data(hass)
|
||||
hass.loop.run_until_complete(data.async_load())
|
||||
return data
|
||||
def provider(hass):
|
||||
"""Home Assistant auth provider."""
|
||||
provider = hass.loop.run_until_complete(register_auth_provider(hass, {
|
||||
'type': 'homeassistant',
|
||||
}))
|
||||
hass.loop.run_until_complete(provider.async_initialize())
|
||||
return provider
|
||||
|
||||
|
||||
async def test_list_user(data, capsys):
|
||||
async def test_list_user(hass, provider, capsys):
|
||||
"""Test we can list users."""
|
||||
data.add_user('test-user', 'test-pass')
|
||||
data.add_user('second-user', 'second-pass')
|
||||
data = provider.data
|
||||
data.add_auth('test-user', 'test-pass')
|
||||
data.add_auth('second-user', 'second-pass')
|
||||
|
||||
await script_auth.list_users(data, None)
|
||||
await script_auth.list_users(hass, provider, None)
|
||||
|
||||
captured = capsys.readouterr()
|
||||
|
||||
|
@ -33,10 +38,11 @@ async def test_list_user(data, capsys):
|
|||
])
|
||||
|
||||
|
||||
async def test_add_user(data, capsys, hass_storage):
|
||||
async def test_add_user(hass, provider, capsys, hass_storage):
|
||||
"""Test we can add a user."""
|
||||
data = provider.data
|
||||
await script_auth.add_user(
|
||||
data, Mock(username='paulus', password='test-pass'))
|
||||
hass, provider, Mock(username='paulus', password='test-pass'))
|
||||
|
||||
assert len(hass_storage[hass_auth.STORAGE_KEY]['data']['users']) == 1
|
||||
|
||||
|
@ -47,32 +53,34 @@ async def test_add_user(data, capsys, hass_storage):
|
|||
data.validate_login('paulus', 'test-pass')
|
||||
|
||||
|
||||
async def test_validate_login(data, capsys):
|
||||
async def test_validate_login(hass, provider, capsys):
|
||||
"""Test we can validate a user login."""
|
||||
data.add_user('test-user', 'test-pass')
|
||||
data = provider.data
|
||||
data.add_auth('test-user', 'test-pass')
|
||||
|
||||
await script_auth.validate_login(
|
||||
data, Mock(username='test-user', password='test-pass'))
|
||||
hass, provider, Mock(username='test-user', password='test-pass'))
|
||||
captured = capsys.readouterr()
|
||||
assert captured.out == 'Auth valid\n'
|
||||
|
||||
await script_auth.validate_login(
|
||||
data, Mock(username='test-user', password='invalid-pass'))
|
||||
hass, provider, Mock(username='test-user', password='invalid-pass'))
|
||||
captured = capsys.readouterr()
|
||||
assert captured.out == 'Auth invalid\n'
|
||||
|
||||
await script_auth.validate_login(
|
||||
data, Mock(username='invalid-user', password='test-pass'))
|
||||
hass, provider, Mock(username='invalid-user', password='test-pass'))
|
||||
captured = capsys.readouterr()
|
||||
assert captured.out == 'Auth invalid\n'
|
||||
|
||||
|
||||
async def test_change_password(data, capsys, hass_storage):
|
||||
async def test_change_password(hass, provider, capsys, hass_storage):
|
||||
"""Test we can change a password."""
|
||||
data.add_user('test-user', 'test-pass')
|
||||
data = provider.data
|
||||
data.add_auth('test-user', 'test-pass')
|
||||
|
||||
await script_auth.change_password(
|
||||
data, Mock(username='test-user', new_password='new-pass'))
|
||||
hass, provider, Mock(username='test-user', new_password='new-pass'))
|
||||
|
||||
assert len(hass_storage[hass_auth.STORAGE_KEY]['data']['users']) == 1
|
||||
captured = capsys.readouterr()
|
||||
|
@ -82,12 +90,14 @@ async def test_change_password(data, capsys, hass_storage):
|
|||
data.validate_login('test-user', 'test-pass')
|
||||
|
||||
|
||||
async def test_change_password_invalid_user(data, capsys, hass_storage):
|
||||
async def test_change_password_invalid_user(hass, provider, capsys,
|
||||
hass_storage):
|
||||
"""Test changing password of non-existing user."""
|
||||
data.add_user('test-user', 'test-pass')
|
||||
data = provider.data
|
||||
data.add_auth('test-user', 'test-pass')
|
||||
|
||||
await script_auth.change_password(
|
||||
data, Mock(username='invalid-user', new_password='new-pass'))
|
||||
hass, provider, Mock(username='invalid-user', new_password='new-pass'))
|
||||
|
||||
assert hass_auth.STORAGE_KEY not in hass_storage
|
||||
captured = capsys.readouterr()
|
||||
|
@ -101,11 +111,11 @@ def test_parsing_args(loop):
|
|||
"""Test we parse args correctly."""
|
||||
called = False
|
||||
|
||||
async def mock_func(data, args2):
|
||||
async def mock_func(hass, provider, args2):
|
||||
"""Mock function to be called."""
|
||||
nonlocal called
|
||||
called = True
|
||||
assert data.hass.config.config_dir == '/somewhere/config'
|
||||
assert provider.hass.config.config_dir == '/somewhere/config'
|
||||
assert args2 is args
|
||||
|
||||
args = Mock(config='/somewhere/config', func=mock_func)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue