src/notes/tests/api/session.py
changeset 31 63be3ce389f7
child 74 043477fd5c5c
equal deleted inserted replaced
30:4d93f4ed95bc 31:63be3ce389f7
       
     1 """
       
     2 Tests the core api for sessions
       
     3 """
       
     4 import logging
       
     5 
       
     6 from django.contrib.auth import get_user_model
       
     7 from django.urls import reverse
       
     8 from django.utils import timezone
       
     9 from rest_framework import status
       
    10 from rest_framework.test import APITransactionTestCase
       
    11 
       
    12 from notes.models import Session, Note
       
    13 
       
    14 logger = logging.getLogger(__name__)
       
    15 
       
    16 class SessionApiTests(APITransactionTestCase):
       
    17 
       
    18     def setUp(self):
       
    19         User = get_user_model()
       
    20         user1 = User.objects.create_user(
       
    21             username='test_user1',
       
    22             email='test_user@emial.com',
       
    23             password='top_secret'
       
    24         )
       
    25         user2 = User.objects.create_user(
       
    26             username='test_user2',
       
    27             email='test_user@emial.com',
       
    28             password='top_secret'
       
    29         )
       
    30         user3 = User.objects.create_user(
       
    31             username='test_user3',
       
    32             email='test_user@emial.com',
       
    33             password='top_secret'
       
    34         )
       
    35 
       
    36         self.session1 = Session.objects.create(
       
    37             title="a new session 1",
       
    38             description="Description 1",
       
    39             protocol="[]",
       
    40             owner=user1
       
    41         )
       
    42 
       
    43         self.session2 = Session.objects.create(
       
    44             title="a new session 2",
       
    45             description="Description 2",
       
    46             protocol="[]",
       
    47             owner=user2
       
    48         )
       
    49 
       
    50         Session.objects.create(
       
    51             title="a new session 3",
       
    52             description="Description 3",
       
    53             protocol="[]",
       
    54             owner=user3
       
    55         )
       
    56 
       
    57         Note.objects.create(
       
    58             tc_start=timezone.now(),
       
    59             tc_end=timezone.now(),
       
    60             session=self.session1,
       
    61             plain="example note 1",
       
    62             html="<i>example note 1</i>",
       
    63             raw="<i>example note 1</i>",
       
    64             margin_note="margin note 1",
       
    65             categorization="[]"
       
    66         )
       
    67 
       
    68         Note.objects.create(
       
    69             tc_start=timezone.now(),
       
    70             tc_end=timezone.now(),
       
    71             session=self.session2,
       
    72             plain="example note 2",
       
    73             html="<i>example note</i>",
       
    74             raw="<i>example note</i>",
       
    75             margin_note="margin note",
       
    76             categorization="[]"
       
    77         )
       
    78 
       
    79 
       
    80     def test_list_session_no_user(self):
       
    81         url = reverse('notes_api:session-list')
       
    82         response = self.client.post(url)
       
    83         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
       
    84 
       
    85 
       
    86     def test_list_session(self):
       
    87         url = reverse('notes_api:session-list')
       
    88         self.client.login(username='test_user1', password='top_secret')
       
    89         response = self.client.get(url)
       
    90         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
    91         json = response.json()
       
    92         self.assertEqual(len(json), 1, "must have one session")
       
    93         for session in json:
       
    94             self.assertEqual(session['owner'], 'test_user1')
       
    95 
       
    96 
       
    97     def test_create_session_no_user(self):
       
    98         url = reverse('notes_api:session-list')
       
    99         response = self.client.post(url, {
       
   100             'title': "a new session",
       
   101             'description': "description of the session",
       
   102             'protocol': "[]"
       
   103         }, format='json')
       
   104 
       
   105         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
       
   106 
       
   107 
       
   108     def test_create_session(self):
       
   109         url = reverse('notes_api:session-list')
       
   110         self.client.login(username='test_user1', password='top_secret')
       
   111         response = self.client.post(url, {
       
   112             'title': "a new session",
       
   113             'description': "description of the session",
       
   114             'protocol': "[]"
       
   115         }, format='json')
       
   116 
       
   117 
       
   118         self.assertEqual(response.status_code, status.HTTP_201_CREATED)
       
   119         json = response.json()
       
   120         self.assertIn('ext_id', json)
       
   121 
       
   122     def test_detail_session(self):
       
   123         url = reverse('notes_api:session-detail', kwargs={'ext_id':str(self.session1.ext_id)})
       
   124         self.client.login(username='test_user1', password='top_secret')
       
   125         response = self.client.get(url, format='json')
       
   126         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   127 
       
   128     def test_list_notes(self):
       
   129         url = reverse('notes_api:notes-list', kwargs={'session_ext_id':str(self.session1.ext_id)})
       
   130         self.client.login(username='test_user1', password='top_secret')
       
   131         response = self.client.get(url, format='json')
       
   132         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   133 
       
   134     def test_detail_session_bad(self):
       
   135         url = reverse('notes_api:session-detail', kwargs={'ext_id':str(self.session2.ext_id)})
       
   136         self.client.login(username='test_user1', password='top_secret')
       
   137         response = self.client.get(url, format='json')
       
   138         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
       
   139 
       
   140     def test_list_notes_bad(self):
       
   141         url = reverse('notes_api:notes-list', kwargs={'session_ext_id':str(self.session2.ext_id)})
       
   142         logger.debug("URL: %s", url)
       
   143         self.client.login(username='test_user1', password='top_secret')
       
   144         response = self.client.get(url, format='json')
       
   145         logger.debug(response.json())
       
   146         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)