Commit 7dcd94c0189a4d99b734d3c5ce2887661ed429da
1 parent
28a4bd2e76
Exists in
master
Added more extensive tests for /api/study/*
Showing 4 changed files with 55 additions and 4 deletions Side-by-side Diff
flashcards/serializers.py
View file @
7dcd94c
... | ... | @@ -239,7 +239,7 @@ |
239 | 239 | correct = BooleanField(required=False, help_text="The user's self-evaluation of their response") |
240 | 240 | |
241 | 241 | def __init__(self, instance=None, data=empty, **kwargs): |
242 | - assert isinstance(instance, UserFlashcardQuiz) or instance is None | |
242 | + assert isinstance(instance, UserFlashcardQuiz) | |
243 | 243 | super(QuizAnswerRequestSerializer, self).__init__(instance=instance, data=data, **kwargs) |
244 | 244 | |
245 | 245 | def validate_response(self, response): |
flashcards/tests/test_api.py
View file @
7dcd94c
1 | 1 | from django.core import mail |
2 | 2 | from flashcards.models import * |
3 | -from rest_framework.status import HTTP_204_NO_CONTENT, HTTP_201_CREATED, HTTP_200_OK, HTTP_403_FORBIDDEN | |
3 | +from rest_framework.status import HTTP_204_NO_CONTENT, HTTP_201_CREATED, HTTP_200_OK, \ | |
4 | + HTTP_403_FORBIDDEN, HTTP_400_BAD_REQUEST | |
4 | 5 | from rest_framework.test import APITestCase |
5 | 6 | from re import search |
6 | 7 | from datetime import datetime |
... | ... | @@ -382,7 +383,7 @@ |
382 | 383 | self.flashcard.save() |
383 | 384 | self.flashcard.refresh_from_db() |
384 | 385 | self.user_flashcard = UserFlashcard(flashcard=self.flashcard, user=self.user, |
385 | - mask=self.flashcard.mask, pulled=datetime.now()) | |
386 | + mask=None, pulled=datetime.now()) | |
386 | 387 | self.user_flashcard.save() |
387 | 388 | |
388 | 389 | def test_quiz_create(self): |
... | ... | @@ -394,4 +395,49 @@ |
394 | 395 | self.assertEqual(response.data['section'], self.section.pk) |
395 | 396 | self.assertEqual(response.data['text'], self.flashcard.text) |
396 | 397 | self.assertIn(response.data['mask'], [[0, 4], [5, 7]]) |
398 | + | |
399 | + def test_quiz_response(self): | |
400 | + url = '/api/study/{}/' | |
401 | + word = 'This' | |
402 | + user_flashcard_quiz = UserFlashcardQuiz(user_flashcard=self.user_flashcard, blanked_word=word) | |
403 | + user_flashcard_quiz.save() | |
404 | + | |
405 | + self.assertIsNone(user_flashcard_quiz.response) | |
406 | + self.assertIsNone(user_flashcard_quiz.correct) | |
407 | + | |
408 | + data = {'correct': True} | |
409 | + response = self.client.patch(url.format(user_flashcard_quiz.pk), data, format='json') | |
410 | + self.assertEqual(response.status_code, HTTP_400_BAD_REQUEST) | |
411 | + | |
412 | + data = {'response': word, 'correct': True} | |
413 | + response = self.client.patch(url.format(user_flashcard_quiz.pk), data, format='json') | |
414 | + self.assertEqual(response.status_code, HTTP_204_NO_CONTENT) | |
415 | + user_flashcard_quiz.refresh_from_db() | |
416 | + self.assertEqual(user_flashcard_quiz.response, data['response']) | |
417 | + self.assertEqual(user_flashcard_quiz.correct, data['correct']) | |
418 | + | |
419 | + data = {'response': word, 'correct': True} | |
420 | + response = self.client.patch(url.format(user_flashcard_quiz.pk), data, format='json') | |
421 | + self.assertEqual(response.status_code, HTTP_400_BAD_REQUEST) | |
422 | + | |
423 | + UserFlashcardQuiz.delete(user_flashcard_quiz) | |
424 | + user_flashcard_quiz = UserFlashcardQuiz(user_flashcard=self.user_flashcard, blanked_word=word) | |
425 | + user_flashcard_quiz.save() | |
426 | + | |
427 | + data = {'response': word} | |
428 | + response = self.client.patch(url.format(user_flashcard_quiz.pk), data, format='json') | |
429 | + self.assertEqual(response.status_code, HTTP_204_NO_CONTENT) | |
430 | + user_flashcard_quiz.refresh_from_db() | |
431 | + self.assertEqual(user_flashcard_quiz.response, data['response']) | |
432 | + self.assertIsNone(user_flashcard_quiz.correct) | |
433 | + | |
434 | + data = {'correct': True} | |
435 | + response = self.client.patch(url.format(user_flashcard_quiz.pk), data, format='json') | |
436 | + self.assertEqual(response.status_code, HTTP_204_NO_CONTENT) | |
437 | + user_flashcard_quiz.refresh_from_db() | |
438 | + self.assertEqual(user_flashcard_quiz.correct, data['correct']) | |
439 | + | |
440 | + data = {'response': word, 'correct': True} | |
441 | + response = self.client.patch(url.format(user_flashcard_quiz.pk), data, format='json') | |
442 | + self.assertEqual(response.status_code, HTTP_400_BAD_REQUEST) |
flashcards/tests/test_models.py
View file @
7dcd94c
... | ... | @@ -187,8 +187,10 @@ |
187 | 187 | flashcard__material_date__gte=validated_data['material_date_begin'], |
188 | 188 | flashcard__material_date__lte=validated_data['material_date_end']) |
189 | 189 | self.assertTrue(user_flashcard.exists()) |
190 | + | |
190 | 191 | user_flashcard = user_flashcard.first() |
191 | 192 | self.assertEqual(user_flashcard, self.user_flashcard) |
193 | + | |
192 | 194 | mask = user_flashcard.mask.get_random_blank() |
193 | 195 | word = user_flashcard.flashcard.text[slice(*mask)] |
194 | 196 | user_flashcard_quiz = UserFlashcardQuiz(user_flashcard=user_flashcard, |
195 | 197 | |
... | ... | @@ -196,9 +198,11 @@ |
196 | 198 | user_flashcard_quiz.save() |
197 | 199 | self.assertTrue(isinstance(user_flashcard_quiz, UserFlashcardQuiz)) |
198 | 200 | self.assertIn(mask, [[24, 33], [0, 4]]) |
201 | + | |
199 | 202 | user_flashcard_quiz.blanked_word = user_flashcard_quiz.user_flashcard.flashcard.text[slice(*mask)] |
200 | 203 | self.assertIn(user_flashcard_quiz.blanked_word, ["This", "Flashcard"]) |
201 | 204 | user_flashcard_quiz.save() |
205 | + | |
202 | 206 | response = QuizResponseSerializer(instance=user_flashcard_quiz, mask=mask).data |
203 | 207 | self.assertEqual(response['pk'], 1) |
204 | 208 | self.assertEqual(response['section'], 1) |
... | ... | @@ -215,6 +219,7 @@ |
215 | 219 | serializer.is_valid() |
216 | 220 | serializer.update(user_flashcard_quiz, serializer.validated_data) |
217 | 221 | self.assertEqual(user_flashcard_quiz.response, data['response']) |
222 | + | |
218 | 223 | data = {'correct': True} |
219 | 224 | serializer = QuizAnswerRequestSerializer(instance=user_flashcard_quiz, data=data) |
220 | 225 | serializer.is_valid() |
flashcards/views.py
View file @
7dcd94c
... | ... | @@ -391,7 +391,7 @@ |
391 | 391 | """ |
392 | 392 | user_flashcard_quiz = self.get_object() |
393 | 393 | serializer = QuizAnswerRequestSerializer(instance=user_flashcard_quiz, data=request.data) |
394 | - serializer.is_valid() | |
394 | + serializer.is_valid(raise_exception=True) | |
395 | 395 | serializer.update(user_flashcard_quiz, serializer.validated_data) |
396 | 396 | return Response(status=HTTP_204_NO_CONTENT) |