authentic/tests/test_role_manager.py

88 lines
3.2 KiB
Python

# authentic2 - versatile identity manager
# Copyright (C) 2010-2019 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from utils import login
def test_manager_role_export(app, admin, ou1, role_ou1, ou2, role_ou2):
import csv
response = login(app, admin, 'a2-manager-roles')
export_response = response.click('JSON')
export = export_response.json
assert export.keys() == ['roles']
assert len(export['roles']) == 2
assert set([role['slug'] for role in export['roles']]) == set(['role_ou1', 'role_ou2'])
export_response = response.click('CSV')
reader = csv.reader(export_response.body.split('\r\n'), delimiter=',')
rows = [row for row in reader]
assert rows[0] == ['name', 'slug', 'members']
assert len(rows)-2 == 2 # csv header and last EOL
assert set([row[1] for row in rows[1:3]]) == set(['role_ou1', 'role_ou2'])
response.form.set('search-text', 'role_ou1')
search_response = response.form.submit()
export_response = search_response.click('JSON')
export = export_response.json
assert export.keys() == ['roles']
assert len(export['roles']) == 1
assert export['roles'][0]['slug'] == 'role_ou1'
export_response = search_response.click('CSV')
reader = csv.reader(export_response.body.split('\r\n'), delimiter=',')
rows = [row for row in reader]
assert rows[0] == ['name', 'slug', 'members']
assert len(rows)-2 == 1 # csv header and last EOL
assert rows[1][1] == 'role_ou1'
def test_manager_role_name_uniqueness_single_ou(app, admin):
response = login(app, admin, 'a2-manager-roles')
response = response.click('Add')
response.form.set('name', 'Role1')
response = response.form.submit('Save').follow()
response = response.click('Roles')
assert response.pyquery('td.name').text() == 'Role1'
response = response.click('Add')
response.form.set('name', 'Role1')
response = response.form.submit('Save')
assert response.pyquery('.errorlist').eq(1).text() == 'Name already used'
def test_manager_role_name_uniqueness_multiple_ou(app, admin, ou1):
response = login(app, admin, 'a2-manager-roles')
response = response.click('Add')
response.form.set('ou', str(ou1.id))
response.form.set('name', 'Role1')
response = response.form.submit('Save').follow()
response = response.click('Roles')
assert response.pyquery('td.name').text() == 'Role1'
response = response.click('Add')
response.form.set('ou', str(ou1.id))
response.form.set('name', 'Role1')
response = response.form.submit('Save')
assert response.pyquery('.errorlist').eq(1).text() == 'Name already used'