-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New models, some tests - some of them are failing, will investigate tomorrow. Created route /group-field Rename GroupCustomField => GroupField Rename GroupCustomFieldValue => GroupMemberField ...
- Loading branch information
TheBirdie
authored and
TheBirdie
committed
Jan 26, 2016
1 parent
acccbe9
commit ade628c
Showing
13 changed files
with
277 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# -*- coding: utf-8 -*- | ||
# Generated by Django 1.9 on 2016-01-26 14:24 | ||
from __future__ import unicode_literals | ||
|
||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
('sigma_core', '0010_auto_20160126_1436'), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='GroupMemberCustomField', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('value', models.CharField(max_length=255)), | ||
('field', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='sigma_core.GroupCustomField')), | ||
('membership', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='values', to='sigma_core.GroupMember')), | ||
], | ||
), | ||
migrations.AlterUniqueTogether( | ||
name='groupmembercustomfield', | ||
unique_together=set([('membership', 'field')]), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
# -*- coding: utf-8 -*- | ||
# Generated by Django 1.9 on 2016-01-26 20:42 | ||
from __future__ import unicode_literals | ||
|
||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
('sigma_core', '0011_auto_20160126_1524'), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='GroupField', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('name', models.CharField(max_length=255)), | ||
('validator_values', models.CharField(max_length=1024)), | ||
], | ||
), | ||
migrations.RemoveField( | ||
model_name='groupcustomfield', | ||
name='validator', | ||
), | ||
migrations.AlterUniqueTogether( | ||
name='groupmembercustomfield', | ||
unique_together=set([]), | ||
), | ||
migrations.RemoveField( | ||
model_name='groupmembercustomfield', | ||
name='field', | ||
), | ||
migrations.RemoveField( | ||
model_name='groupmembercustomfield', | ||
name='membership', | ||
), | ||
migrations.RemoveField( | ||
model_name='group', | ||
name='custom_fields', | ||
), | ||
migrations.DeleteModel( | ||
name='GroupCustomField', | ||
), | ||
migrations.DeleteModel( | ||
name='GroupMemberCustomField', | ||
), | ||
migrations.AddField( | ||
model_name='groupfield', | ||
name='group', | ||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fields', to='sigma_core.Group'), | ||
), | ||
migrations.AddField( | ||
model_name='groupfield', | ||
name='validator', | ||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='sigma_core.Validator'), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
from django.db import models | ||
|
||
from sigma_core.models.custom_field import CustomField | ||
|
||
|
||
class GroupField(CustomField): | ||
class Meta: | ||
pass | ||
|
||
group = models.ForeignKey('Group', related_name='fields') | ||
# Generated fields: | ||
# values | ||
|
||
################################################################ | ||
# PERMISSIONS # | ||
################################################################ | ||
|
||
@staticmethod | ||
def has_read_permission(request): | ||
return request.user.is_authenticated() | ||
|
||
def has_object_read_permission(self, request): | ||
return request.user.is_authenticated() and request.user.is_group_member(self.group) | ||
|
||
@staticmethod | ||
def has_write_permission(request): | ||
return request.user.is_authenticated() | ||
|
||
def has_object_write_permission(self, request): | ||
return request.user.is_authenticated() and request.user.is_group_admin(self.group) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
from django.db import models | ||
|
||
from sigma_core.models.custom_field import CustomField | ||
from sigma_core.models.user import User | ||
|
||
class GroupMemberField(models.Model): | ||
class Meta: | ||
unique_together = (("membership", "field"),) | ||
|
||
membership = models.ForeignKey('GroupMember', related_name='values') | ||
fields = models.ForeignKey('GroupField', related_name='+') | ||
value = models.CharField(max_length=CustomField.FIELD_VALUE_MAX_LENGTH) | ||
|
||
def has_object_read_permission(self, request): | ||
return self.membership.user.is_group_member(self.membership.group) | ||
def has_object_write_permission(self, request): | ||
return self.membership.user.is_group_member(self.membership.group) and self.membership.user == request.user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
from rest_framework import serializers | ||
|
||
from sigma_core.models.user import User | ||
from sigma_core.models.group_field import GroupField | ||
from sigma_core.models.group import Group | ||
|
||
class GroupFieldSerializer(serializers.ModelSerializer): | ||
class Meta: | ||
model = GroupField | ||
|
||
group = serializers.PrimaryKeyRelatedField(queryset=Group.objects.all()) | ||
|
||
class GroupFieldCreateSerializer(GroupFieldSerializer): | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
import json | ||
|
||
from django.core import mail | ||
|
||
from rest_framework import status | ||
from rest_framework.test import APITestCase | ||
|
||
from sigma_core.models.user import User | ||
from sigma_core.models.group import Group | ||
from sigma_core.models.group_member import GroupMember | ||
from sigma_core.models.group_field import GroupField | ||
from sigma_core.models.validator import Validator | ||
from sigma_core.tests.factories import UserFactory, AdminUserFactory, GroupFactory, GroupMemberFactory | ||
|
||
|
||
class GroupFieldTests(APITestCase): | ||
@classmethod | ||
def setUpTestData(self): | ||
super(APITestCase, self).setUpTestData() | ||
|
||
# Routes | ||
self.group_field_url = "/group-field/" | ||
|
||
# Group open to anyone | ||
self.group = GroupFactory() | ||
self.group.save() | ||
|
||
# Users already in group | ||
# User[0]: Not in Group | ||
# User[1]: Requested join, not accepted | ||
# User[2]: Group member | ||
# User[3]: Group admin | ||
self.users = [UserFactory(), UserFactory(), UserFactory(), UserFactory()] | ||
# Associated GroupMember | ||
self.group_member = [ | ||
None, | ||
GroupMember(user=self.users[1], group=self.group, perm_rank=0), | ||
GroupMember(user=self.users[2], group=self.group, perm_rank=1), | ||
GroupMember(user=self.users[3], group=self.group, perm_rank=Group.ADMINISTRATOR_RANK) | ||
] | ||
|
||
# Misc | ||
self.new_field_data = {"group": self.group.id, | ||
"name": "Example Group Field", | ||
"validator": Validator.VALIDATOR_NONE, | ||
"validator_values": {}} | ||
|
||
#################### TEST GROUP FIELD CREATION ######################## | ||
def try_create(self, user): | ||
self.client.force_authenticate(user=user) | ||
resp = self.client.post(self.group_field_url, self.new_field_data) | ||
return resp.status_code | ||
|
||
def test_create_not_authed(self): | ||
self.assertEqual(self.try_create(None), status.HTTP_401_UNAUTHORIZED) | ||
|
||
def test_create_not_group_member(self): | ||
self.assertEqual(self.try_create(self.users[0]), status.HTTP_403_FORBIDDEN) | ||
|
||
def test_create_not_group_accepted(self): | ||
self.assertEqual(self.try_create(self.users[1]), status.HTTP_403_FORBIDDEN) | ||
|
||
def test_create_not_group_admin(self): | ||
self.assertEqual(self.try_create(self.users[2]), status.HTTP_403_FORBIDDEN) | ||
|
||
def test_create_ok(self): | ||
self.assertEqual(self.try_create(self.users[3]), status.HTTP_201_CREATED) |
Oops, something went wrong.