Projet

Général

Profil

0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch

Paul Marillonnet, 13 février 2018 10:34

Télécharger (4,72 ko)

Voir les différences:

Subject: [PATCH] WIP api_views: display the list of roles for a user #21485

 src/authentic2/api_views.py |  5 +++++
 tests/conftest.py           | 14 ++++++++++++++
 tests/test_api.py           | 47 ++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 65 insertions(+), 1 deletion(-)
src/authentic2/api_views.py
311 311
        queryset=get_ou_model().objects.all(),
312 312
        slug_field='slug',
313 313
        required=False, default=get_default_ou)
314
    roles = serializers.SlugRelatedField(
315
        slug_field='slug',
316
        many=True,
317
        read_only=True,
318
        required=False)
314 319
    date_joined = serializers.DateTimeField(read_only=True)
315 320
    last_login = serializers.DateTimeField(read_only=True)
316 321
    send_registration_email = serializers.BooleanField(write_only=True, required=False,
tests/conftest.py
97 97

  
98 98

  
99 99
@pytest.fixture
100
def user_rando(db, ou_rando, role_random, role_misc):
101
    user = create_user(username='jean.doux', first_name=u'Jëan', last_name=u'Doûx',
102
                       email='jean.doux@example.net', ou=ou_rando)
103
    user.roles.add(role_random)
104
    user.roles.add(role_misc)
105
    return user
106

  
107

  
108
@pytest.fixture
100 109
def admin_ou1(db, ou1):
101 110
    user = create_user(username='admin.ou1', first_name=u'Admin', last_name=u'OU1',
102 111
                       email='admin.ou1@example.net', ou=ou1)
......
139 148

  
140 149

  
141 150
@pytest.fixture
151
def role_misc(db, ou_rando):
152
    return Role.objects.create(name='misc', slug='misc', ou=ou_rando)
153

  
154

  
155
@pytest.fixture
142 156
def role_random(db, ou_rando):
143 157
    return Role.objects.create(name='rando', slug='rando', ou=ou_rando)
144 158

  
tests/test_api.py
141 141
    assert resp.json['next'] is None
142 142

  
143 143

  
144
def test_api_users_fetch_roles(settings, app, api_user, user_rando):
145
    from django.contrib.auth import get_user_model
146
    from authentic2.models import Attribute, AttributeValue
147
    app.authorization = ('Basic', (api_user.username, api_user.username))
148

  
149
    resp = app.get('/api/users/%s/' % user_rando.uuid)
150

  
151
    assert len(resp.json['roles']) == 2
152

  
153

  
154
def test_api_users_readonly_fields(settings, app, api_user, role_random, role_misc):
155
    from django.contrib.auth import get_user_model
156
    from authentic2.models import Attribute, AttributeValue
157
    app.authorization = ('Basic', (api_user.username, api_user.username))
158

  
159
    payload = {
160
        'username': 'john.doe',
161
        'first_name': 'John',
162
        'last_name': 'Doe',
163
        'email': 'john.doe@example.net',
164
        'password': 'password',
165
        'roles': ['rando', 'misc'],
166
    }
167

  
168
    if api_user.is_superuser:
169
        status = 201
170
    elif api_user.roles.exists():
171
        status = 201
172
        payload['ou'] = api_user.ou.slug
173
    else:
174
        status = 403
175

  
176
    resp = app.post_json('/api/users/', params=payload, status=status)
177
    if api_user.is_superuser or api_user.roles.exists():
178
        assert resp.json['first_name'] == payload['first_name']
179
        assert resp.json['last_name'] == payload['last_name']
180
        assert resp.json['email'] == payload['email']
181
        assert resp.json['username'] == payload['username']
182
        assert resp.json['uuid']
183
        assert resp.json['id']
184

  
185
        # Test empty roles attribute
186
        assert resp.json['roles'] == []
187

  
188

  
144 189
def test_api_users_create(settings, app, api_user):
145 190
    from django.contrib.auth import get_user_model
146 191
    from authentic2.models import Attribute, AttributeValue
......
188 233
    if api_user.is_superuser or api_user.roles.exists():
189 234
        assert set(['ou', 'id', 'uuid', 'is_staff', 'is_superuser', 'first_name', 'last_name',
190 235
                    'date_joined', 'last_login', 'username', 'password', 'email', 'is_active',
191
                    'title', 'modified', 'email_verified']) == set(resp.json.keys())
236
                    'title', 'modified', 'email_verified', 'roles']) == set(resp.json.keys())
192 237
        assert resp.json['first_name'] == payload['first_name']
193 238
        assert resp.json['last_name'] == payload['last_name']
194 239
        assert resp.json['email'] == payload['email']
195
-