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 |