src/notes/tests/api/auth.py
changeset 117 9864fe2067cd
child 131 adad5563603c
equal deleted inserted replaced
116:672e3c4bbd0c 117:9864fe2067cd
       
     1 """
       
     2 Tests the core api for sessions
       
     3 """
       
     4 import logging
       
     5 from uuid import uuid4
       
     6 
       
     7 from django.contrib.auth import get_user_model
       
     8 from django.urls import reverse
       
     9 from django.utils import timezone
       
    10 from rest_framework import status
       
    11 from rest_framework.test import APITransactionTestCase
       
    12 from django.contrib.auth.models import Group
       
    13 
       
    14 logger = logging.getLogger(__name__)
       
    15 
       
    16 
       
    17 class GroupApiTests(APITransactionTestCase):
       
    18 
       
    19     def setUp(self):
       
    20         User = get_user_model()
       
    21         self.user1 = User.objects.create_user(
       
    22             username='test_user1',
       
    23             email='test_user@emial.com',
       
    24             password='top_secret'
       
    25         )
       
    26         self.user2 = User.objects.create_user(
       
    27             username='test_user2',
       
    28             email='test_user@emial.com',
       
    29             password='top_secret'
       
    30         )
       
    31 
       
    32         self.group1 = Group(name='group1')
       
    33         self.group1.save()
       
    34         self.group1.user_set.add(self.user1)
       
    35         self.group1.profile.owner = self.user1
       
    36         self.group1.profile.description = "This is the group 1"
       
    37         self.group1.profile.save()
       
    38 
       
    39         self.group2 = Group(name='group2')
       
    40         self.group2.save()
       
    41         self.group2.profile.owner = self.user2
       
    42         self.group2.profile.description = "This is the group 2"
       
    43         self.group2.profile.save()
       
    44 
       
    45 
       
    46     def test_list_group_no_login(self):
       
    47         url = reverse('auth_group-list')
       
    48         response = self.client.get(url)
       
    49         logger.debug("LIST group response %r", response.data)
       
    50 
       
    51         self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
       
    52 
       
    53 
       
    54     def test_list_group(self):
       
    55         url = reverse('auth_group-list')
       
    56         self.client.login(username='test_user1', password='top_secret')
       
    57         response = self.client.get(url)
       
    58 
       
    59         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
    60 
       
    61         self.assertEqual(2, len(response.data), "Must have 2 groups")
       
    62         for group_def in response.data:
       
    63             self.assertIn('name', group_def.keys())
       
    64             self.assertIn('owner', group_def.keys())
       
    65             self.assertIn('description', group_def.keys())
       
    66             self.assertIn(group_def.get('owner'), ['test_user1', 'test_user2'])
       
    67             self.assertIn(group_def.get('description'), ['This is the group 1', 'This is the group 2'])
       
    68             self.assertIn(group_def.get('name'), ['group1', 'group2'])
       
    69 
       
    70     def test_create_group(self):
       
    71         url = reverse('auth_group-list')
       
    72         self.client.login(username='test_user1', password='top_secret')
       
    73         response = self.client.post(
       
    74             url,
       
    75             {'name':"group3", 'description': "this is group 3", 'users': ['test_user2']})
       
    76 
       
    77         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
       
    78 
       
    79         self.assertEqual('group3', response.data.get('name'))
       
    80         self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users')))
       
    81 
       
    82         group3 = Group.objects.get(name='group3')
       
    83         self.assertEqual('this is group 3', group3.profile.description)
       
    84         self.assertSetEqual(
       
    85             set(['test_user1', 'test_user2']),
       
    86             set(map(lambda u: u.username, group3.user_set.all()))
       
    87         )
       
    88 
       
    89     def test_create_group_no_user(self):
       
    90         url = reverse('auth_group-list')
       
    91         self.client.login(username='test_user1', password='top_secret')
       
    92         response = self.client.post(
       
    93             url,
       
    94             {'name':"group3", 'description': "this is group 3"})
       
    95 
       
    96         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
       
    97 
       
    98         self.assertEqual('group3', response.data.get('name'))
       
    99         self.assertSetEqual(set(['test_user1']), set(response.data.get('users')))
       
   100 
       
   101         group3 = Group.objects.get(name='group3')
       
   102         self.assertEqual('this is group 3', group3.profile.description)
       
   103         self.assertSetEqual(
       
   104             set(['test_user1']),
       
   105             set(map(lambda u: u.username, group3.user_set.all()))
       
   106         )
       
   107 
       
   108 
       
   109     def test_detail_group(self):
       
   110         url = reverse('auth_group-detail', kwargs={'name': self.group1.name})
       
   111         self.client.login(username='test_user1', password='top_secret')
       
   112         response = self.client.get(url)
       
   113 
       
   114         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   115         self.assertEqual('group1', response.data.get('name'))
       
   116         self.assertEqual('This is the group 1', response.data.get('description'))
       
   117         self.assertSetEqual(set(['test_user1']), set(response.data.get('users')))
       
   118 
       
   119     def test_update_group(self):
       
   120         url = reverse('auth_group-detail', kwargs={'name': self.group1.name})
       
   121         self.client.login(username='test_user1', password='top_secret')
       
   122         response = self.client.put(
       
   123             url,
       
   124             {'name': 'group1', 'description': "this is group 1 changed", 'users': ['test_user2']})
       
   125 
       
   126         logger.debug("RESPONSE %r", response.data)
       
   127         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   128         self.assertEqual('group1', response.data.get('name'))
       
   129         self.assertEqual('this is group 1 changed', response.data.get('description'))
       
   130         self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users')))
       
   131 
       
   132         group1 = Group.objects.get(name='group1')
       
   133         self.assertEqual('this is group 1 changed', group1.profile.description)
       
   134         self.assertSetEqual(
       
   135             set(['test_user1', 'test_user2']),
       
   136             set(map(lambda u: u.username, group1.user_set.all()))
       
   137         )