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' %}
{% 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)