Projet

Général

Profil

0001-add-role-creation-API-20706.patch

Paul Marillonnet, 19 janvier 2018 18:41

Télécharger (3,75 ko)

Voir les différences:

Subject: [PATCH] add role-creation API (#20706)

 src/authentic2/api_views.py | 23 +++++++++++++++++++++++
 tests/test_api.py           | 46 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
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
-