Files
notifications-admin/tests/app/main/test_permissions.py
Rebecca Law e67bb5f716 Fix main_nav for platform admin
Renamed or_ to any_
2016-03-30 11:30:18 +01:00

125 lines
3.7 KiB
Python

import pytest
from app.utils import user_has_permissions
from app.main.views.index import index
from werkzeug.exceptions import Forbidden
from flask import request
def _test_permissions(app_, usr, permissions, service_id, will_succeed, any_=False, admin_override=False):
with app_.test_request_context() as ctx:
request.view_args.update({'service_id': service_id})
with app_.test_client() as client:
client.login(usr)
decorator = user_has_permissions(*permissions, any_=any_, admin_override=admin_override)
decorated_index = decorator(index)
if will_succeed:
response = decorated_index()
else:
try:
response = decorated_index()
pytest.fail("Failed to throw a forbidden exception")
except Forbidden:
pass
def test_user_has_permissions_on_endpoint_fail(app_, mocker):
user = _user_with_permissions()
mocker.patch('app.user_api_client.get_user', return_value=user)
_test_permissions(
app_,
user,
['something'],
'',
False)
def test_user_has_permissions_success(app_,
mocker):
user = _user_with_permissions()
mocker.patch('app.user_api_client.get_user', return_value=user)
_test_permissions(
app_,
user,
['manage_users'],
'',
True)
def test_user_has_permissions_or(app_, mocker):
user = _user_with_permissions()
mocker.patch('app.user_api_client.get_user', return_value=user)
_test_permissions(
app_,
user,
['something', 'manage_users'],
'',
True,
any_=True)
def test_user_has_permissions_multiple(app_,
mocker):
user = _user_with_permissions()
mocker.patch('app.user_api_client.get_user', return_value=user)
_test_permissions(
app_,
user,
['manage_templates', 'manage_users'],
'',
will_succeed=True)
def test_exact_permissions(app_,
mocker):
user = _user_with_permissions()
mocker.patch('app.user_api_client.get_user', return_value=user)
_test_permissions(
app_,
user,
['manage_users', 'manage_templates', 'manage_settings'],
'',
True)
def test_platform_admin_user_can_access_page(app_,
platform_admin_user,
mocker):
mocker.patch('app.user_api_client.get_user', return_value=platform_admin_user)
_test_permissions(
app_,
platform_admin_user,
[],
'',
will_succeed=True,
admin_override=True)
def test_platform_admin_user_can_not_access_page(app_,
platform_admin_user,
mocker):
mocker.patch('app.user_api_client.get_user', return_value=platform_admin_user)
_test_permissions(
app_,
platform_admin_user,
[],
'',
will_succeed=False,
admin_override=False)
def _user_with_permissions():
from app.notify_client.user_api_client import User
user_data = {'id': 999,
'name': 'Test User',
'password': 'somepassword',
'email_address': 'test@user.gov.uk',
'mobile_number': '+4412341234',
'state': 'active',
'failed_login_count': 0,
'permissions': {'': ['manage_users', 'manage_templates', 'manage_settings']},
'platform_admin': False
}
user = User(user_data)
return user