src/notes/tests/api/session.py
changeset 119 8ff8e2aee0f9
parent 74 043477fd5c5c
child 128 34a75bd8d0b9
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
    46             description="Description 2",
    47             description="Description 2",
    47             protocol="[]",
    48             protocol="[]",
    48             owner=user2
    49             owner=user2
    49         )
    50         )
    50 
    51 
    51         Session.objects.create(
    52         self.session3 = Session.objects.create(
    52             title="a new session 3",
    53             title="a new session 3",
    53             description="Description 3",
    54             description="Description 3",
       
    55             protocol="[]",
       
    56             owner=user3
       
    57         )
       
    58 
       
    59         self.session4 = Session.objects.create(
       
    60             title="a new session 4",
       
    61             description="Description 4",
    54             protocol="[]",
    62             protocol="[]",
    55             owner=user3
    63             owner=user3
    56         )
    64         )
    57 
    65 
    58         Note.objects.create(
    66         Note.objects.create(
    88         url = reverse('notes:session-list')
    96         url = reverse('notes:session-list')
    89         self.client.login(username='test_user1', password='top_secret')
    97         self.client.login(username='test_user1', password='top_secret')
    90         response = self.client.get(url)
    98         response = self.client.get(url)
    91         self.assertEqual(response.status_code, status.HTTP_200_OK)
    99         self.assertEqual(response.status_code, status.HTTP_200_OK)
    92         json = response.json()
   100         json = response.json()
    93         self.assertEqual(len(json), 1, "must have one session")
   101         self.assertIn('results', json, "must have results")
    94         for session in json:
   102         self.assertIn('count', json, "must have count")
       
   103         self.assertEqual(json['count'], 1, "must have one session")
       
   104         self.assertEqual(len(json['results']), 1, "must have one session")
       
   105 
       
   106         for session in json['results']:
    95             self.assertEqual(session['owner'], 'test_user1')
   107             self.assertEqual(session['owner'], 'test_user1')
    96 
   108 
    97 
   109 
    98     def test_create_session_no_user(self):
   110     def test_create_session_no_user(self):
    99         url = reverse('notes:session-list')
   111         url = reverse('notes:session-list')
   142         self.client.login(username='test_user1', password='top_secret')
   154         self.client.login(username='test_user1', password='top_secret')
   143         response = self.client.get(url, format='json')
   155         response = self.client.get(url, format='json')
   144         self.assertEqual(response.status_code, status.HTTP_200_OK)
   156         self.assertEqual(response.status_code, status.HTTP_200_OK)
   145 
   157 
   146     def test_list_notes(self):
   158     def test_list_notes(self):
   147         url = reverse('notes:notes-list', kwargs={'session_ext_id':str(self.session1.ext_id)})
   159         url = reverse('notes:notes-session-list', kwargs={'session_ext_id':str(self.session1.ext_id)})
   148         self.client.login(username='test_user1', password='top_secret')
   160         self.client.login(username='test_user1', password='top_secret')
   149         response = self.client.get(url, format='json')
   161         response = self.client.get(url, format='json')
   150         self.assertEqual(response.status_code, status.HTTP_200_OK)
   162         self.assertEqual(response.status_code, status.HTTP_200_OK)
   151 
   163 
   152     def test_detail_session_bad(self):
   164     def test_detail_session_bad(self):
   154         self.client.login(username='test_user1', password='top_secret')
   166         self.client.login(username='test_user1', password='top_secret')
   155         response = self.client.get(url, format='json')
   167         response = self.client.get(url, format='json')
   156         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
   168         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
   157 
   169 
   158     def test_list_notes_bad(self):
   170     def test_list_notes_bad(self):
   159         url = reverse('notes:notes-list', kwargs={'session_ext_id':str(self.session2.ext_id)})
   171         url = reverse('notes:notes-session-list', kwargs={'session_ext_id':str(self.session2.ext_id)})
   160         logger.debug("URL: %s", url)
   172         self.client.login(username='test_user1', password='top_secret')
   161         self.client.login(username='test_user1', password='top_secret')
   173         response = self.client.get(url, format='json')
   162         response = self.client.get(url, format='json')
       
   163         logger.debug(response.json())
       
   164         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
   174         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
       
   175 
       
   176     def test_filter_modified_since(self):
       
   177         url = reverse('notes:session-list')
       
   178         self.client.login(username='test_user3', password='top_secret')
       
   179         nexthour = \
       
   180             datetime.datetime.utcnow().replace(tzinfo=timezone.utc) +\
       
   181             datetime.timedelta(hours=1)
       
   182         Session.objects.filter(pk=self.session4.id).update(updated=nexthour)
       
   183 
       
   184         response = self.client.get(
       
   185             url,
       
   186             {'modified_since': (nexthour - datetime.timedelta(minutes=30)).timestamp()},
       
   187             format='json'
       
   188         )
       
   189 
       
   190         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   191         json = response.json()
       
   192         self.assertIn('results', json, "must have results")
       
   193         self.assertIn('count', json, "must have count")
       
   194         self.assertEqual(json['count'], 1, "must have one session")
       
   195         self.assertEqual(len(json['results']), 1, "must have one session")
       
   196 
       
   197         self.assertEqual(json['results'][0].get('title'), "a new session 4")
       
   198 
       
   199 
       
   200     def test_filter_modified_since_zero(self):
       
   201         url = reverse('notes:session-list')
       
   202         self.client.login(username='test_user3', password='top_secret')
       
   203 
       
   204         response = self.client.get(url, {'modified_since': 0}, format='json')
       
   205 
       
   206         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   207         json = response.json()
       
   208         self.assertIn('results', json, "must have results")
       
   209         self.assertIn('count', json, "must have count")
       
   210         self.assertEqual(json['count'], 2, "must have two sessions")
       
   211         self.assertEqual(len(json['results']), 2, "must have two sessions")
       
   212 
       
   213         for session_json in json['results']:
       
   214             self.assertIn(session_json.get('title'), ['a new session 3', 'a new session 4'])
       
   215 
       
   216 
       
   217     def test_filter_modified_seconds(self):
       
   218         url = reverse('notes:session-list')
       
   219         self.client.login(username='test_user3', password='top_secret')
       
   220 
       
   221         prevmoment = \
       
   222             datetime.datetime.utcnow().replace(tzinfo=timezone.utc) -\
       
   223             datetime.timedelta(seconds=5)
       
   224 
       
   225         response = self.client.get(url, {'modified_since': prevmoment.timestamp()}, format='json')
       
   226 
       
   227         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   228         json = response.json()
       
   229         self.assertIn('results', json, "must have results")
       
   230         self.assertIn('count', json, "must have count")
       
   231         self.assertEqual(json['count'], 2, "must have two sessions")
       
   232         self.assertEqual(len(json['results']), 2, "must have two sessions")
       
   233         for session_json in json['results']:
       
   234             self.assertIn(session_json.get('title'), ['a new session 3', 'a new session 4'])
       
   235