From a0753f72bd9606776ef93e26686a0e4bee122b49 Mon Sep 17 00:00:00 2001 From: Johannes Linke Date: Sun, 8 Mar 2026 18:17:24 +0100 Subject: [PATCH 1/2] Fix crash when deleting a heading question This got introduced in https://github.com/e-valuation/EvaP/pull/2513. The tests didn't explicitly cover deleting a heading question, but test_delete_question would still occasionally do it depending on the status of the RNG when running with --shuffle, because it didn't specify the question type so model baker would choose one at random. --- evap/evaluation/models.py | 7 ++++--- evap/staff/tests/test_views.py | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/evap/evaluation/models.py b/evap/evaluation/models.py index 7dd32eb8a3..d3fff0f2ec 100644 --- a/evap/evaluation/models.py +++ b/evap/evaluation/models.py @@ -1374,9 +1374,10 @@ class Meta: unique_together = [("question", "questionnaire")] def delete(self, using=None, keep_parents=False) -> tuple[int, dict[str, int]]: - assert not self.question.answer_class.objects.filter(assignment=self).exists(), ( - "cannot delete question with answers" - ) + if not self.question.is_heading_question: + assert not self.question.answer_class.objects.filter(assignment=self).exists(), ( + "cannot delete question with answers" + ) count = 0 meta: dict[str, int] = {} diff --git a/evap/staff/tests/test_views.py b/evap/staff/tests/test_views.py index f5962063ef..2a10db2ff8 100644 --- a/evap/staff/tests/test_views.py +++ b/evap/staff/tests/test_views.py @@ -3374,7 +3374,9 @@ def test_invalid_question_edit(self) -> None: def test_delete_question(self) -> None: other_questionnaire = baker.make(Questionnaire) - other_question = baker.make(Question, questionnaires=[self.questionnaire, other_questionnaire]) + other_question = baker.make( + Question, questionnaires=[self.questionnaire, other_questionnaire], type=QuestionType.HEADING + ) baker.make(QuestionAssignment, questionnaire=self.questionnaire, question__type=QuestionType.GRADE) baker.make(Contribution, questionnaires=[self.questionnaire], evaluation__state=Evaluation.State.NEW) page = self.app.get(self.url, user=self.manager) From 974e291f35d77d8c3f8c6661b9e0e64a2f7061a8 Mon Sep 17 00:00:00 2001 From: Johannes Linke Date: Sun, 8 Mar 2026 18:21:55 +0100 Subject: [PATCH 2/2] Add comment --- evap/staff/tests/test_views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evap/staff/tests/test_views.py b/evap/staff/tests/test_views.py index 2a10db2ff8..17d5d8ae1c 100644 --- a/evap/staff/tests/test_views.py +++ b/evap/staff/tests/test_views.py @@ -3374,6 +3374,7 @@ def test_invalid_question_edit(self) -> None: def test_delete_question(self) -> None: other_questionnaire = baker.make(Questionnaire) + # Use HEADING to test for a regression, see https://github.com/e-valuation/EvaP/pull/2665 other_question = baker.make( Question, questionnaires=[self.questionnaire, other_questionnaire], type=QuestionType.HEADING )