13,689 new quiz questions in 160 practice islands (grades 3-12), Question.figure, replay rotates the quiz, LaTeX removed from lesson/question text
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
46
content/tests_question_figure.py
Normal file
46
content/tests_question_figure.py
Normal file
@@ -0,0 +1,46 @@
|
||||
"""شکلِ سوال: ورود از فایل، خروج، و پاسخِ API. شکلِ نامعتبر باید فایل را رد کند، نه بیصدا حذف شود."""
|
||||
import json
|
||||
|
||||
from django.core.cache import cache
|
||||
from django.test import TestCase
|
||||
|
||||
from content import question_io
|
||||
from content.models import Grade, Lesson, Node, Question, Unit
|
||||
|
||||
FIGURE = {'kind': 'bar', 'title': 'میوهها', 'labels': ['سیب', 'پرتقال'], 'values': [5, 8]}
|
||||
|
||||
|
||||
class QuestionFigureTests(TestCase):
|
||||
def setUp(self):
|
||||
cache.clear()
|
||||
grade = Grade.objects.create(title='پایه سوم', icon='', color='')
|
||||
unit = Unit.objects.create(grade=grade, title='فصل ۱', order=1)
|
||||
self.node = Node.objects.create(unit=unit, title='آمار', order=1)
|
||||
self.lesson = Lesson.objects.create(node=self.node, title='نمودار')
|
||||
|
||||
def _row(self, **extra):
|
||||
return {'lessonId': self.lesson.pk, 'prompt': 'کدام میوه بیشتر است؟', 'type': 'multiple_choice',
|
||||
'choices': ['سیب', 'پرتقال'], 'correct': 1, **extra}
|
||||
|
||||
def test_valid_figure_is_stored_and_exported(self):
|
||||
rows = question_io.parse(json.dumps([self._row(figure=FIGURE)]).encode())
|
||||
question_io.import_questions(rows)
|
||||
q = Question.objects.get()
|
||||
self.assertEqual(q.figure['kind'], 'bar')
|
||||
exported = question_io.export_questions(Question.objects.all())
|
||||
self.assertEqual(exported[0]['figure']['kind'], 'bar')
|
||||
|
||||
def test_question_without_figure_exports_without_the_key(self):
|
||||
question_io.import_questions(question_io.parse(json.dumps([self._row()]).encode()))
|
||||
self.assertNotIn('figure', question_io.export_questions(Question.objects.all())[0])
|
||||
|
||||
def test_invalid_figure_rejects_the_file(self):
|
||||
with self.assertRaises(question_io.ImportError_):
|
||||
question_io.parse(json.dumps([self._row(figure={'kind': 'nope'})]).encode())
|
||||
|
||||
def test_quiz_api_returns_the_figure(self):
|
||||
question_io.import_questions(question_io.parse(json.dumps([self._row(figure=FIGURE)]).encode()))
|
||||
body = self.client.get(f'/api/nodes/{self.node.pk}/quiz?seed=1').json()
|
||||
self.assertEqual(body['questions'][0]['figure']['kind'], 'bar')
|
||||
plain = self.client.get(f'/api/lessons/{self.lesson.pk}/questions').json()
|
||||
self.assertEqual(plain['questions'][0]['figure']['kind'], 'bar')
|
||||
Reference in New Issue
Block a user