|
1 |
# -*- coding: utf-8 -*-
|
|
2 |
import json
|
|
3 |
import pytest
|
|
4 |
|
|
5 |
from authentic2_provisionning_ldap.ldap_utils import Slapd, has_slapd
|
|
6 |
from django.contrib.auth import get_user_model
|
|
7 |
from django.core.exceptions import ImproperlyConfigured
|
|
8 |
from authentic2.a2_rbac.utils import get_default_ou
|
|
9 |
from django_rbac.utils import get_ou_model, get_role_model
|
|
10 |
from authentic2.models import Service
|
|
11 |
|
|
12 |
pytestmark = pytest.mark.django_db
|
|
13 |
|
|
14 |
def test_api_user(client):
|
|
15 |
# create an user, an ou role, a service and a service role
|
|
16 |
ou = get_default_ou()
|
|
17 |
|
|
18 |
User = get_user_model()
|
|
19 |
user = User.objects.create(ou=ou, username='john.doe', first_name=u'Jôhn',
|
|
20 |
last_name=u'Doe', email='john.doe@example.net')
|
|
21 |
user.set_password('password')
|
|
22 |
user.save()
|
|
23 |
|
|
24 |
Role = get_role_model()
|
|
25 |
role1 = Role.objects.create(name='Role1', ou=ou)
|
|
26 |
role1.members.add(user)
|
|
27 |
|
|
28 |
service = Service.objects.create(name='Service1', slug='service1', ou=ou)
|
|
29 |
role2 = Role.objects.create(name='Role2', service=service)
|
|
30 |
role2.members.add(user)
|
|
31 |
|
|
32 |
role3 = Role.objects.create(name='Role3', ou=ou)
|
|
33 |
role4 = Role.objects.create(name='Role4', service=service)
|
|
34 |
|
|
35 |
# test failure when unlogged
|
|
36 |
response = client.get('/api/user/', HTTP_ORIGIN='http://testserver')
|
|
37 |
assert response.content == '{}'
|
|
38 |
|
|
39 |
# login
|
|
40 |
client.login(username='john.doe', password='password')
|
|
41 |
response = client.get('/api/user/', HTTP_ORIGIN='http://testserver')
|
|
42 |
data = json.loads(response.content)
|
|
43 |
assert isinstance(data, dict)
|
|
44 |
assert set(data.keys()) == set(['uuid', 'username', 'first_name',
|
|
45 |
'ou__slug', 'ou__uuid', 'ou__name',
|
|
46 |
'last_name', 'email', 'roles', 'services',
|
|
47 |
'is_superuser', 'ou'])
|
|
48 |
assert data['uuid'] == user.uuid
|
|
49 |
assert data['username'] == user.username
|
|
50 |
assert data['first_name'] == user.first_name
|
|
51 |
assert data['last_name'] == user.last_name
|
|
52 |
assert data['email'] == user.email
|
|
53 |
assert data['is_superuser'] == user.is_superuser
|
|
54 |
assert data['ou'] == ou.name
|
|
55 |
assert data['ou__name'] == ou.name
|
|
56 |
assert data['ou__slug'] == ou.slug
|
|
57 |
assert data['ou__uuid'] == ou.uuid
|
|
58 |
assert isinstance(data['roles'], list)
|
|
59 |
assert len(data['roles']) == 2
|
|
60 |
for role in data['roles']:
|
|
61 |
assert set(role.keys()) == set(['uuid', 'name', 'slug', 'is_admin',
|
|
62 |
'is_service', 'ou__uuid', 'ou__name',
|
|
63 |
'ou__slug'])
|
|
64 |
assert (role['uuid'] == role1.uuid and
|
|
65 |
role['name'] == role1.name and
|
|
66 |
role['slug'] == role1.slug and
|
|
67 |
role['is_admin'] == False and
|
|
68 |
role['is_service'] == False and
|
|
69 |
role['ou__uuid'] == ou.uuid and
|
|
70 |
role['ou__name'] == ou.name and
|
|
71 |
role['ou__slug'] == ou.slug) or \
|
|
72 |
(role['uuid'] == role2.uuid and
|
|
73 |
role['name'] == role2.name and
|
|
74 |
role['slug'] == role2.slug and
|
|
75 |
role['is_admin'] == False and
|
|
76 |
role['is_service'] == True and
|
|
77 |
role['ou__uuid'] == ou.uuid and
|
|
78 |
role['ou__name'] == ou.name and
|
|
79 |
role['ou__slug'] == ou.slug)
|
|
80 |
|
|
81 |
assert isinstance(data['services'], list)
|
|
82 |
assert len(data['services']) == 1
|
|
83 |
s = data['services'][0]
|
|
84 |
assert set(s.keys()) == set(['name', 'slug', 'ou', 'ou__name', 'ou__slug',
|
|
85 |
'ou__uuid', 'roles'])
|
|
86 |
assert s['name'] == service.name
|
|
87 |
assert s['slug'] == service.slug
|
|
88 |
assert s['ou'] == ou.name
|
|
89 |
assert s['ou__name'] == ou.name
|
|
90 |
assert s['ou__slug'] == ou.slug
|
|
91 |
assert s['ou__uuid'] == ou.uuid
|
|
92 |
assert isinstance(s['roles'], list)
|
|
93 |
assert len(s['roles']) == 2
|
|
94 |
for role in s['roles']:
|
|
95 |
assert set(role.keys()) == set(['uuid', 'name', 'slug', 'is_admin',
|
|
96 |
'is_service', 'ou__uuid', 'ou__name',
|
|
97 |
'ou__slug'])
|
|
98 |
assert (role['uuid'] == role1.uuid and
|
|
99 |
role['name'] == role1.name and
|
|
100 |
role['slug'] == role1.slug and
|
|
101 |
role['is_admin'] == False and
|
|
102 |
role['is_service'] == False and
|
|
103 |
role['ou__uuid'] == ou.uuid and
|
|
104 |
role['ou__name'] == ou.name and
|
|
105 |
role['ou__slug'] == ou.slug) or \
|
|
106 |
(role['uuid'] == role2.uuid and
|
|
107 |
role['name'] == role2.name and
|
|
108 |
role['slug'] == role2.slug and
|
|
109 |
role['is_admin'] == False and
|
|
110 |
role['is_service'] == True and
|
|
111 |
role['ou__uuid'] == ou.uuid and
|
|
112 |
role['ou__name'] == ou.name and
|
|
113 |
role['ou__slug'] == ou.slug)
|
0 |
|
-
|