add parameter to filter session and note by updated date. Add pagination on sessions and notes. add read only endpoint at root level to list notes
"""
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()))
)