src/notes/tests/api/session.py
changeset 131 adad5563603c
parent 128 34a75bd8d0b9
child 142 56850f5c73f6
--- a/src/notes/tests/api/session.py	Sun Jul 30 01:02:09 2017 +0200
+++ b/src/notes/tests/api/session.py	Mon Jul 31 23:18:38 2017 +0200
@@ -6,12 +6,13 @@
 from uuid import uuid4
 
 from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group
 from django.urls import reverse
 from django.utils import timezone
 from rest_framework import status
 from rest_framework.test import APITransactionTestCase
 
-from notes.models import Session, Note
+from notes.models import Session, Note, GroupProfile
 
 logger = logging.getLogger(__name__)
 
@@ -19,12 +20,12 @@
 
     def setUp(self):
         User = get_user_model()
-        user1 = User.objects.create_user(
+        self.user1 = User.objects.create_user(
             username='test_user1',
             email='test_user@emial.com',
             password='top_secret'
         )
-        user2 = User.objects.create_user(
+        self.user2 = User.objects.create_user(
             username='test_user2',
             email='test_user@emial.com',
             password='top_secret'
@@ -35,24 +36,38 @@
             password='top_secret'
         )
 
+        self.group1 = Group(name='group1')
+        self.group1.save()
+        self.group1.user_set.add(self.user1)
+        self.group1.user_set.add(self.user2)
+        self.group1.profile.owner = self.user1
+        self.group1.profile.description = "This is the group 1"
+        self.group1.profile.save()
+
+        self.user2.profile.default_group = self.group1
+        self.user2.profile.save()
+
         self.session1 = Session.objects.create(
             title="a new session 1",
             description="Description 1",
             protocol="[]",
-            owner=user1
+            group=self.user1.profile.default_group,
+            owner=self.user1
         )
 
         self.session2 = Session.objects.create(
             title="a new session 2",
             description="Description 2",
             protocol="[]",
-            owner=user2
+            group=self.user2.profile.default_group,
+            owner=self.user2
         )
 
         self.session3 = Session.objects.create(
             title="a new session 3",
             description="Description 3",
             protocol="[]",
+            group=user3.profile.default_group,
             owner=user3
         )
 
@@ -60,6 +75,7 @@
             title="a new session 4",
             description="Description 4",
             protocol="[]",
+            group=user3.profile.default_group,
             owner=user3
         )
 
@@ -150,14 +166,89 @@
         response = self.client.post(url, {
             'title': "a new session",
             'description': "description of the session",
-            'protocol': "[]"
+            'protocol': "[]",
+            'group': 'group1'
         }, format='json')
 
-
         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         json = response.json()
         self.assertIn('ext_id', json)
 
+        session = Session.objects.get(ext_id=json['ext_id'])
+        self.assertIsNotNone(session)
+        self.assertEqual(self.group1, session.group)
+
+
+    def test_create_session_no_group(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user1', password='top_secret')
+        response = self.client.post(url, {
+            'title': "a new session",
+            'description': "description of the session",
+            'protocol': "[]",
+        }, format='json')
+
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED, "Error when creating session %r" % response.json())
+        json = response.json()
+        self.assertIn('ext_id', json)
+
+        session = Session.objects.get(ext_id=json['ext_id'])
+        self.assertIsNotNone(session)
+        user1_personal_group = Group.objects.get(profile__owner_personal=self.user1)
+        self.assertEqual(user1_personal_group, session.group)
+
+    def test_create_session_no_group_default(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user2', password='top_secret')
+        response = self.client.post(url, {
+            'title': "a new session",
+            'description': "description of the session",
+            'protocol': "[]",
+        }, format='json')
+
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED, "Error when creating session %r" % response.json())
+        json = response.json()
+        self.assertIn('ext_id', json)
+
+        session = Session.objects.get(ext_id=json['ext_id'])
+        self.assertIsNotNone(session)
+        self.assertEqual(self.group1, session.group)
+
+
+    def test_create_session_no_group_default(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user2', password='top_secret')
+        response = self.client.post(url, {
+            'title': "a new session",
+            'description': "description of the session",
+            'protocol': "[]",
+        }, format='json')
+
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED, "Error when creating session %r" % response.json())
+        json = response.json()
+        self.assertIn('ext_id', json)
+
+        session = Session.objects.get(ext_id=json['ext_id'])
+        self.assertIsNotNone(session)
+        self.assertEqual(self.group1, session.group)
+
+
+    def test_create_session_bad_group(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user3', password='top_secret')
+        response = self.client.post(url, {
+            'title': "a new session",
+            'description': "description of the session",
+            'protocol': "[]",
+            'group': "group1"
+        }, format='json')
+
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+        json = response.json()
+        self.assertIn('non_field_errors', json)
+        self.assertIn('Owner must be in group', json['non_field_errors'])
+
+
     def test_create_session_with_ext_id(self):
         url = reverse('notes:session-list')
         self.client.login(username='test_user1', password='top_secret')
@@ -166,6 +257,7 @@
             'ext_id': ext_id,
             'title': "a new session",
             'description': "description of the session",
+            'group': 'group1',
             'protocol': "[]"
         }, format='json')