start longs testing

This commit is contained in:
Ross
2023-04-22 10:29:30 +01:00
parent 5a59fc3f2c
commit 651a201bd4
+76 -29
View File
@@ -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 = []