From 9b4f1ebc725268f01c53b4bf6493988bed1982bc Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Sun, 2 Jun 2024 20:57:41 -0400 Subject: [PATCH] Add tests for quizzes --- .../assignments/tests/test_assignments.py | 9 -- tin/apps/assignments/tests/test_quiz.py | 101 ++++++++++++++++++ 2 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 tin/apps/assignments/tests/test_quiz.py diff --git a/tin/apps/assignments/tests/test_assignments.py b/tin/apps/assignments/tests/test_assignments.py index 910b71b1..294549a8 100644 --- a/tin/apps/assignments/tests/test_assignments.py +++ b/tin/apps/assignments/tests/test_assignments.py @@ -61,12 +61,3 @@ def test_submit_assignment_with_file(client, assignment): assert is_redirect(response) assert assignment.submissions.count() == 1 - - -@login("student") -def test_submit_quiz_as_assignment(client, quiz): - response = client.post( - reverse("assignments:submit", args=[quiz.id]), {"text": "print('I hate CSS')"} - ) - - assert response.status_code == 404 diff --git a/tin/apps/assignments/tests/test_quiz.py b/tin/apps/assignments/tests/test_quiz.py new file mode 100644 index 00000000..736f9fac --- /dev/null +++ b/tin/apps/assignments/tests/test_quiz.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +import json + +import pytest +from django.conf import settings +from django.urls import reverse + +from tin.tests import is_redirect, login + + +@login("student") +def test_submit_quiz_as_assignment(client, quiz): + response = client.post( + reverse("assignments:submit", args=[quiz.id]), {"text": "print('I hate CSS')"} + ) + + assert response.status_code == 404 + + +@login("student") +def test_submit_quiz(client, quiz): + response = client.post( + reverse("assignments:quiz", args=[quiz.id]), {"text": "print('I hate CSS')"} + ) + + assert is_redirect(response) + assert quiz.submissions.count() == 1 + + +@login("student") +def test_submit_assigment_as_quiz(client, assignment): + response = client.post( + reverse("assignments:quiz", args=[assignment.id]), {"text": "print('I hate CSS')"} + ) + + assert response.status_code == 404 + + +@login("student") +def test_quiz_ended_has_message(client, quiz): + response = client.post(reverse("assignments:quiz_end", args=[quiz.id])) + assert is_redirect(response) + all = tuple(msg for msg in quiz.log_messages.all()) + assert len(all) == 1 + (first,) = all + assert first.content == "Ended quiz" + + response = client.post( + reverse("assignments:quiz", args=[quiz.id]), {"text": "print('I hate CSS')"} + ) + + assert response.status_code == 404 + + +@login("student") +def test_quiz_data_basic(client, quiz): + response = client.get(reverse("assignments:report", args=[quiz.id])) + data = json.loads(response.content.decode("utf-8")) + assert data == {"action": "no action"} + + +@login("teacher") +@pytest.mark.parametrize( + ("quiz_action", "action"), + (("1", "color"), ("2", "lock")), +) +def test_quiz_data_with_severity(client, quiz, quiz_action, action): + quiz.quiz_action = quiz_action + quiz.save() + + response = client.get( + reverse("assignments:report", args=[quiz.id]), + {"severity": settings.QUIZ_ISSUE_THRESHOLD, "content": "hi"}, + ) + data = json.loads(response.content.decode("utf-8")) + assert data == {"action": action} + + msgs = tuple(quiz.log_messages.all()) + assert len(msgs) == 1 + assert msgs[0].content == "hi" + + +@login("teacher") +def test_quiz_data_after_close(client, quiz): + # this should end the quiz + client.post(reverse("assignments:quiz_end", args=[quiz.id])) + response = client.get( + reverse("assignments:report", args=[quiz.id]), + {"severity": settings.QUIZ_ISSUE_THRESHOLD, "content": "hi"}, + ) + + assert json.loads(response.content.decode("utf-8")) == {"action": "no action"} + + +@login("teacher") +def test_clear_quiz_messages(client, student, quiz): + quiz.log_messages.create(student=student, content="hi", severity=0) + response = client.post(reverse("assignments:clear", args=[quiz.id, student.id])) + assert is_redirect(response) + assert not quiz.log_messages.exists()