src/notes/tests/api/auth.py
author ymh <ymh.work@gmail.com>
Wed, 19 Jul 2017 16:20:29 +0200
changeset 120 892980a3af09
parent 117 9864fe2067cd
child 131 adad5563603c
permissions -rw-r--r--
for notes api, the end point list all properties.
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',
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
            email='test_user@emial.com',
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',
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
            email='test_user@emial.com',
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
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        self.assertEqual(2, len(response.data), "Must have 2 groups")
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        for group_def in response.data:
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
            self.assertIn('name', group_def.keys())
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
            self.assertIn('owner', group_def.keys())
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
            self.assertIn('description', group_def.keys())
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
            self.assertIn(group_def.get('owner'), ['test_user1', 'test_user2'])
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
            self.assertIn(group_def.get('description'), ['This is the group 1', 'This is the group 2'])
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            self.assertIn(group_def.get('name'), ['group1', 'group2'])
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    def test_create_group(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        url = reverse('auth_group-list')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        response = self.client.post(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
            url,
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            {'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
    76
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        self.assertEqual('group3', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        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
    81
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        group3 = Group.objects.get(name='group3')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        self.assertEqual('this is group 3', group3.profile.description)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        self.assertSetEqual(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            set(['test_user1', 'test_user2']),
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
            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
    87
        )
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
    def test_create_group_no_user(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        url = reverse('auth_group-list')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        response = self.client.post(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
            url,
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
            {'name':"group3", 'description': "this is group 3"})
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
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
        self.assertEqual('group3', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        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
   100
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        group3 = Group.objects.get(name='group3')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        self.assertEqual('this is group 3', group3.profile.description)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        self.assertSetEqual(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
            set(['test_user1']),
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
            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
   106
        )
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
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    def test_detail_group(self):
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        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
   111
        self.client.login(username='test_user1', password='top_secret')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        response = self.client.get(url)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        self.assertEqual(response.status_code, status.HTTP_200_OK)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        self.assertEqual('group1', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
        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
   117
        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
   118
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    def test_update_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.put(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            url,
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
            {'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
   125
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        logger.debug("RESPONSE %r", response.data)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
        self.assertEqual(response.status_code, status.HTTP_200_OK)
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
        self.assertEqual('group1', response.data.get('name'))
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        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
   130
        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
   131
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        group1 = Group.objects.get(name='group1')
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
        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
   134
        self.assertSetEqual(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
            set(['test_user1', 'test_user2']),
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
            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
   137
        )