src/notes/tests/api/sync.py
changeset 128 34a75bd8d0b9
parent 126 ba8bc0199464
child 129 d48946d164c6
equal deleted inserted replaced
127:006c5270128c 128:34a75bd8d0b9
    38             username='test_user3',
    38             username='test_user3',
    39             email='test_user@emial.com',
    39             email='test_user@emial.com',
    40             password='top_secret'
    40             password='top_secret'
    41         )
    41         )
    42 
    42 
    43         self.session1 = Session.objects.create(
    43         url = reverse('notes:session-list')
    44             title="a new session 1",
    44         self.client.login(username='test_user1', password='top_secret')
    45             description="Description 1",
    45         response = self.client.post(url, {
    46             protocol="[]",
    46             'title': "a new session 1",
    47             owner=user1
    47             'description': "Description 1",
    48         )
    48             'protocol': "[]"
    49 
    49         }, format='json')
    50         self.session2 = Session.objects.create(
    50 
    51             title="a new session 2",
    51         logger.debug('REPOSNSE %r', response.json())
    52             description="Description 2",
    52 
    53             protocol="[]",
    53         self.session1 = Session.objects.get(ext_id=response.json()['ext_id'])
    54             owner=user2
    54         self.client.logout()
    55         )
    55 
    56 
    56         self.client.login(username='test_user2', password='top_secret')
    57         Session.objects.create(
    57         response = self.client.post(url, {
    58             title="a new session 3",
    58             'title': "a new session 2",
    59             description="Description 3",
    59             'description': "Description 2",
    60             protocol="[]",
    60             'protocol': "[]"
    61             owner=user3
    61         }, format='json')
    62         )
    62 
    63 
    63         self.session2 = Session.objects.get(ext_id=response.json()['ext_id'])
    64         self.note1 = Note.objects.create(
    64         self.client.logout()
    65             tc_start=timezone.now(),
    65 
    66             tc_end=timezone.now(),
    66         self.client.login(username='test_user3', password='top_secret')
    67             session=self.session1,
    67         response = self.client.post(url, {
    68             plain="example note 1",
    68             'title': "a new session 3",
    69             html="<i>example note 1</i>",
    69             'description': "Description 3",
    70             raw="<i>example note 1</i>",
    70             'protocol': "[]"
    71             margin_note="margin note 1",
    71         }, format='json')
    72             categorization="[]"
    72 
    73         )
    73         self.session3 = Session.objects.get(ext_id=response.json()['ext_id'])
    74 
    74         self.client.logout()
    75         self.note2 = Note.objects.create(
    75 
    76             tc_start=timezone.now(),
    76         self.client.login(username='test_user1', password='top_secret')
    77             tc_end=timezone.now(),
    77 
    78             session=self.session1,
    78         url = reverse('notes:notes-session-list',
    79             plain="example note 1.1",
    79                       kwargs={'session_ext_id': self.session1.ext_id})
    80             html="<i>example note 1,1</i>",
    80 
    81             raw="<i>example note 1.1</i>",
    81         response = self.client.post(url, {
    82             margin_note="margin note 1.1",
    82             'tc_start': timezone.now(),
    83             categorization="[]"
    83             'tc_end': timezone.now(),
    84         )
    84             'plain': "example note 1",
    85 
    85             'html': "<i>example note 1</i>",
    86 
    86             'raw': "<i>example note 1</i>",
    87         Note.objects.create(
    87             'margin_note': "margin note 1",
    88             tc_start=timezone.now(),
    88             'categorization': "[]"
    89             tc_end=timezone.now(),
    89         }, format='json')
    90             session=self.session2,
    90 
    91             plain="example note 2",
    91         self.note1 = Note.objects.get(ext_id=response.json()['ext_id'])
    92             html="<i>example note</i>",
    92 
    93             raw="<i>example note</i>",
    93         response = self.client.post(url, {
    94             margin_note="margin note",
    94             'tc_start': timezone.now(),
    95             categorization="[]"
    95             'tc_end': timezone.now(),
    96         )
    96             'plain': "example note 2",
       
    97             'html': "<i>example note 2</i>",
       
    98             'raw': "<i>example note 2</i>",
       
    99             'margin_note': "margin note 2",
       
   100             'categorization': "[]"
       
   101         }, format='json')
       
   102 
       
   103         self.note2 = Note.objects.get(ext_id=response.json()['ext_id'])
       
   104         self.client.logout()
       
   105 
       
   106         self.client.login(username='test_user2', password='top_secret')
       
   107         url = reverse('notes:notes-session-list',
       
   108                       kwargs={'session_ext_id': self.session2.ext_id})
       
   109 
       
   110         response = self.client.post(url, {
       
   111             'tc_start': timezone.now(),
       
   112             'tc_end': timezone.now(),
       
   113             'plain': "example note 3",
       
   114             'html': "<i>example note 3</i>",
       
   115             'raw': "<i>example note 3</i>",
       
   116             'margin_note': "margin note 3",
       
   117             'categorization': "[]"
       
   118         }, format='json')
       
   119 
       
   120         self.note3 = Note.objects.get(ext_id=response.json()['ext_id'])
       
   121         self.client.logout()
    97 
   122 
    98     def test_not_authenticated(self):
   123     def test_not_authenticated(self):
    99         url = reverse('notes:sync-list')
   124         url = reverse('notes:sync-list')
   100         response = self.client.get(url)
   125         response = self.client.get(url)
   101         self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
   126         self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
   179             self.assertEqual(0, sync_def['action'])
   204             self.assertEqual(0, sync_def['action'])
   180             self.assertIn(sync_def['ext_id'],[str(self.note1.ext_id), str(self.note2.ext_id)])
   205             self.assertIn(sync_def['ext_id'],[str(self.note1.ext_id), str(self.note2.ext_id)])
   181 
   206 
   182 
   207 
   183     def test_modified_since_single_update(self):
   208     def test_modified_since_single_update(self):
   184         self.note2.plain = "plain text modified"
   209         self.client.login(username='test_user1', password='top_secret')
   185         self.note2.save()
   210         url = reverse('notes:notes-session-detail',
   186 
   211                       kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note2.ext_id})
   187         url = reverse('notes:sync-list')
   212 
   188         self.client.login(username='test_user1', password='top_secret')
   213         self.client.put(url, {
       
   214             'plain': "example note 2 modified",
       
   215             'html': "<i>example note 2 modified</i>",
       
   216             'raw': "<i>example note 2 modified</i>",
       
   217             'margin_note': "margin note 2 modified",
       
   218             'categorization': "[]"
       
   219         }, format='json')
       
   220 
       
   221         url = reverse('notes:sync-list')
   189 
   222 
   190         nexthour = \
   223         nexthour = \
   191             datetime.datetime.utcnow().replace(tzinfo=timezone.utc) +\
   224             datetime.datetime.utcnow().replace(tzinfo=timezone.utc) +\
   192             datetime.timedelta(hours=1)
   225             datetime.timedelta(hours=1)
   193 
   226 
   211         self.assertEqual(1, len(json_resp['notes']))
   244         self.assertEqual(1, len(json_resp['notes']))
   212         sync_def = json_resp['notes'][0]
   245         sync_def = json_resp['notes'][0]
   213         self.assertEqual(LogEntry.Action.UPDATE, sync_def['action'])
   246         self.assertEqual(LogEntry.Action.UPDATE, sync_def['action'])
   214 
   247 
   215     def test_note_delete(self):
   248     def test_note_delete(self):
   216         self.note2.delete()
   249 
       
   250         self.client.login(username='test_user1', password='top_secret')
       
   251         url = reverse('notes:notes-session-detail',
       
   252                       kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note2.ext_id})
       
   253 
       
   254         self.client.delete(url)
       
   255         self.client.logout()
       
   256 
       
   257 
   217         url = reverse('notes:sync-list')
   258         url = reverse('notes:sync-list')
   218         self.client.login(username='test_user1', password='top_secret')
   259         self.client.login(username='test_user1', password='top_secret')
   219         response = self.client.get(url)
   260         response = self.client.get(url)
   220         self.assertEqual(response.status_code, status.HTTP_200_OK)
   261         self.assertEqual(response.status_code, status.HTTP_200_OK)
   221         json_resp = response.json()
   262         json_resp = response.json()
   229         self.assertEqual(1, len(json_resp['notes']))
   270         self.assertEqual(1, len(json_resp['notes']))
   230         sync_def = json_resp['notes'][0]
   271         sync_def = json_resp['notes'][0]
   231         self.assertEqual('note', sync_def['type'])
   272         self.assertEqual('note', sync_def['type'])
   232         self.assertEqual(0, sync_def['action'])
   273         self.assertEqual(0, sync_def['action'])
   233         self.assertEqual(sync_def['ext_id'],str(self.note1.ext_id))
   274         self.assertEqual(sync_def['ext_id'],str(self.note1.ext_id))
       
   275 
       
   276     def test_note_delete_modified(self):
       
   277 
       
   278         self.client.login(username='test_user1', password='top_secret')
       
   279         url = reverse('notes:notes-session-detail',
       
   280                       kwargs={'session_ext_id': self.session1.ext_id, 'ext_id': self.note2.ext_id})
       
   281 
       
   282         self.client.delete(url)
       
   283         self.client.logout()
       
   284 
       
   285 
       
   286         nexthour = \
       
   287             datetime.datetime.utcnow().replace(tzinfo=timezone.utc) +\
       
   288             datetime.timedelta(hours=1)
       
   289 
       
   290         LogEntry.objects.filter(
       
   291             content_type=ContentType.objects.get_for_model(Note),
       
   292             object_pk=self.note2.id,
       
   293             action=LogEntry.Action.DELETE
       
   294         ).update(timestamp=nexthour)
       
   295 
       
   296         url = reverse('notes:sync-list')
       
   297         self.client.login(username='test_user1', password='top_secret')
       
   298         response = self.client.get(url, {'modified_since': (nexthour-datetime.timedelta(minutes=30)).timestamp()})
       
   299         self.assertEqual(response.status_code, status.HTTP_200_OK)
       
   300         json_resp = response.json()
       
   301         self.assertIn('sessions', json_resp)
       
   302         self.assertEqual(0, len(json_resp['sessions']))
       
   303 
       
   304         self.assertIn('notes', json_resp)
       
   305         self.assertEqual(1, len(json_resp['notes']))
       
   306         sync_def = json_resp['notes'][0]
       
   307         self.assertEqual('note', sync_def['type'])
       
   308         self.assertEqual(2, sync_def['action'])
       
   309         self.assertEqual(sync_def['ext_id'],str(self.note2.ext_id))
       
   310