diff --git a/questionnaires/migrations/0030_quizformfield_survey_question.py b/questionnaires/migrations/0030_quizformfield_survey_question.py new file mode 100644 index 000000000..0a48fca77 --- /dev/null +++ b/questionnaires/migrations/0030_quizformfield_survey_question.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.14 on 2023-02-13 12:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('questionnaires', '0029_auto_20220512_1350'), + ] + + operations = [ + migrations.AddField( + model_name='quizformfield', + name='survey_question', + field=models.BooleanField(default=False, help_text='Check this to do not show this question on the results page, or include in quiz scoring.', verbose_name='Survey Question'), + ), + ] diff --git a/questionnaires/models.py b/questionnaires/models.py index d64c2e0b9..fa7de0176 100644 --- a/questionnaires/models.py +++ b/questionnaires/models.py @@ -731,12 +731,20 @@ class QuizFormField(AbstractFormField): blank=True, help_text=_('Feedback message for user answer.') ) + survey_question = models.BooleanField( + verbose_name=_('Survey Question'), + default=False, + help_text=_( + 'Check this to do not show this question on the results page, or include in quiz scoring.' + ) + ) panels = [ FieldPanel('label'), FieldPanel('clean_name', classname='disabled-clean-name'), FieldPanel('help_text'), FieldPanel('required'), + FieldPanel('survey_question'), FieldPanel('field_type', classname="formbuilder-type"), FieldPanel('choices', classname="formbuilder-choices"), FieldPanel('default_value', classname="formbuilder-default"), @@ -890,14 +898,16 @@ def get_context(self, request, *args, **kwargs): else: is_correct = set(answer) == set(correct_answer) - if is_correct: - total_correct += 1 - total += 1 + if not field.survey_question: + if is_correct: + total_correct += 1 + total += 1 fields_info[field.clean_name] = { 'feedback': field.feedback, 'correct_answer': field.correct_answer, 'correct_answer_list': correct_answer, 'is_correct': is_correct, + 'survey_question': field.survey_question, } context['form'] = form diff --git a/questionnaires/templates/quizzes/quiz_landing.html b/questionnaires/templates/quizzes/quiz_landing.html index 6fa2c5fa3..67c198af2 100644 --- a/questionnaires/templates/quizzes/quiz_landing.html +++ b/questionnaires/templates/quizzes/quiz_landing.html @@ -30,6 +30,7 @@

{{ page.title }}

{% for field in form.visible_fields %} + {% if not fields_info|get_item:field.name|get_item:'survey_question' %}

@@ -107,6 +108,7 @@

{{ page.title }}

{% endif %}
+ {% endif %} {% endfor %} {% include 'questionnaires/tags/quiz_buttons.html' %}
diff --git a/selenium_tests/quiz_specific/test_quiz_functionality.py b/selenium_tests/quiz_specific/test_quiz_functionality.py index 3d3147c44..90644cadd 100644 --- a/selenium_tests/quiz_specific/test_quiz_functionality.py +++ b/selenium_tests/quiz_specific/test_quiz_functionality.py @@ -10,24 +10,24 @@ class QuizSeleniumTests(BaseSeleniumTests): def setUp(self): Site.objects.all().delete() self.setup_blank_site() - self.user = AdminUserFactory() - self.section01 = SectionFactory(parent=self.home, owner=self.user) + user = AdminUserFactory() + section01 = SectionFactory(parent=self.home, owner=user) + self.quiz01 = QuizFactory( + parent=section01, + owner=user, + ) def test_correct_quiz(self): - quiz01 = QuizFactory( - parent=self.section01, - owner=self.user, - ) QuizFormFieldFactory( - page=quiz01, - required = True, - choices = "A|B|C", + page=self.quiz01, + required=True, + choices="A|B|C", default_value='', - correct_answer = "B", + correct_answer="B", field_type='checkboxes', ) - self.visit_page(quiz01) + self.visit_page(self.quiz01) quiz_page = QuestionnairePage(self.selenium) quiz_page.select_checkboxes("B") quiz_page.submit_response() @@ -36,20 +36,16 @@ def test_correct_quiz(self): self.assertIn("1 Correct", quiz_result) def test_incorrect_quiz(self): - quiz01 = QuizFactory( - parent=self.section01, - owner=self.user, - ) QuizFormFieldFactory( - page=quiz01, - required = True, - choices = "A|B|C", + page=self.quiz01, + required=True, + choices="A|B|C", default_value='', - correct_answer = "B", + correct_answer="B", field_type='checkboxes', ) - self.visit_page(quiz01) + self.visit_page(self.quiz01) quiz_page = QuestionnairePage(self.selenium) quiz_page.select_checkboxes("A") quiz_page.submit_response() @@ -57,7 +53,22 @@ def test_incorrect_quiz(self): quiz_result = results_page.get_quiz_results_text() self.assertIn("1 Incorrect", quiz_result) - + def test_survey_question_quiz(self): + QuizFormFieldFactory( + page=self.quiz01, + required=True, + survey_question=True, + choices="A|B|C", + default_value='', + correct_answer="A", + field_type='checkboxes', + ) - - + self.visit_page(self.quiz01) + quiz_page = QuestionnairePage(self.selenium) + quiz_page.select_checkboxes("A") + quiz_page.submit_response() + results_page = QuestionnaireResultsPage(self.selenium) + quiz_result = results_page.get_quiz_results_text() + self.assertIn("0 Correct", quiz_result) + self.assertIn("0 Incorrect", quiz_result)