Migrate home assistant auth provider to use storage helper (#15200)

This commit is contained in:
Paulus Schoutsen 2018-06-29 00:02:45 -04:00 committed by GitHub
parent 39971ee919
commit 26590e244c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 113 additions and 116 deletions

View file

@ -6,16 +6,21 @@ import pytest
from homeassistant.scripts import auth as script_auth
from homeassistant.auth_providers import homeassistant as hass_auth
MOCK_PATH = '/bla/users.json'
@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 test_list_user(capsys):
async def test_list_user(data, capsys):
"""Test we can list users."""
data = hass_auth.Data(MOCK_PATH, None)
data.add_user('test-user', 'test-pass')
data.add_user('second-user', 'second-pass')
script_auth.list_users(data, None)
await script_auth.list_users(data, None)
captured = capsys.readouterr()
@ -28,15 +33,12 @@ def test_list_user(capsys):
])
def test_add_user(capsys):
async def test_add_user(data, capsys, hass_storage):
"""Test we can add a user."""
data = hass_auth.Data(MOCK_PATH, None)
await script_auth.add_user(
data, Mock(username='paulus', password='test-pass'))
with patch.object(data, 'save') as mock_save:
script_auth.add_user(
data, Mock(username='paulus', password='test-pass'))
assert len(mock_save.mock_calls) == 1
assert len(hass_storage[hass_auth.STORAGE_KEY]['data']['users']) == 1
captured = capsys.readouterr()
assert captured.out == 'User created\n'
@ -45,37 +47,34 @@ def test_add_user(capsys):
data.validate_login('paulus', 'test-pass')
def test_validate_login(capsys):
async def test_validate_login(data, capsys):
"""Test we can validate a user login."""
data = hass_auth.Data(MOCK_PATH, None)
data.add_user('test-user', 'test-pass')
script_auth.validate_login(
await script_auth.validate_login(
data, Mock(username='test-user', password='test-pass'))
captured = capsys.readouterr()
assert captured.out == 'Auth valid\n'
script_auth.validate_login(
await script_auth.validate_login(
data, Mock(username='test-user', password='invalid-pass'))
captured = capsys.readouterr()
assert captured.out == 'Auth invalid\n'
script_auth.validate_login(
await script_auth.validate_login(
data, Mock(username='invalid-user', password='test-pass'))
captured = capsys.readouterr()
assert captured.out == 'Auth invalid\n'
def test_change_password(capsys):
async def test_change_password(data, capsys, hass_storage):
"""Test we can change a password."""
data = hass_auth.Data(MOCK_PATH, None)
data.add_user('test-user', 'test-pass')
with patch.object(data, 'save') as mock_save:
script_auth.change_password(
data, Mock(username='test-user', new_password='new-pass'))
await script_auth.change_password(
data, Mock(username='test-user', new_password='new-pass'))
assert len(mock_save.mock_calls) == 1
assert len(hass_storage[hass_auth.STORAGE_KEY]['data']['users']) == 1
captured = capsys.readouterr()
assert captured.out == 'Password changed\n'
data.validate_login('test-user', 'new-pass')
@ -83,18 +82,35 @@ def test_change_password(capsys):
data.validate_login('test-user', 'test-pass')
def test_change_password_invalid_user(capsys):
async def test_change_password_invalid_user(data, capsys, hass_storage):
"""Test changing password of non-existing user."""
data = hass_auth.Data(MOCK_PATH, None)
data.add_user('test-user', 'test-pass')
with patch.object(data, 'save') as mock_save:
script_auth.change_password(
data, Mock(username='invalid-user', new_password='new-pass'))
await script_auth.change_password(
data, Mock(username='invalid-user', new_password='new-pass'))
assert len(mock_save.mock_calls) == 0
assert hass_auth.STORAGE_KEY not in hass_storage
captured = capsys.readouterr()
assert captured.out == 'User not found\n'
data.validate_login('test-user', 'test-pass')
with pytest.raises(hass_auth.InvalidAuth):
data.validate_login('invalid-user', 'new-pass')
def test_parsing_args(loop):
"""Test we parse args correctly."""
called = False
async def mock_func(data, args2):
"""Mock function to be called."""
nonlocal called
called = True
assert data.hass.config.config_dir == '/somewhere/config'
assert args2 is args
args = Mock(config='/somewhere/config', func=mock_func)
with patch('argparse.ArgumentParser.parse_args', return_value=args):
script_auth.run(None)
assert called, 'Mock function did not get called'