Hass.io allow to reset password with CLI (#30755)
* Hass.io allow to reset passwort with CLI * Add improvments * fix comments * fix lint * Fix tests * more tests * Address comments * sort imports * fix test python37
This commit is contained in:
parent
9f62b58929
commit
4731f7c721
5 changed files with 197 additions and 33 deletions
|
@ -6,14 +6,14 @@ from homeassistant.exceptions import HomeAssistantError
|
|||
from tests.common import mock_coro
|
||||
|
||||
|
||||
async def test_login_success(hass, hassio_client):
|
||||
async def test_auth_success(hass, hassio_client_supervisor):
|
||||
"""Test no auth needed for ."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_login:
|
||||
resp = await hassio_client.post(
|
||||
resp = await hassio_client_supervisor.post(
|
||||
"/api/hassio_auth",
|
||||
json={"username": "test", "password": "123456", "addon": "samba"},
|
||||
)
|
||||
|
@ -23,12 +23,12 @@ async def test_login_success(hass, hassio_client):
|
|||
mock_login.assert_called_with("test", "123456")
|
||||
|
||||
|
||||
async def test_login_error(hass, hassio_client):
|
||||
"""Test no auth needed for error."""
|
||||
async def test_auth_fails_no_supervisor(hass, hassio_client):
|
||||
"""Test if only supervisor can access."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(side_effect=HomeAssistantError()),
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_login:
|
||||
resp = await hassio_client.post(
|
||||
"/api/hassio_auth",
|
||||
|
@ -36,32 +36,66 @@ async def test_login_error(hass, hassio_client):
|
|||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 403
|
||||
assert resp.status == 401
|
||||
assert not mock_login.called
|
||||
|
||||
|
||||
async def test_auth_fails_no_auth(hass, hassio_noauth_client):
|
||||
"""Test if only supervisor can access."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_login:
|
||||
resp = await hassio_noauth_client.post(
|
||||
"/api/hassio_auth",
|
||||
json={"username": "test", "password": "123456", "addon": "samba"},
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 401
|
||||
assert not mock_login.called
|
||||
|
||||
|
||||
async def test_login_error(hass, hassio_client_supervisor):
|
||||
"""Test no auth needed for error."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(side_effect=HomeAssistantError()),
|
||||
) as mock_login:
|
||||
resp = await hassio_client_supervisor.post(
|
||||
"/api/hassio_auth",
|
||||
json={"username": "test", "password": "123456", "addon": "samba"},
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 401
|
||||
mock_login.assert_called_with("test", "123456")
|
||||
|
||||
|
||||
async def test_login_no_data(hass, hassio_client):
|
||||
async def test_login_no_data(hass, hassio_client_supervisor):
|
||||
"""Test auth with no data -> error."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(side_effect=HomeAssistantError()),
|
||||
) as mock_login:
|
||||
resp = await hassio_client.post("/api/hassio_auth")
|
||||
resp = await hassio_client_supervisor.post("/api/hassio_auth")
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 400
|
||||
assert not mock_login.called
|
||||
|
||||
|
||||
async def test_login_no_username(hass, hassio_client):
|
||||
async def test_login_no_username(hass, hassio_client_supervisor):
|
||||
"""Test auth with no username in data -> error."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(side_effect=HomeAssistantError()),
|
||||
) as mock_login:
|
||||
resp = await hassio_client.post(
|
||||
resp = await hassio_client_supervisor.post(
|
||||
"/api/hassio_auth", json={"password": "123456", "addon": "samba"}
|
||||
)
|
||||
|
||||
|
@ -70,14 +104,14 @@ async def test_login_no_username(hass, hassio_client):
|
|||
assert not mock_login.called
|
||||
|
||||
|
||||
async def test_login_success_extra(hass, hassio_client):
|
||||
async def test_login_success_extra(hass, hassio_client_supervisor):
|
||||
"""Test auth with extra data."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant."
|
||||
"HassAuthProvider.async_validate_login",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_login:
|
||||
resp = await hassio_client.post(
|
||||
resp = await hassio_client_supervisor.post(
|
||||
"/api/hassio_auth",
|
||||
json={
|
||||
"username": "test",
|
||||
|
@ -90,3 +124,67 @@ async def test_login_success_extra(hass, hassio_client):
|
|||
# Check we got right response
|
||||
assert resp.status == 200
|
||||
mock_login.assert_called_with("test", "123456")
|
||||
|
||||
|
||||
async def test_password_success(hass, hassio_client_supervisor):
|
||||
"""Test no auth needed for ."""
|
||||
with patch(
|
||||
"homeassistant.components.hassio.auth.HassIOPasswordReset._change_password",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_change:
|
||||
resp = await hassio_client_supervisor.post(
|
||||
"/api/hassio_auth/password_reset",
|
||||
json={"username": "test", "password": "123456"},
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 200
|
||||
mock_change.assert_called_with("test", "123456")
|
||||
|
||||
|
||||
async def test_password_fails_no_supervisor(hass, hassio_client):
|
||||
"""Test if only supervisor can access."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant.Data.async_save",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_save:
|
||||
resp = await hassio_client.post(
|
||||
"/api/hassio_auth/password_reset",
|
||||
json={"username": "test", "password": "123456"},
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 401
|
||||
assert not mock_save.called
|
||||
|
||||
|
||||
async def test_password_fails_no_auth(hass, hassio_noauth_client):
|
||||
"""Test if only supervisor can access."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant.Data.async_save",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_save:
|
||||
resp = await hassio_noauth_client.post(
|
||||
"/api/hassio_auth/password_reset",
|
||||
json={"username": "test", "password": "123456"},
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 401
|
||||
assert not mock_save.called
|
||||
|
||||
|
||||
async def test_password_no_user(hass, hassio_client_supervisor):
|
||||
"""Test no auth needed for ."""
|
||||
with patch(
|
||||
"homeassistant.auth.providers.homeassistant.Data.async_save",
|
||||
Mock(return_value=mock_coro()),
|
||||
) as mock_save:
|
||||
resp = await hassio_client_supervisor.post(
|
||||
"/api/hassio_auth/password_reset",
|
||||
json={"username": "test", "password": "123456"},
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == 500
|
||||
assert not mock_save.called
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue