src/notes/tests/api/auth.py
changeset 117 9864fe2067cd
child 131 adad5563603c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/notes/tests/api/auth.py	Tue Jul 18 17:08:27 2017 +0200
@@ -0,0 +1,137 @@
+"""
+Tests the core api for sessions
+"""
+import logging
+from uuid import uuid4
+
+from django.contrib.auth import get_user_model
+from django.urls import reverse
+from django.utils import timezone
+from rest_framework import status
+from rest_framework.test import APITransactionTestCase
+from django.contrib.auth.models import Group
+
+logger = logging.getLogger(__name__)
+
+
+class GroupApiTests(APITransactionTestCase):
+
+    def setUp(self):
+        User = get_user_model()
+        self.user1 = User.objects.create_user(
+            username='test_user1',
+            email='test_user@emial.com',
+            password='top_secret'
+        )
+        self.user2 = User.objects.create_user(
+            username='test_user2',
+            email='test_user@emial.com',
+            password='top_secret'
+        )
+
+        self.group1 = Group(name='group1')
+        self.group1.save()
+        self.group1.user_set.add(self.user1)
+        self.group1.profile.owner = self.user1
+        self.group1.profile.description = "This is the group 1"
+        self.group1.profile.save()
+
+        self.group2 = Group(name='group2')
+        self.group2.save()
+        self.group2.profile.owner = self.user2
+        self.group2.profile.description = "This is the group 2"
+        self.group2.profile.save()
+
+
+    def test_list_group_no_login(self):
+        url = reverse('auth_group-list')
+        response = self.client.get(url)
+        logger.debug("LIST group response %r", response.data)
+
+        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
+
+
+    def test_list_group(self):
+        url = reverse('auth_group-list')
+        self.client.login(username='test_user1', password='top_secret')
+        response = self.client.get(url)
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+        self.assertEqual(2, len(response.data), "Must have 2 groups")
+        for group_def in response.data:
+            self.assertIn('name', group_def.keys())
+            self.assertIn('owner', group_def.keys())
+            self.assertIn('description', group_def.keys())
+            self.assertIn(group_def.get('owner'), ['test_user1', 'test_user2'])
+            self.assertIn(group_def.get('description'), ['This is the group 1', 'This is the group 2'])
+            self.assertIn(group_def.get('name'), ['group1', 'group2'])
+
+    def test_create_group(self):
+        url = reverse('auth_group-list')
+        self.client.login(username='test_user1', password='top_secret')
+        response = self.client.post(
+            url,
+            {'name':"group3", 'description': "this is group 3", 'users': ['test_user2']})
+
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+
+        self.assertEqual('group3', response.data.get('name'))
+        self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users')))
+
+        group3 = Group.objects.get(name='group3')
+        self.assertEqual('this is group 3', group3.profile.description)
+        self.assertSetEqual(
+            set(['test_user1', 'test_user2']),
+            set(map(lambda u: u.username, group3.user_set.all()))
+        )
+
+    def test_create_group_no_user(self):
+        url = reverse('auth_group-list')
+        self.client.login(username='test_user1', password='top_secret')
+        response = self.client.post(
+            url,
+            {'name':"group3", 'description': "this is group 3"})
+
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+
+        self.assertEqual('group3', response.data.get('name'))
+        self.assertSetEqual(set(['test_user1']), set(response.data.get('users')))
+
+        group3 = Group.objects.get(name='group3')
+        self.assertEqual('this is group 3', group3.profile.description)
+        self.assertSetEqual(
+            set(['test_user1']),
+            set(map(lambda u: u.username, group3.user_set.all()))
+        )
+
+
+    def test_detail_group(self):
+        url = reverse('auth_group-detail', kwargs={'name': self.group1.name})
+        self.client.login(username='test_user1', password='top_secret')
+        response = self.client.get(url)
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual('group1', response.data.get('name'))
+        self.assertEqual('This is the group 1', response.data.get('description'))
+        self.assertSetEqual(set(['test_user1']), set(response.data.get('users')))
+
+    def test_update_group(self):
+        url = reverse('auth_group-detail', kwargs={'name': self.group1.name})
+        self.client.login(username='test_user1', password='top_secret')
+        response = self.client.put(
+            url,
+            {'name': 'group1', 'description': "this is group 1 changed", 'users': ['test_user2']})
+
+        logger.debug("RESPONSE %r", response.data)
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual('group1', response.data.get('name'))
+        self.assertEqual('this is group 1 changed', response.data.get('description'))
+        self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users')))
+
+        group1 = Group.objects.get(name='group1')
+        self.assertEqual('this is group 1 changed', group1.profile.description)
+        self.assertSetEqual(
+            set(['test_user1', 'test_user2']),
+            set(map(lambda u: u.username, group1.user_set.all()))
+        )