Commit 7dcd94c0189a4d99b734d3c5ce2887661ed429da

Authored by Rohan Rangray
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)