Completed
Push — master ( 9a7f1b...b2a2c0 )
by Camille
9s
created

ClusterTests.test_update_cluster_ok_staff()   A

Complexity

Conditions 1

Size

Total Lines 6

Duplication

Lines 6
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 6
loc 6
rs 9.4285
cc 1
1
from rest_framework import status
2
from rest_framework.test import APITestCase, force_authenticate
3
4
from sigma_core.models.group import Group
5
from sigma_core.models.cluster import Cluster
6
from sigma_core.serializers.group import GroupSerializer
7
from sigma_core.serializers.cluster import BasicClusterSerializer
8
from sigma_core.tests.factories import UserFactory, GroupFactory, GroupMemberFactory, ClusterFactory
9
10
11
def reload(obj):
12
    return obj.__class__.objects.get(pk=obj.pk)
13
14
15
class ClusterTests(APITestCase):
16
    @classmethod
17
    def setUpTestData(self):
18
        # Summary: 2 clusters, 4 users
19
        # Users #1 and #2 are in cluster #1
20
        # User #1 is admin of cluster #1
21
        # User #3 is Sigma admin
22
23
        super().setUpTestData()
24
25
        # Clusters
26
        self.clusters = ClusterFactory.create_batch(2)
27
28
        # Users
29
        self.users = UserFactory.create_batch(4)
30
        self.users[2].is_staff = True # Sigma admin
31
        self.users[2].save()
32
33
        # Memberships
34
        self.member1 = GroupMemberFactory(user=self.users[0], group=self.clusters[0], perm_rank=Group.ADMINISTRATOR_RANK)
35
        self.member2 = GroupMemberFactory(user=self.users[1], group=self.clusters[0], perm_rank=1)
36
37
        serializer = BasicClusterSerializer(self.clusters[0])
38
        self.cluster_data = serializer.data
39
        self.clusters_url = "/cluster/"
40
        self.cluster_url = self.clusters_url + "%d/"
41
42
        self.new_cluster_data = {"name": "Ecole polytechnique", "design": "default"}
43
44
#### List requests
45
    def test_get_clusters_list_unauthed(self):
46
        # Client not authenticated but can see clusters list
47
        response = self.client.get(self.clusters_url)
48
        self.assertEqual(response.status_code, status.HTTP_200_OK)
49
        self.assertEqual(len(response.data), len(self.clusters))
50
51
    def test_get_clusters_list_ok(self):
52
        self.client.force_authenticate(user=self.users[0])
53
        response = self.client.get(self.clusters_url)
54
        self.assertEqual(response.status_code, status.HTTP_200_OK)
55
        self.assertEqual(len(response.data), len(self.clusters))
56
57
#### Get requests
58
    def test_get_cluster_unauthed(self):
59
        # Client is not authenticated, can see cluster data but cannot see cluster details (especially members)
60
        response = self.client.get(self.cluster_url % self.clusters[0].id)
61
        self.assertEqual(response.status_code, status.HTTP_200_OK)
62
        self.assertNotIn('users_ids', response.data)
63
64
    def test_get_cluster_forbidden(self):
65
        # Client wants to see a cluster whose he is not member of
66
        self.client.force_authenticate(user=self.users[0])
67
        response = self.client.get(self.cluster_url % self.clusters[1].id)
68
        self.assertEqual(response.status_code, status.HTTP_200_OK)
69
        self.assertNotIn('users_ids', response.data)
70
71
    def test_get_cluster_ok(self):
72
        # Client wants to see a cluster to which he belongs
73
        self.client.force_authenticate(user=self.users[1])
74
        response = self.client.get(self.cluster_url % self.clusters[0].id)
75
        self.assertEqual(response.status_code, status.HTTP_200_OK)
76
        self.assertEqual(response.data.get('name', None), self.cluster_data['name'])
77
78
#### Create requests
79
    def test_create_cluster_unauthed(self):
80
        response = self.client.post(self.clusters_url, self.new_cluster_data)
81
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
82
83
    def test_create_cluster_forbidden(self):
84
        self.client.force_authenticate(user=self.users[0])
85
        response = self.client.post(self.clusters_url, self.new_cluster_data)
86
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
87
88
    def test_create_cluster_wrong_data(self):
89
        self.client.force_authenticate(user=self.users[2])
90
        response = self.client.post(self.clusters_url, {"name": ""})
91
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
92
93
    def test_create_cluster_ok(self):
94
        self.client.force_authenticate(user=self.users[2])
95
        response = self.client.post(self.clusters_url, self.new_cluster_data)
96
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
97
        cluster = Cluster.objects.filter(pk=response.data['id']).get()
98
        self.assertEqual(cluster.name, "Ecole polytechnique")
99
        self.assertEqual(cluster.is_private, False)
100
        self.assertEqual(cluster.default_member_rank, -1)
101
        self.assertEqual(cluster.req_rank_invite, Group.ADMINISTRATOR_RANK)
102
103
#### Modification requests
104
    def test_update_cluster_unauthed(self):
105
        self.cluster_data['name'] = "Ecole polytechnique"
106
        response = self.client.put(self.cluster_url % self.cluster_data['id'], self.cluster_data)
107
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
108
109
    def test_update_cluster_forbidden_1(self):
110
        self.client.force_authenticate(user=self.users[3])
111
        self.cluster_data['name'] = "Ecole polytechnique"
112
        response = self.client.put(self.cluster_url % self.cluster_data['id'], self.cluster_data)
113
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
114
115
    def test_update_cluster_forbidden_2(self):
116
        self.client.force_authenticate(user=self.users[1])
117
        self.cluster_data['name'] = "Ecole polytechnique"
118
        response = self.client.put(self.cluster_url % self.cluster_data['id'], self.cluster_data)
119
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
120
121
    def test_update_cluster_wrong_data(self):
122
        self.client.force_authenticate(user=self.users[2])
123
        self.cluster_data['name'] = ""
124
        response = self.client.put(self.cluster_url % self.cluster_data['id'], self.cluster_data)
125
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
126
127 View Code Duplication
    def test_update_cluster_ok_staff(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
128
        self.client.force_authenticate(user=self.users[2])
129
        self.cluster_data['name'] = "Ecole polytechnique"
130
        response = self.client.put(self.cluster_url % self.cluster_data['id'], self.cluster_data)
131
        self.assertEqual(response.status_code, status.HTTP_200_OK)
132
        self.assertEqual(response.data['name'], "Ecole polytechnique")
133
134 View Code Duplication
    def test_update_cluster_ok_cluster_admin(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
135
        self.client.force_authenticate(user=self.users[0])
136
        self.cluster_data['name'] = "Ecole polytechnique"
137
        response = self.client.put(self.cluster_url % self.cluster_data['id'], self.cluster_data)
138
        self.assertEqual(response.status_code, status.HTTP_200_OK)
139
        self.assertEqual(response.data['name'], "Ecole polytechnique")
140
141
#### Invitation process
142
143
144
#### Deletion requests
145