Completed
Pull Request — master (#17)
by Camille
01:23
created

OpenGroupMemberCreationTests   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 42
Duplicated Lines 0 %
Metric Value
dl 0
loc 42
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A test_create_not_for_self() 0 5 1
A setUpTestData() 0 23 1
A test_create_not_authed() 0 4 1
A test_create_success() 0 6 1
1
import json
2
3
from django.core import mail
4
5
from rest_framework import status
6
from rest_framework.test import APITestCase
7
8
from sigma_core.models.user import User
9
from sigma_core.models.group import Group
10
from sigma_core.models.group_member import GroupMember
11
from sigma_core.serializers.user import DetailedUserSerializer as UserSerializer
12
from sigma_core.tests.factories import UserFactory, AdminUserFactory, GroupFactory, GroupMemberFactory
13
14
15
class OpenGroupMemberCreationTests(APITestCase):
16
    @classmethod
17
    def setUpTestData(self):
18
        super(APITestCase, self).setUpTestData()
19
20
        # Routes
21
        self.members_url = "/group-member/"
22
        self.member_url = self.members_url + "%d/"
23
24
        # Group open to anyone
25
        self.group = GroupFactory()
26
        self.group.default_member_rank = 1
27
        self.group.save()
28
29
        # Users already in group
30
        self.users = [UserFactory()]
31
        # Associated GroupMember
32
        self.group_member1 = GroupMember(user=self.users[0], group=self.group, perm_rank=Group.ADMINISTRATOR_RANK)
33
34
        # Testing user
35
        self.user = UserFactory()
36
37
        # Misc
38
        self.new_membership_data = {"group": self.group.id, "user": self.user.id}
39
40
    def test_create_not_authed(self):
41
        self.client.force_authenticate(user=None)
42
        response = self.client.post(self.members_url, self.new_membership_data)
43
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
44
45
    def test_create_not_for_self(self):
46
        # Attempt to add somebody else to a group
47
        self.client.force_authenticate(user=self.users[0])
48
        response = self.client.post(self.members_url, self.new_membership_data)
49
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
50
51
    def test_create_success(self):
52
        # Succesful attempt to join an open group
53
        self.client.force_authenticate(user=self.user)
54
        response = self.client.post(self.members_url, self.new_membership_data)
55
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
56
        self.assertEqual(response.data['perm_rank'], self.group.default_member_rank)
57
58
59
class RequestGroupMemberCreationTests(APITestCase):
60
    @classmethod
61
    def setUpTestData(self):
62
        super(APITestCase, self).setUpTestData()
63
64
        # Routes
65
        self.members_url = "/group-member/"
66
        self.member_url = self.members_url + "%d/"
67
68
        # Group with membership request
69
        self.group = GroupFactory()
70
        self.group.default_member_rank = 0
71
        self.group.req_rank_accept_join_requests = 5
72
        self.group.save()
73
74
        # Users already in group
75
        self.users = UserFactory.create_batch(3)
76
        # Associated GroupMember
77
        self.group_member1 = GroupMember(user=self.users[0], group=self.group, perm_rank=Group.ADMINISTRATOR_RANK) # can validate requests
78
        self.group_member2 = GroupMember(user=self.users[1], group=self.group, perm_rank=1) # cannot validate requests
79
        self.group_member3 = GroupMember(user=self.users[2], group=self.group, perm_rank=0) # request to be validated
80
81
        # Testing user
82
        self.user = UserFactory()
83
84
        # Misc
85
        self.new_membership_data = {"group": self.group.id, "user": self.user.id}
86
87
        def test_create_not_authed(self):
88
            self.client.force_authenticate(user=None)
89
            response = self.client.post(self.members_url, self.new_membership_data)
90
            self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
91
92
        def test_create_success(self):
93
            # Succesful attempt to request group membership
94
            self.client.force_authenticate(user=self.user)
95
            response = self.client.post(self.members_url, self.new_membership_data)
96
            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
97
            self.assertEqual(response.data['perm_rank'], self.group.default_member_rank)
98
99
        def test_validate_forbidden(self):
100
            # Attempt to validate a request but not enough permission
101
            self.client.force_authenticate(user=self.users[1])
102
            response = self.client.put(self.member_url + "accept_join_request/" % self.group_member3.id, {})
103
            self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
104
            self.assertEqual(response.data['perm_rank'], 0)
105
106
        def test_validate_success(self):
107
            # Succesful attempt to validate a request
108
            self.client.force_authenticate(user=self.users[0])
109
            response = self.client.put(self.member_url + "accept_join_request/" % self.group_member3.id, {})
110
            self.assertEqual(response.status_code, status.HTTP_200_OK)
111
            self.assertEqual(response.data['perm_rank'], 1)
112
113
114
class InvitationGroupMemberCreationTests(APITestCase):
115
    @classmethod
116
    def setUpTestData(self):
117
        super(APITestCase, self).setUpTestData()
118
119
        # Routes
120
        self.members_url = "/group-member/"
121
        self.member_url = self.members_url + "%d/"
122
123
        # Group with invitation only
124
        self.group = GroupFactory()
125
        self.group.req_rank_invite = 5
126
        self.group.save()
127
128
        # Testing user
129
        self.user = UserFactory()
130
131
        # Misc
132
        self.new_membership_data = {"user": self.user.id, "group": self.group.id}
133
134
        def test_create_not_authed(self):
135
            self.client.force_authenticate(user=None)
136
            response = self.client.post(self.members_url, self.new_membership_data)
137
            self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
138
139
        def test_create_forbidden(self):
140
            # Attempt to get group membership
141
            self.client.force_authenticate(user=self.user)
142
            response = self.client.post(self.members_url, self.new_membership_data)
143
            self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
144