src/notes/tests/api/auth.py
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 131 adad5563603c
permissions -rw-r--r--
Change the settings to avoid using Session authentication for rest framework as it raise exceptions in case client and backend are on the same domain On the filter, adapt to take into account new version of django_filters
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
"""
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
Tests the core api for sessions
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
"""
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
import logging
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from uuid import uuid4
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.contrib.auth import get_user_model
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.urls import reverse
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.utils import timezone
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from rest_framework import status
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
from rest_framework.test import APITransactionTestCase
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
from django.contrib.auth.models import Group
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
logger = logging.getLogger(__name__)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
class GroupApiTests(APITransactionTestCase):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    def setUp(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        User = get_user_model()
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        self.user1 = User.objects.create_user(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
            username='test_user1',
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    23
            email='test_user@email.com',
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
            password='top_secret'
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        )
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        self.user2 = User.objects.create_user(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
            username='test_user2',
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    28
            email='test_user@email.com',
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
            password='top_secret'
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        )
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        self.group1 = Group(name='group1')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
        self.group1.save()
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        self.group1.user_set.add(self.user1)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        self.group1.profile.owner = self.user1
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        self.group1.profile.description = "This is the group 1"
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        self.group1.profile.save()
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        self.group2 = Group(name='group2')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        self.group2.save()
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        self.group2.profile.owner = self.user2
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        self.group2.profile.description = "This is the group 2"
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        self.group2.profile.save()
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    def test_list_group_no_login(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        url = reverse('auth_group-list')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        response = self.client.get(url)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        logger.debug("LIST group response %r", response.data)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    def test_list_group(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        url = reverse('auth_group-list')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        response = self.client.get(url)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
        self.assertEqual(response.status_code, status.HTTP_200_OK)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    61
        resp_json = response.json()
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    62
        self.assertIn('count', resp_json)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    63
        self.assertIn('results', resp_json)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    64
        self.assertEqual(4, resp_json['count'], "Must have 4 groups")
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    65
        self.assertEqual(4, len(resp_json['results']), "Must have 4 groups")
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    66
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    67
        for group_def in resp_json['results']:
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    68
            self.assertIn('name', group_def)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    69
            self.assertIn('owner', group_def)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    70
            self.assertIn('is_personal', group_def)
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    71
            self.assertIn('description', group_def)
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
            self.assertIn(group_def.get('owner'), ['test_user1', 'test_user2'])
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    73
            self.assertIn(group_def.get('description'), [
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    74
                'This is the group 1',
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    75
                'This is the group 2',
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    76
                'test_user1 personal group',
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    77
                'test_user2 personal group'])
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    78
            self.assertIn(group_def.get('name'), ['group1', 'group2', 'test_user1 group', 'test_user2 group'])
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    def test_create_group(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        url = reverse('auth_group-list')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        response = self.client.post(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            url,
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            {'name':"group3", 'description': "this is group 3", 'users': ['test_user2']})
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        self.assertEqual('group3', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users')))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        group3 = Group.objects.get(name='group3')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        self.assertEqual('this is group 3', group3.profile.description)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        self.assertSetEqual(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
            set(['test_user1', 'test_user2']),
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
            set(map(lambda u: u.username, group3.user_set.all()))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        )
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    def test_create_group_no_user(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        url = reverse('auth_group-list')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        response = self.client.post(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
            url,
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
            {'name':"group3", 'description': "this is group 3"})
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        self.assertEqual('group3', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        self.assertSetEqual(set(['test_user1']), set(response.data.get('users')))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        group3 = Group.objects.get(name='group3')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        self.assertEqual('this is group 3', group3.profile.description)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
        self.assertSetEqual(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            set(['test_user1']),
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
            set(map(lambda u: u.username, group3.user_set.all()))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
        )
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    def test_detail_group(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        url = reverse('auth_group-detail', kwargs={'name': self.group1.name})
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        response = self.client.get(url)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
        self.assertEqual(response.status_code, status.HTTP_200_OK)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
        self.assertEqual('group1', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        self.assertEqual('This is the group 1', response.data.get('description'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
        self.assertSetEqual(set(['test_user1']), set(response.data.get('users')))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
    def test_update_group(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
        url = reverse('auth_group-detail', kwargs={'name': self.group1.name})
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        response = self.client.put(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
            url,
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
            {'name': 'group1', 'description': "this is group 1 changed", 'users': ['test_user2']})
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        logger.debug("RESPONSE %r", response.data)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
        self.assertEqual(response.status_code, status.HTTP_200_OK)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
        self.assertEqual('group1', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        self.assertEqual('this is group 1 changed', response.data.get('description'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
        self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users')))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        group1 = Group.objects.get(name='group1')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
        self.assertEqual('this is group 1 changed', group1.profile.description)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        self.assertSetEqual(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
            set(['test_user1', 'test_user2']),
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
            set(map(lambda u: u.username, group1.user_set.all()))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
        )