0001-add-role-creation-API-20706.patch
src/authentic2/api_views.py | ||
---|---|---|
444 | 444 |
exclude = ('date_joined', 'user_permissions', 'groups', 'last_login') |
445 | 445 | |
446 | 446 | |
447 |
class RoleSerializer(serializers.ModelSerializer): |
|
448 |
ou = serializers.SlugRelatedField( |
|
449 |
many=False, |
|
450 |
required=True, |
|
451 |
queryset=get_ou_model().objects.all(), |
|
452 |
slug_field='slug') |
|
453 | ||
454 |
class Meta: |
|
455 |
model = get_role_model() |
|
456 |
exclude = ('service', 'admin_scope_id', 'admin_scope_ct',) |
|
457 | ||
458 | ||
447 | 459 |
class UsersFilter(FilterSet): |
448 | 460 |
class Meta: |
449 | 461 |
model = get_user_model() |
... | ... | |
576 | 588 |
return Response({'result': 1}) |
577 | 589 | |
578 | 590 | |
591 |
class RolesAPI(ExceptionHandlerMixin, ModelViewSet): |
|
592 |
permission_classes = (permissions.IsAuthenticated,) |
|
593 |
serializer_class = RoleSerializer |
|
594 |
lookup_field = 'slug' |
|
595 | ||
596 |
def get_queryset(self): |
|
597 |
Role = get_role_model() |
|
598 |
return Role.objects.all() |
|
599 | ||
600 | ||
579 | 601 |
class RoleMembershipsAPI(ExceptionHandlerMixin, APIView): |
580 | 602 |
permission_classes = (permissions.IsAuthenticated,) |
581 | 603 | |
... | ... | |
620 | 642 |
router = SimpleRouter() |
621 | 643 |
router.register(r'users', UsersAPI, base_name='a2-api-users') |
622 | 644 |
router.register(r'ous', OrganizationalUnitAPI, base_name='a2-api-ous') |
645 |
router.register(r'roles', RolesAPI, base_name='a2-api-roles') |
|
623 | 646 | |
624 | 647 | |
625 | 648 |
class CheckPasswordSerializer(serializers.Serializer): |
tests/test_api.py | ||
---|---|---|
30 | 30 |
assert 'username' in resp.json |
31 | 31 | |
32 | 32 | |
33 |
def test_api_post_role_simple(app, user): |
|
34 |
app.authorization = ('Basic', (user.username, user.username)) |
|
35 | ||
36 |
role_data = { |
|
37 |
'slug': 'coffee-manager', |
|
38 |
'uuid': 'RhFactor001', |
|
39 |
'name': 'Coffee Manager', |
|
40 |
'ou': 'ou1' |
|
41 |
} |
|
42 | ||
43 |
resp = app.post_json('/api/roles/', params=role_data) |
|
44 |
assert isinstance(resp.json, dict) |
|
45 |
Role = get_role_model() |
|
46 | ||
47 |
# Check attribute values against the server's response: |
|
48 |
for key, value in role_data.items(): |
|
49 |
assert key in resp.json.keys() |
|
50 |
assert value in resp.json.values() |
|
51 | ||
52 |
# Check attributes values against the DB: |
|
53 |
posted_role = Role.objects.get(slug='coffee-manager') |
|
54 |
assert posted_role.slug == role_data['slug'] |
|
55 |
assert posted_role.uuid == role_data['uuid'] |
|
56 |
assert posted_role.name == role_data['name'] |
|
57 |
assert posted_role.ou.slug == 'ou1' |
|
58 | ||
59 | ||
60 |
def test_api_get_role_description(app, user): |
|
61 |
app.authorization = ('Basic', (user.username, user.username)) |
|
62 |
resp = app.get('/api/roles/rando/') |
|
63 | ||
64 |
assert resp.json['slug'] == 'rando' |
|
65 |
assert resp.json['ou'] == 'ou_rando' |
|
66 | ||
67 | ||
68 |
def test_api_get_role_list(app, user): |
|
69 |
app.authorization = ('Basic', (user.username, user.username)) |
|
70 |
resp = app.get('/api/roles/') |
|
71 | ||
72 |
role_fields = ['slug', 'uuid', 'name', 'ou'] |
|
73 | ||
74 |
for role_dict in resp.json['results']: |
|
75 |
for field in role_fields: |
|
76 |
assert field in role_dict |
|
77 | ||
78 | ||
33 | 79 |
def test_api_user(client): |
34 | 80 |
# create an user, an ou role, a service and a service role |
35 | 81 |
ou = get_default_ou() |
36 |
- |