Merge pull request #3015 from alphagov/optional-platform-admin

add option to suppress platform admin temporarily
This commit is contained in:
Chris Hill-Scott
2019-06-17 10:00:45 +01:00
committed by GitHub
8 changed files with 164 additions and 5 deletions

View File

@@ -14,6 +14,18 @@ def test_should_show_overview_page(
):
page = client_request.get(('main.user_profile'))
assert page.select_one('h1').text.strip() == 'Your profile'
assert 'Use platform admin view' not in page
def test_overview_page_shows_disable_for_platform_admin(
client_request,
platform_admin_user
):
client_request.login(platform_admin_user)
page = client_request.get(('main.user_profile'))
assert page.select_one('h1').text.strip() == 'Your profile'
disable_platform_admin_row = page.select('tr')[-1]
assert ' '.join(disable_platform_admin_row.text.split()) == 'Use platform admin view Yes Change'
def test_should_show_name_page(
@@ -264,3 +276,49 @@ def test_non_gov_user_cannot_access_change_email_page(
):
client_request.login(api_nongov_user_active)
client_request.get('main.user_profile_email', _expected_status=403)
def test_normal_user_doesnt_see_disable_platform_admin(client_request):
client_request.get('main.user_profile_disable_platform_admin_view', _expected_status=403)
def test_platform_admin_can_see_disable_platform_admin_page(client_request, platform_admin_user):
client_request.login(platform_admin_user)
page = client_request.get('main.user_profile_disable_platform_admin_view')
assert page.select_one('h1').text.strip() == 'Use platform admin view'
assert page.select_one('input[checked]')['value'] == 'True'
def test_can_disable_platform_admin(client_request, platform_admin_user):
client_request.login(platform_admin_user)
with client_request.session_transaction() as session:
assert 'disable_platform_admin_view' not in session
client_request.post(
'main.user_profile_disable_platform_admin_view',
_data={'enabled': False},
_expected_status=302,
_expected_redirect=url_for('main.user_profile', _external=True),
)
with client_request.session_transaction() as session:
assert session['disable_platform_admin_view'] is True
def test_can_reenable_platform_admin(client_request, platform_admin_user):
client_request.login(platform_admin_user)
with client_request.session_transaction() as session:
session['disable_platform_admin_view'] = True
client_request.post(
'main.user_profile_disable_platform_admin_view',
_data={'enabled': True},
_expected_status=302,
_expected_redirect=url_for('main.user_profile', _external=True),
)
with client_request.session_transaction() as session:
assert session['disable_platform_admin_view'] is False

View File

@@ -9,7 +9,8 @@ def test_user(app_):
'email_address': 'test@user.gov.uk',
'mobile_number': '+4412341234',
'state': 'pending',
'failed_login_count': 0
'failed_login_count': 0,
'platform_admin': False,
}
user = User(user_data)
@@ -40,3 +41,21 @@ def test_activate_user(app_, api_user_pending, mock_activate_user):
def test_activate_user_already_active(app_, api_user_active, mock_activate_user):
assert User(api_user_active).activate() == User(api_user_active)
assert mock_activate_user.called is False
@pytest.mark.parametrize('is_platform_admin, value_in_session, expected_result', [
(True, True, False),
(True, False, True),
(True, None, True),
(False, True, False),
(False, False, False),
(False, None, False),
])
def test_platform_admin_flag_set_in_session(client, mocker, is_platform_admin, value_in_session, expected_result):
session_dict = {}
if value_in_session is not None:
session_dict['disable_platform_admin_view'] = value_in_session
mocker.patch.dict('app.models.user.session', values=session_dict, clear=True)
assert User({'platform_admin': is_platform_admin}).platform_admin == expected_result

View File

@@ -1091,6 +1091,7 @@ def api_user_pending(fake_uuid):
'permissions': {},
'organisations': [],
'current_session_id': None,
'password_changed_at': str(datetime.utcnow()),
}
return user_data
@@ -1114,6 +1115,7 @@ def platform_admin_user(fake_uuid):
'view_activity']},
'platform_admin': True,
'auth_type': 'sms_auth',
'password_changed_at': str(datetime.utcnow()),
'services': [],
'organisations': [],
'current_session_id': None,
@@ -1429,6 +1431,7 @@ def api_user_locked(fake_uuid):
'auth_type': 'sms_auth',
'organisations': [],
'current_session_id': None,
'platform_admin': False,
}
return user_data
@@ -1443,10 +1446,11 @@ def api_user_request_password_reset(fake_uuid):
'state': 'active',
'failed_login_count': 5,
'permissions': {},
'password_changed_at': None,
'password_changed_at': str(datetime.utcnow()),
'auth_type': 'sms_auth',
'organisations': [],
'current_session_id': None,
'platform_admin': False,
}
return user_data
@@ -1465,6 +1469,7 @@ def api_user_changed_password(fake_uuid):
'password_changed_at': str(datetime.utcnow() + timedelta(minutes=1)),
'organisations': [],
'current_session_id': None,
'platform_admin': False,
}
return user_data
@@ -2165,12 +2170,14 @@ def mock_get_users_by_service(mocker):
'manage_settings',
'manage_api_keys']},
'state': 'active',
'password_changed_at': None,
'password_changed_at': str(datetime.utcnow()),
'name': 'Test User',
'email_address': 'notify@digital.cabinet-office.gov.uk',
'auth_type': 'sms_auth',
'failed_login_count': 0,
'organisations': []}]
'organisations': [],
'platform_admin': False,
}]
return [data[0]]
# You shouldnt be calling the user API client directly, so its the