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')) |