diff --git a/longs/tests/test_longs_exams.py b/longs/tests/test_longs_exams.py index b08f3fdb..3620934e 100644 --- a/longs/tests/test_longs_exams.py +++ b/longs/tests/test_longs_exams.py @@ -15,7 +15,15 @@ from bs4 import BeautifulSoup from longs.views import GenericExamViews as LongExamViews -from longs.models import AnswerMarks, CidUserAnswer, Exam, Examination, Long as Question, LongSeries, LongSeriesImage +from longs.models import ( + AnswerMarks, + CidUserAnswer, + Exam, + Examination, + Long as Question, + LongSeries, + LongSeriesImage, +) from generic.models import CidUser, CidUserGroup, UserUserGroup @@ -39,7 +47,7 @@ def create_exam(db): exam.valid_cid_users.add(*group1.ciduser_set.all()) exam.valid_user_users.add(*usergroup1.users.all()) - assert exam in group1.long_cid_user_groups.all() + assert exam in group1.longs_cid_user_groups.all() assert exam @@ -53,44 +61,50 @@ def create_examination(db): examination.save() -def create_long_image(question): +def create_long_series(question, image_number=5): + series = LongSeries( + description="Test series", + examination=Examination.objects.get(pk=1), + ) + + series.save() + + for n in range(image_number): + create_long_series_image(series) + + return series + + +def create_long_series_image(series): image = tempfile.NamedTemporaryFile( dir=settings.MEDIA_ROOT, suffix=".jpg", delete=False ) - long_image = LongImage(image=image, long=question) + long_series_image = LongSeriesImage.objects.create(image=image.name, series=series) - long_image.save() + # long_series_image.save() def create_question(exam, answer=None, normal=False): # Just assign random stuff question: Question = Question.objects.create( - laterality=Question.NONE, - # examination=Examination.objects.get(pk=1), - # image=imagohe.name, - history="TEST history", - normal=normal, + description="Test question", + history="Test history", + feedback="Test feedback", + model_observations="Model obs", + model_interpretation="Model interp", + model_principle_diagnosis="Model pd", + model_differential_diagnosis="Model dd", + model_management="Model management", ) - create_long_image(question=question) + series = create_long_series(question=question) + + question.series.add(series) question.exams.set([exam]) - # Create an answer for the question - if answer is None: - answer_text = "testanswer" - else: - answer_text = answer - answer = Answer( - question=question, - answer=answer_text, - answer_compare=answer_text, - status=Answer.MarkOptions.CORRECT, - ) - answer.save() - return question @@ -184,16 +198,50 @@ def test_exams(db, client): assert exam_metadata["name"] == "Cid Exam" assert exam_metadata["exam_active"] == True assert exam_metadata["exam_mode"] == True + print(f"{exam_metadata=}") res = client.get(exam_metadata["url"]) assert res.status_code == 200 exam_json = json.loads(res.content) print(exam_json) - assert ( - question1.get_question_json(answers=False) - in exam_json["questions"].values() - ) + for q in exam_json["question_requests"]: + print("check question:", q) + # check redirects to the json file work + # TODO: sort out testing of the saved JSON files + question_json_res = client.get( + reverse( + f"longs:exam_question_json_cid", + kwargs={"pk": exam.pk, "sk": q, "cid": cid_user.cid, "passcode": cid_user.passcode}, + ), follow=True + ) + #assert question_json_res.status_code == 200 + print(question_json_res.redirect_chain) + print(question_json_res.content) + assert len(question_json_res.redirect_chain) == 2 + assert question_json_res.redirect_chain[0][1] == 302 + assert question_json_res.redirect_chain[1][1] == 302 + + assert question_json_res.redirect_chain[1][0].endswith(f"{q}.json") + + + question_json_unbased_res = client.get( + reverse( + f"longs:exam_question_json_unbased_cid", + kwargs={"pk": exam.pk, "sk": q, "cid": cid_user.cid, "passcode": cid_user.passcode}, + ), follow=True + ) + assert question_json_unbased_res.status_code == 200 + question_json = json.loads(question_json_unbased_res.content) + + #question_json_res = client.get(question1.get_question_json(answers=False, based=True)) + + #print(question_json) + + assert ( + question_json + in exam_json["questions"].values() + ) assert len(exam_json["questions"]) == 3 @@ -249,7 +297,6 @@ def test_exams(db, client): assert json_res["success"] == False assert json_res["error"] == "Invalid data" - # Long answers currently send a seperate object for each component valid_answers = [] valid_answers_extra = []