src/notes/tests/api/note.py
changeset 119 8ff8e2aee0f9
parent 85 e17899ced2b8
child 120 892980a3af09
equal deleted inserted replaced
118:2cb8d11aa9ca 119:8ff8e2aee0f9
     1 """
     1 """
     2 Tests the core api for sessions
     2 Tests the core api for sessions
     3 """
     3 """
       
     4 import datetime
     4 import logging
     5 import logging
     5 from uuid import uuid4
     6 from uuid import uuid4
     6 
     7 
     7 from django.contrib.auth import get_user_model
     8 from django.contrib.auth import get_user_model
     8 from django.urls import reverse
     9 from django.urls import reverse
    14 
    15 
    15 logger = logging.getLogger(__name__)
    16 logger = logging.getLogger(__name__)
    16 
    17 
    17 
    18 
    18 class NoteApiTests(APITransactionTestCase):
    19 class NoteApiTests(APITransactionTestCase):
       
    20     '''
       
    21     Test Note api
       
    22     '''
    19 
    23 
    20     def setUp(self):
    24     def setUp(self):
    21         User = get_user_model()
    25         User = get_user_model()
    22         user1 = User.objects.create_user(
    26         user1 = User.objects.create_user(
    23             username='test_user1',
    27             username='test_user1',
    65             raw="<i>example note 1</i>",
    69             raw="<i>example note 1</i>",
    66             margin_note="margin note 1",
    70             margin_note="margin note 1",
    67             categorization="[]"
    71             categorization="[]"
    68         )
    72         )
    69 
    73 
       
    74         self.note2 = Note.objects.create(
       
    75             tc_start=timezone.now(),
       
    76             tc_end=timezone.now(),
       
    77             session=self.session1,
       
    78             plain="example note 1.1",
       
    79             html="<i>example note 1,1</i>",
       
    80             raw="<i>example note 1.1</i>",
       
    81             margin_note="margin note 1.1",
       
    82             categorization="[]"
       
    83         )
       
    84 
       
    85 
    70         Note.objects.create(
    86         Note.objects.create(
    71             tc_start=timezone.now(),
    87             tc_start=timezone.now(),
    72             tc_end=timezone.now(),
    88             tc_end=timezone.now(),
    73             session=self.session2,
    89             session=self.session2,
    74             plain="example note 2",
    90             plain="example note 2",
    77             margin_note="margin note",
    93             margin_note="margin note",
    78             categorization="[]"
    94             categorization="[]"
    79         )
    95         )
    80 
    96 
    81     def test_create_note_no_user(self):
    97     def test_create_note_no_user(self):
    82         url = reverse('notes:notes-list',
    98         url = reverse('notes:notes-session-list',
    83                       kwargs={'session_ext_id': self.session1.ext_id})
    99                       kwargs={'session_ext_id': self.session1.ext_id})
    84         response = self.client.post(url, {
   100         response = self.client.post(url, {
    85             'tc_start': timezone.now(),
   101             'tc_start': timezone.now(),
    86             'tc_end': timezone.now(),
   102             'tc_end': timezone.now(),
    87             'plain': "example note 2",
   103             'plain': "example note 2",
    92         }, format='json')
   108         }, format='json')
    93 
   109 
    94         self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
   110         self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
    95 
   111 
    96     def test_create_note(self):
   112     def test_create_note(self):
    97         url = reverse('notes:notes-list',
   113         url = reverse('notes:notes-session-list',
    98                       kwargs={'session_ext_id': self.session1.ext_id})
   114                       kwargs={'session_ext_id': self.session1.ext_id})
    99         self.client.login(username='test_user1', password='top_secret')
   115         self.client.login(username='test_user1', password='top_secret')
   100         response = self.client.post(url, {
   116         response = self.client.post(url, {
   101             'tc_start': timezone.now(),
   117             'tc_start': timezone.now(),
   102             'tc_end': timezone.now(),
   118             'tc_end': timezone.now(),
   113         note = Note.objects.get(
   129         note = Note.objects.get(
   114             ext_id=json['ext_id'], session__id=self.session1.id)
   130             ext_id=json['ext_id'], session__id=self.session1.id)
   115         self.assertTrue(note)
   131         self.assertTrue(note)
   116 
   132 
   117     def test_create_note_with_ext_id(self):
   133     def test_create_note_with_ext_id(self):
   118         url = reverse('notes:notes-list',
   134         url = reverse('notes:notes-session-list',
   119                       kwargs={'session_ext_id': self.session1.ext_id})
   135                       kwargs={'session_ext_id': self.session1.ext_id})
   120         self.client.login(username='test_user1', password='top_secret')
   136         self.client.login(username='test_user1', password='top_secret')
   121         ext_id = str(uuid4())
   137         ext_id = str(uuid4())
   122         response = self.client.post(url, {
   138         response = self.client.post(url, {
   123             'ext_id': ext_id,
   139             'ext_id': ext_id,
   136         self.assertEqual(json['ext_id'], ext_id)
   152         self.assertEqual(json['ext_id'], ext_id)
   137         note = Note.objects.get(ext_id=ext_id)
   153         note = Note.objects.get(ext_id=ext_id)
   138         self.assertTrue(note)
   154         self.assertTrue(note)
   139 
   155 
   140     def test_update_note(self):
   156     def test_update_note(self):
   141         url = reverse('notes:notes-detail',
   157         url = reverse('notes:notes-session-detail',
   142                       kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note1.ext_id})
   158                       kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note1.ext_id})
   143         self.client.login(username='test_user1', password='top_secret')
   159         self.client.login(username='test_user1', password='top_secret')
   144         response = self.client.put(url, {
   160         response = self.client.put(url, {
   145             'plain': "example note 1 modified",
   161             'plain': "example note 1 modified",
   146             'html': "<i>example note modified</i>",
   162             'html': "<i>example note modified</i>",
   158         self.assertTrue(note)
   174         self.assertTrue(note)
   159         self.assertEqual("example note 1 modified", note.plain)
   175         self.assertEqual("example note 1 modified", note.plain)
   160 
   176 
   161     #TODO: Fail if a tc_start, tc_end, session, ext_id updated, created are provided on update ?
   177     #TODO: Fail if a tc_start, tc_end, session, ext_id updated, created are provided on update ?
   162     # def test_update_note_tc_start(self):
   178     # def test_update_note_tc_start(self):
   163     #     url = reverse('notes:notes-detail',
   179     #     url = reverse('notes:notes-session-detail',
   164     #                   kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note1.ext_id})
   180     #                   kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note1.ext_id})
   165     #     self.client.login(username='test_user1', password='top_secret')
   181     #     self.client.login(username='test_user1', password='top_secret')
   166     #     response = self.client.put(url, {
   182     #     response = self.client.put(url, {
   167     #         'tc_start': timezone.now(),
   183     #         'tc_start': timezone.now(),
   168     #         'tc_end': timezone.now(),
   184     #         'tc_end': timezone.now(),
   172     #         'margin_note': "margin note",
   188     #         'margin_note': "margin note",
   173     #         'categorization': "[]"
   189     #         'categorization': "[]"
   174     #     }, format='json')
   190     #     }, format='json')
   175 
   191 
   176     #     self.assertEqual(response.status_code, status.HTTP_200_OK)
   192     #     self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   193 
       
   194     def test_root_note_list(self):
       
   195         url = reverse('notes:note-list')
       
   196         self.client.login(username='test_user1', password='top_secret')
       
   197         response = self.client.get(url, format='json')
       
   198         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   199 
       
   200         json_resp = response.json()
       
   201         self.assertIn('results', json_resp)
       
   202         self.assertEqual(2, json_resp['count'])
       
   203         self.assertEqual(2, len(json_resp['results']))
       
   204 
       
   205         for note_json in json_resp['results']:
       
   206             self.assertEqual(str(self.session1.ext_id), note_json.get('session'))
       
   207 
       
   208 
       
   209     def test_root_note_list_modified(self):
       
   210 
       
   211         nexthour = \
       
   212             datetime.datetime.utcnow().replace(tzinfo=timezone.utc) +\
       
   213             datetime.timedelta(hours=1)
       
   214         Note.objects.filter(pk=self.note2.id).update(updated=nexthour)
       
   215 
       
   216         url = reverse('notes:note-list')
       
   217         self.client.login(username='test_user1', password='top_secret')
       
   218 
       
   219         response = self.client.get(
       
   220             url,
       
   221             {'modified_since': (nexthour - datetime.timedelta(minutes=30)).timestamp()},
       
   222             format='json'
       
   223         )
       
   224 
       
   225         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   226         json_resp = response.json()
       
   227         self.assertIn('results', json_resp)
       
   228         self.assertEqual(1, json_resp['count'])
       
   229 
       
   230         self.assertEqual(len(json_resp['results']), 1, "must have one note")
       
   231         self.assertEqual(str(self.session1.ext_id), json_resp['results'][0].get('session'))
       
   232 
       
   233 
       
   234     def test_root_note_detail(self):
       
   235         url = reverse('notes:note-detail', kwargs={'ext_id': self.note2.ext_id})
       
   236         self.client.login(username='test_user1', password='top_secret')
       
   237         response = self.client.get(url, format='json')
       
   238         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   239 
       
   240         json_resp = response.json()
       
   241         self.assertEqual(str(self.session1.ext_id), json_resp.get('session'))
       
   242         self.assertEqual('example note 1.1', json_resp.get('plain'))