예제 #1
0
    def test_knows_all_sections_questionnaire_entry_services(self):
        section_2 = Section.objects.create(title="section 2",
                                           order=2,
                                           questionnaire=self.questionnaire,
                                           name="section 2")
        section_3 = Section.objects.create(title="section 3",
                                           order=3,
                                           questionnaire=self.questionnaire,
                                           name="section 3")

        user_service = UserQuestionnaireService(self.user, self.questionnaire)
        all_section_questionnaires = user_service.all_sections_questionnaires()

        self.assertEqual(3, len(all_section_questionnaires))
        self.assertIsInstance(all_section_questionnaires[self.section_1],
                              QuestionnaireEntryFormService)
        self.assertEqual(self.section_1,
                         all_section_questionnaires[self.section_1].section)
        self.assertIsInstance(all_section_questionnaires[section_2],
                              QuestionnaireEntryFormService)
        self.assertEqual(section_2,
                         all_section_questionnaires[section_2].section)
        self.assertIsInstance(all_section_questionnaires[section_3],
                              QuestionnaireEntryFormService)
        self.assertEqual(section_3,
                         all_section_questionnaires[section_3].section)
예제 #2
0
    def test_user_knows_its_country_answers(self):
        data = self.data

        old_primary = MultiChoiceAnswer.objects.create(response=self.option1,
                                                       question=self.question1,
                                                       **self.initial)
        old_answer_1 = NumericalAnswer.objects.create(response=int(
            data['Number-0-response']),
                                                      question=self.question2,
                                                      **self.initial)
        old_answer_2 = NumericalAnswer.objects.create(response=int(
            data['Number-1-response']),
                                                      question=self.question3,
                                                      **self.initial)

        answer_group = AnswerGroup.objects.create(
            grouped_question=self.question_group)
        answer_group.answer.add(old_primary, old_answer_1, old_answer_2)

        user_service = UserQuestionnaireService(self.user, self.questionnaire)
        user_answers = user_service.all_answers()

        self.assertEqual(3, len(user_answers))

        self.assertIn(old_primary, user_answers)
        self.assertIn(old_answer_1, user_answers)
        self.assertIn(old_answer_2, user_answers)
예제 #3
0
    def test_user_knows_answer_version_of_questionnaire_is_plus_1_of_the_latest_submitted_answers(
            self):
        data = self.data.copy()

        old_primary = MultiChoiceAnswer.objects.create(response=self.option1,
                                                       question=self.question1,
                                                       **self.initial)
        old_answer_1 = NumericalAnswer.objects.create(response=int(
            data['Number-0-response']),
                                                      question=self.question2,
                                                      **self.initial)
        old_answer_2 = NumericalAnswer.objects.create(response=int(
            data['Number-1-response']),
                                                      question=self.question3,
                                                      **self.initial)

        answer_group = AnswerGroup.objects.create(
            grouped_question=self.question_group)
        answer_group.answer.add(old_primary, old_answer_1, old_answer_2)

        user_service = UserQuestionnaireService(self.user, self.questionnaire)
        user_service.submit()

        self.assertEqual(self.initial['version'] + 1,
                         user_service.answer_version())
예제 #4
0
    def test_should_return_invalid_section_answers_and_the_corresponding_formset(
            self):
        data = self.data.copy()

        old_primary = MultiChoiceAnswer.objects.create(response=self.option1,
                                                       question=self.question1,
                                                       **self.initial)
        old_answer_1 = NumericalAnswer.objects.create(response=int(
            data['Number-0-response']),
                                                      question=self.question2,
                                                      **self.initial)
        old_answer_2 = NumericalAnswer.objects.create(response=int(
            data['Number-1-response']),
                                                      question=self.question3,
                                                      **self.initial)

        answer_group = AnswerGroup.objects.create(
            grouped_question=self.question_group)
        answer_group.answer.add(old_primary, old_answer_1, old_answer_2)

        required_question = Question.objects.create(text='required',
                                                    UID='C00330',
                                                    answer_type='Number',
                                                    is_required=True)
        self.question_group.question.add(required_question)
        QuestionGroupOrder.objects.create(question_group=self.question_group,
                                          question=required_question,
                                          order=4)

        user_service = UserQuestionnaireService(self.user, self.questionnaire)

        self.assertFalse(user_service.required_sections_answered())
        self.assertEqual(self.section_1, user_service.unanswered_section)
예제 #5
0
    def post(self, request, *args, **kwargs):
        questionnaire = Questionnaire.objects.get(
            id=self.kwargs['questionnaire_id'])
        section = Section.objects.get(id=self.kwargs['section_id'])
        user_questionnaire_service = UserQuestionnaireService(
            self.request.user, questionnaire)
        initial = {
            'country': self.request.user.user_profile.country,
            'status': 'Draft',
            'version': user_questionnaire_service.answer_version()
        }
        formsets = QuestionnaireEntryFormService(section,
                                                 initial=initial,
                                                 data=request.POST)

        context = {
            'questionnaire': questionnaire,
            'section': section,
            'formsets': formsets,
            'ordered_sections': Section.objects.order_by('order')
        }

        if formsets.is_valid():
            return self._form_valid(request, formsets,
                                    user_questionnaire_service, context)
        return self._form_invalid(request, context)
예제 #6
0
 def post(self, request, *args, **kwargs):
     questionnaire = Questionnaire.objects.get(
         status=Questionnaire.PUBLISHED)
     user_questionnaire = UserQuestionnaireService(self.request.user,
                                                   questionnaire)
     if not user_questionnaire.required_sections_answered():
         return self._reload_section_with_required_answers_errors(
             request, user_questionnaire, *args, **kwargs)
     return self._submit_answers(request, user_questionnaire, *args,
                                 **kwargs)
예제 #7
0
 def get(self, request, *args, **kwargs):
     if kwargs.get('questionnaire_id'):
         questionnaire = Questionnaire.objects.get(
             id=kwargs.get('questionnaire_id'))
     else:
         questionnaire = Questionnaire.objects.get(
             status=Questionnaire.PUBLISHED)
     user_questionnaire_service = UserQuestionnaireService(
         self.request.user, questionnaire)
     context = {
         'all_sections_questionnaires':
         user_questionnaire_service.all_sections_questionnaires(),
         'ordered_sections':
         questionnaire.sections.order_by('order')
     }
     return render(request, self.template_name, context)
예제 #8
0
    def test_submit_changes_draft_answers_to_submitted_and_not_create_new_instances(
            self):
        data = self.data

        old_primary = MultiChoiceAnswer.objects.create(response=self.option1,
                                                       question=self.question1,
                                                       **self.initial)
        old_answer_1 = NumericalAnswer.objects.create(response=int(
            data['Number-0-response']),
                                                      question=self.question2,
                                                      **self.initial)
        old_answer_2 = NumericalAnswer.objects.create(response=int(
            data['Number-1-response']),
                                                      question=self.question3,
                                                      **self.initial)

        answer_group = AnswerGroup.objects.create(
            grouped_question=self.question_group)
        answer_group.answer.add(old_primary, old_answer_1, old_answer_2)

        user_service = UserQuestionnaireService(self.user, self.questionnaire)
        user_service.submit()

        primary = MultiChoiceAnswer.objects.get(response__id=int(
            data['MultiChoice-0-response']),
                                                question=self.question1)
        answer_1 = NumericalAnswer.objects.get(response=int(
            data['Number-0-response']),
                                               question=self.question2)
        answer_2 = NumericalAnswer.objects.get(response=int(
            data['Number-1-response']),
                                               question=self.question3)

        self.assertEqual(old_primary.id, primary.id)
        self.assertEqual(Answer.SUBMITTED_STATUS, primary.status)

        self.assertEqual(old_answer_1.id, answer_1.id)
        self.assertEqual(Answer.SUBMITTED_STATUS, answer_1.status)

        self.assertEqual(old_answer_2.id, answer_2.id)
        self.assertEqual(Answer.SUBMITTED_STATUS, answer_2.status)

        answer_group = AnswerGroup.objects.filter(
            grouped_question=self.question_group)
        self.assertEqual(1, answer_group.count())
예제 #9
0
    def test_user_knows_answer_version_of_questionnaire_is_the_same_as_draft_if_draft_exists(
            self):
        data = self.data

        old_primary = MultiChoiceAnswer.objects.create(response=self.option1,
                                                       question=self.question1,
                                                       **self.initial)
        old_answer_1 = NumericalAnswer.objects.create(response=int(
            data['Number-0-response']),
                                                      question=self.question2,
                                                      **self.initial)
        old_answer_2 = NumericalAnswer.objects.create(response=int(
            data['Number-1-response']),
                                                      question=self.question3,
                                                      **self.initial)

        answer_group = AnswerGroup.objects.create(
            grouped_question=self.question_group)
        answer_group.answer.add(old_primary, old_answer_1, old_answer_2)

        user_service = UserQuestionnaireService(self.user, self.questionnaire)
        self.assertEqual(self.initial['version'],
                         user_service.answer_version())
예제 #10
0
 def test_user_knows_answer_version_of_questionnaire_is_0_if_no_answer_exist_yet(
         self):
     user_service = UserQuestionnaireService(self.user, self.questionnaire)
     self.assertEqual(0, user_service.answer_version())
예제 #11
0
    def test_user_knows_answers_given_questionnaire(self):
        data = self.data
        old_primary = MultiChoiceAnswer.objects.create(response=self.option1,
                                                       question=self.question1,
                                                       **self.initial)
        old_answer_1 = NumericalAnswer.objects.create(response=int(
            data['Number-0-response']),
                                                      question=self.question2,
                                                      **self.initial)
        old_answer_2 = NumericalAnswer.objects.create(response=int(
            data['Number-1-response']),
                                                      question=self.question3,
                                                      **self.initial)

        answer_group = AnswerGroup.objects.create(
            grouped_question=self.question_group)
        answer_group.answer.add(old_primary, old_answer_1, old_answer_2)

        other_questionnaire = Questionnaire.objects.create(
            name="JRF 2013 Core English",
            description="From dropbox as given by Rouslan")
        other_section_1 = Section.objects.create(
            title=
            "Reported Cases of Selected Vaccine Preventable Diseases (VPDs)",
            order=1,
            questionnaire=other_questionnaire,
            name="Reported Cases")
        other_sub_section = SubSection.objects.create(
            title="Reported cases for the year 2013",
            order=1,
            section=other_section_1)
        other_question1 = Question.objects.create(text='Disease',
                                                  UID='C00011',
                                                  answer_type='Number')
        other_question_group = QuestionGroup.objects.create(
            subsection=other_sub_section, order=1)
        other_question_group.question.add(other_question1)
        other_answer_1 = NumericalAnswer.objects.create(
            response=1, question=other_question1)

        section_2 = Section.objects.create(title="Section 2",
                                           order=2,
                                           questionnaire=self.questionnaire,
                                           name="section2")
        sub_section2 = SubSection.objects.create(title="subsection 2",
                                                 order=1,
                                                 section=section_2)
        question1 = Question.objects.create(text='question 1',
                                            UID='C00013',
                                            answer_type='Number')
        question2 = Question.objects.create(text='question 2',
                                            UID='C00014',
                                            answer_type='Number')

        question_group = QuestionGroup.objects.create(subsection=sub_section2,
                                                      order=1)
        question_group.question.add(question1, question2)

        QuestionGroupOrder.objects.create(question=question1,
                                          order=1,
                                          question_group=question_group)
        QuestionGroupOrder.objects.create(question=question2,
                                          order=2,
                                          question_group=question_group)

        answer_1 = NumericalAnswer.objects.create(response=1,
                                                  question=question1,
                                                  status=Answer.DRAFT_STATUS,
                                                  country=self.country)
        answer_2 = NumericalAnswer.objects.create(response=2,
                                                  question=question2,
                                                  status=Answer.DRAFT_STATUS,
                                                  country=self.country)

        answer_group = AnswerGroup.objects.create(
            grouped_question=question_group)
        answer_group.answer.add(answer_1, answer_2)

        user_service = UserQuestionnaireService(self.user, self.questionnaire)
        user_answers = user_service.questionnaire_answers()

        self.assertEqual(5, len(user_answers))

        self.assertIn(old_primary, user_answers)
        self.assertIn(old_answer_1, user_answers)
        self.assertIn(old_answer_2, user_answers)
        self.assertNotIn(other_answer_1, user_answers)

        self.assertIn(answer_1, user_answers)
        self.assertIn(answer_2, user_answers)