Completed
Pull Request — master (#16)
by
unknown
53s
created

GroupFieldTests.test_create_not_authed()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 2
rs 10
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.models.group_member_value import GroupMemberValue
12
from sigma_core.models.group_field import GroupField
13
from sigma_core.models.validator import Validator
14
from sigma_core.tests.factories import UserFactory, GroupFieldFactory, GroupFactory, GroupMemberFactory
15
16
17
class GroupFieldTests(APITestCase):
18
    fixtures = ['fixtures_prod.json'] # Import Validators
19
    @classmethod
20
    def setUpTestData(self):
21
        super(APITestCase, self).setUpTestData()
22
23
        # Routes
24
        self.group_field_url = "/group-member-value/"
25
26
        # Create the base Group
27
        self.group = GroupFactory()
28
29
        # Users already in group
30
        # User[0]: Not in Group
31
        # User[1]: Requested join, not accepted
32
        # User[2]: Group member
33
        # User[3]: Group admin
34
        self.users = [UserFactory(), UserFactory(), UserFactory(), UserFactory()]
35
        # Associated GroupMember
36
        self.group_member = [
37
            None,
38
            GroupMemberFactory(user=self.users[1], group=self.group, perm_rank=0),
39
            GroupMemberFactory(user=self.users[2], group=self.group, perm_rank=1),
40
            GroupMemberFactory(user=self.users[3], group=self.group, perm_rank=Group.ADMINISTRATOR_RANK)
41
        ]
42
        # Let's add some custom fields to this Group
43
        self.validator_none = Validator.objects.all().get(html_name=Validator.VALIDATOR_NONE)
44
        self.validator_text = Validator.objects.all().get(html_name=Validator.VALIDATOR_TEXT)
45
        self.group_fields = [
46
            # First field does not require any validation
47
            GroupFieldFactory(group=self.group, validator=self.validator_none, validator_values={}),
48
            # Second field must be in the email format
49
            GroupFieldFactory(group=self.group,
50
                validator=self.validator_text,
51
                validator_values={"regex": "[^@]+@[^@]+\.[^@]+", "message": "Invalid email"})
52
        ]
53
54
        # And we need a second group
55
        self.group2 = GroupFactory()
56
        self.group2_user2 = GroupMemberFactory(user=self.users[2], group=self.group2, perm_rank=1)
57
58
59
    #################### TEST GROUP MEMBER VALUE CREATION ######################
60
    def try_create(self, userIdx, membershipIdx, fieldIdx, fieldValue, expectedHttpResponse):
61
        if userIdx >= 0:
62
            self.client.force_authenticate(user=self.users[userIdx])
63
        field_value = {
64
            "membership": membershipIdx,
65
            "field": fieldIdx,
66
            "value": fieldValue
67
        }
68
        resp = self.client.post(self.group_field_url, field_value)
69
        self.assertEqual(resp.status_code, expectedHttpResponse)
70
71
    # Basic permission checks
72
    def test_create_not_authed(self):
73
        self.try_create(-1, -1, self.group_fields[0].id, "ABC", status.HTTP_401_UNAUTHORIZED)
74
75
    def test_create_not_group_member(self):
76
        self.try_create(0, 0, self.group_fields[0].id, "ABC", status.HTTP_400_BAD_REQUEST)
77
78
    # Some possible hack attempts now
79
    def test_create_not_group_member2(self):
80
        self.try_create(0, self.group_member[2].id, self.group_fields[0].id, "ABC", status.HTTP_400_BAD_REQUEST)
81
82
    def test_create_other_user(self):
83
        self.try_create(1, self.group_member[2].id, self.group_fields[0].id, "ABC", status.HTTP_400_BAD_REQUEST)
84
85
    def test_create_group_field_mismatch(self):
86
        self.try_create(2, self.group2_user2.id, self.group_fields[0].id, "ABC", status.HTTP_400_BAD_REQUEST)
87
88
    # Create OK cases
89
    def test_create_group_member_not_accepted(self):
90
        self.try_create(1, self.group_member[1].id, self.group_fields[0].id, "ABC", status.HTTP_201_CREATED)
91
92
    def test_create_group_member(self):
93
        self.try_create(2, self.group_member[2].id, self.group_fields[0].id, "ABC", status.HTTP_201_CREATED)
94
95
    def test_create_group_admin(self):
96
        self.try_create(3, self.group_member[3].id, self.group_fields[0].id, "ABC", status.HTTP_201_CREATED)
97