src/notes/tests/api/session.py
changeset 119 8ff8e2aee0f9
parent 74 043477fd5c5c
child 128 34a75bd8d0b9
--- a/src/notes/tests/api/session.py	Tue Jul 18 17:59:28 2017 +0200
+++ b/src/notes/tests/api/session.py	Wed Jul 19 15:57:13 2017 +0200
@@ -1,6 +1,7 @@
 """
 Tests the core api for sessions
 """
+import datetime
 import logging
 from uuid import uuid4
 
@@ -48,13 +49,20 @@
             owner=user2
         )
 
-        Session.objects.create(
+        self.session3 = Session.objects.create(
             title="a new session 3",
             description="Description 3",
             protocol="[]",
             owner=user3
         )
 
+        self.session4 = Session.objects.create(
+            title="a new session 4",
+            description="Description 4",
+            protocol="[]",
+            owner=user3
+        )
+
         Note.objects.create(
             tc_start=timezone.now(),
             tc_end=timezone.now(),
@@ -90,8 +98,12 @@
         response = self.client.get(url)
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         json = response.json()
-        self.assertEqual(len(json), 1, "must have one session")
-        for session in json:
+        self.assertIn('results', json, "must have results")
+        self.assertIn('count', json, "must have count")
+        self.assertEqual(json['count'], 1, "must have one session")
+        self.assertEqual(len(json['results']), 1, "must have one session")
+
+        for session in json['results']:
             self.assertEqual(session['owner'], 'test_user1')
 
 
@@ -144,7 +156,7 @@
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
     def test_list_notes(self):
-        url = reverse('notes:notes-list', kwargs={'session_ext_id':str(self.session1.ext_id)})
+        url = reverse('notes:notes-session-list', kwargs={'session_ext_id':str(self.session1.ext_id)})
         self.client.login(username='test_user1', password='top_secret')
         response = self.client.get(url, format='json')
         self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -156,9 +168,68 @@
         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
 
     def test_list_notes_bad(self):
-        url = reverse('notes:notes-list', kwargs={'session_ext_id':str(self.session2.ext_id)})
-        logger.debug("URL: %s", url)
+        url = reverse('notes:notes-session-list', kwargs={'session_ext_id':str(self.session2.ext_id)})
         self.client.login(username='test_user1', password='top_secret')
         response = self.client.get(url, format='json')
-        logger.debug(response.json())
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
+
+    def test_filter_modified_since(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user3', password='top_secret')
+        nexthour = \
+            datetime.datetime.utcnow().replace(tzinfo=timezone.utc) +\
+            datetime.timedelta(hours=1)
+        Session.objects.filter(pk=self.session4.id).update(updated=nexthour)
+
+        response = self.client.get(
+            url,
+            {'modified_since': (nexthour - datetime.timedelta(minutes=30)).timestamp()},
+            format='json'
+        )
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        json = response.json()
+        self.assertIn('results', json, "must have results")
+        self.assertIn('count', json, "must have count")
+        self.assertEqual(json['count'], 1, "must have one session")
+        self.assertEqual(len(json['results']), 1, "must have one session")
+
+        self.assertEqual(json['results'][0].get('title'), "a new session 4")
+
+
+    def test_filter_modified_since_zero(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user3', password='top_secret')
+
+        response = self.client.get(url, {'modified_since': 0}, format='json')
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        json = response.json()
+        self.assertIn('results', json, "must have results")
+        self.assertIn('count', json, "must have count")
+        self.assertEqual(json['count'], 2, "must have two sessions")
+        self.assertEqual(len(json['results']), 2, "must have two sessions")
+
+        for session_json in json['results']:
+            self.assertIn(session_json.get('title'), ['a new session 3', 'a new session 4'])
+
+
+    def test_filter_modified_seconds(self):
+        url = reverse('notes:session-list')
+        self.client.login(username='test_user3', password='top_secret')
+
+        prevmoment = \
+            datetime.datetime.utcnow().replace(tzinfo=timezone.utc) -\
+            datetime.timedelta(seconds=5)
+
+        response = self.client.get(url, {'modified_since': prevmoment.timestamp()}, format='json')
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        json = response.json()
+        self.assertIn('results', json, "must have results")
+        self.assertIn('count', json, "must have count")
+        self.assertEqual(json['count'], 2, "must have two sessions")
+        self.assertEqual(len(json['results']), 2, "must have two sessions")
+        for session_json in json['results']:
+            self.assertIn(session_json.get('title'), ['a new session 3', 'a new session 4'])
+