예제 #1
0
파일: questions.py 프로젝트: remo4sam/ejrf
class CreateQuestion(PermissionRequiredMixin, CreateView):
    permission_required = 'auth.can_edit_questionnaire'

    def __init__(self, **kwargs):
        super(CreateQuestion, self).__init__(**kwargs)
        self.template_name = 'questions/new.html'
        self.object = Question
        self.model = Question
        self.form_class = QuestionForm
        self.form = None

    def get_context_data(self, **kwargs):
        context = super(CreateQuestion, self).get_context_data(**kwargs)
        context.update({'btn_label': 'CREATE', 'id': 'id-new-question-form',
                        'cancel_url': reverse('list_questions_page'), 'title': 'New Question'})
        return context

    def post(self, request, *args, **kwargs):
        region = self.request.user.user_profile.region
        self.form = QuestionForm(region=region, data=request.POST)
        if self.form.is_valid():
            return self._form_valid()
        return self._form_invalid()

    def _form_valid(self):
        self.form.save()
        messages.success(self.request, "Question successfully created.")
        return HttpResponseRedirect(reverse('list_questions_page'))

    def _form_invalid(self):
        messages.error(self.request, "Question NOT created. See errors below.")
        context = {'form': self.form, 'btn_label': "CREATE", 'id': 'id-new-question-form',
                   'cancel_url': reverse('list_questions_page'), 'title': 'New Question'}
        return self.render_to_response(context)
예제 #2
0
 def test_clean_export_label(self):
     data = self.form_data.copy()
     data['export_label'] = ''
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("All questions must have export label.",
                   question_form.errors['export_label'])
예제 #3
0
class CreateQuestion(CreateView):
    def __init__(self, **kwargs):
        super(CreateQuestion, self).__init__(**kwargs)
        self.template_name = 'questions/new.html'
        self.object = Question
        self.model = Question
        self.form_class = QuestionForm
        self.form = None

    def get_context_data(self, **kwargs):
        context = super(CreateQuestion, self).get_context_data(**kwargs)
        context.update({'btn_label': 'CREATE', 'id': 'id-new-question-form'})
        return context

    def post(self, request, *args, **kwargs):
        self.form = QuestionForm(data=request.POST)
        if self.form.is_valid():
            return self._form_valid()
        return self._form_invalid()

    def _form_valid(self):
        self.form.save()
        messages.success(self.request, "Question successfully created.")
        return HttpResponseRedirect(reverse('list_questions_page'))

    def _form_invalid(self):
        messages.error(self.request, "Question NOT created. See errors below.")
        context = {'form': self.form, 'btn_label': "CREATE", 'id': 'id-new-question-form'}
        return self.render_to_response(context)
예제 #4
0
    def test_edit_removes_deleted_options_from_the_question(self):
        question = QuestionFactory(text='whats up?', answer_type=AnswerTypes.MULTI_CHOICE)

        QuestionOptionFactory(question=question, text='Yes', order=1)
        QuestionOptionFactory(question=question, text='NR', order=2)
        QuestionOptionFactory(question=question, text='No', order=3)

        changed_options = ['Yes', 'No', 'Maybe']

        data = {'text': 'changed text',
                'instructions': 'Some instructions',
                'export_label': 'blah',
                'answer_type': 'MultiChoice',
                'theme': self.theme.id,
                'options': changed_options}

        history_form = QuestionForm(data=data, instance=question)

        self.assertTrue(history_form.is_valid())
        edited_question = history_form.save()

        question1_options = edited_question.options.all()

        self.assertEqual(3, question1_options.count())
        [self.assertIn(question_option.text, changed_options) for question_option in question1_options]
예제 #5
0
    def test_editing_question_used_in_a_published_questionnaire_give_the_duplicate_question_old_question_order(self):
        self.questionnaire.status = Questionnaire.PUBLISHED
        self.questionnaire.save()
        self.question1.orders.create(order=1, question_group=self.parent_group)

        draft_questionnaire = Questionnaire.objects.create(name="draft qnaire",description="haha",
                                                           status=Questionnaire.DRAFT)
        section_1 = Section.objects.create(title="section 1", order=1, questionnaire=draft_questionnaire, name="ha")
        sub_section_1 = SubSection.objects.create(title="subs1", order=1, section=section_1)
        parent_group_d = QuestionGroup.objects.create(subsection=sub_section_1, name="group")
        parent_group_d.question.add(self.question1)
        self.question1.orders.create(order=2, question_group=parent_group_d)

        finalized_questionnaire = Questionnaire.objects.create(name="finalized qnaire",description="haha",
                                                           status=Questionnaire.FINALIZED)
        section_1_f = Section.objects.create(title="section 1", order=1, questionnaire=finalized_questionnaire, name="ha")
        sub_section_1_f = SubSection.objects.create(title="subs1", order=1, section=section_1_f)
        parent_group_f = QuestionGroup.objects.create(subsection=sub_section_1_f, name="group")
        parent_group_f.question.add(self.question1)
        self.question1.orders.create(order=3, question_group=parent_group_f)

        data = self.form_data.copy()
        history_form = QuestionForm(data=data, instance=self.question1)

        self.assertTrue(history_form.is_valid())
        duplicate_question = history_form.save()

        self.assertEqual(1, self.question1.orders.get(question_group=self.parent_group).order)
        self.assertEqual(0, duplicate_question.orders.filter(question_group=self.parent_group).count())

        self.assertEqual(2, duplicate_question.orders.get(question_group=parent_group_d).order)
        self.assertEqual(0, self.question1.orders.filter(question_group=parent_group_d).count())

        self.assertEqual(3, duplicate_question.orders.get(question_group=parent_group_f).order)
        self.assertEqual(0, self.question1.orders.filter(question_group=parent_group_f).count())
예제 #6
0
 def test_increments_uid_of_existing_question_by_one_upon_save_given_instance(self):
     Question.objects.create(text='B. Number of cases tested',
                             instructions="Enter the total number of cases", UID='00001', answer_type='Number',
                             answer_sub_type="Integer")
     question_form = QuestionForm(data=self.form_data)
     question = question_form.save(commit=True)
     self.assertEqual('00002', question.UID)
예제 #7
0
 def test_clean_answer_type(self):
     data = self.form_data.copy()
     data['answer_type'] = ''
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("This field is required.",
                   question_form.errors['answer_type'])
예제 #8
0
 def test_clean_answer_number_sub_type_valid(self):
     data = self.form_data.copy()
     data['answer_type'] = AnswerTypes.NUMBER
     data['answer_sub_type'] = AnswerTypes.DECIMAL
     question_form = QuestionForm(data=data)
     self.assertTrue(question_form.is_valid())
     self.assertTrue(len(question_form.errors) == 0)
예제 #9
0
class CreateQuestion(CreateView):
    def __init__(self, **kwargs):
        super(CreateQuestion, self).__init__(**kwargs)
        self.template_name = 'questions/new.html'
        self.object = Question
        self.model = Question
        self.form_class = QuestionForm
        self.form = None

    def get_context_data(self, **kwargs):
        context = super(CreateQuestion, self).get_context_data(**kwargs)
        context.update({'btn_label': 'CREATE', 'id': 'id-new-question-form'})
        return context

    def post(self, request, *args, **kwargs):
        self.form = QuestionForm(data=request.POST)
        if self.form.is_valid():
            return self._form_valid()
        return self._form_invalid()

    def _form_valid(self):
        self.form.save()
        messages.success(self.request, "Question successfully created.")
        return HttpResponseRedirect(reverse('list_questions_page'))

    def _form_invalid(self):
        messages.error(self.request, "Question NOT created. See errors below.")
        context = {
            'form': self.form,
            'btn_label': "CREATE",
            'id': 'id-new-question-form'
        }
        return self.render_to_response(context)
예제 #10
0
 def test_increments_uid_of_existing_question_by_one_upon_save_given_instance(
         self):
     Question.objects.create(text='B. Number of cases tested',
                             instructions="Enter the total number of cases",
                             UID='00001',
                             answer_type='Number')
     question_form = QuestionForm(data=self.form_data)
     question = question_form.save(commit=True)
     self.assertEqual('00002', question.UID)
예제 #11
0
 def test_assigns_region_on_save_if_region_is_given(self):
     region = Region.objects.create(name="ASEAN")
     form = {'text': 'How many kids were immunised this year?',
             'instructions': 'Some instructions',
             'short_instruction': 'short version',
             'export_label': 'blah',
             'answer_type': 'Text',
             'theme': self.theme.id}
     question_form = QuestionForm(region=region, data=form)
     question = question_form.save(commit=True)
     self.assertEqual(region, question.region)
예제 #12
0
 def test_assigns_region_on_save_if_region_is_given(self):
     global_admin, country, region = self.create_user_with_no_permissions()
     form = {'text': 'How many kids were immunised this year?',
             'instructions': 'Some instructions',
             'short_instruction': 'short version',
             'export_label': 'blah',
             'answer_type': 'Text',
             'theme': self.theme.id}
     question_form = QuestionForm(region=region, data=form)
     question = question_form.save(commit=True)
     self.assertEqual(region, question.region)
예제 #13
0
    def test_editing_question_used_in_an_unpublished_questionnaire_updates_question(self):
        data = self.form_data.copy()
        history_form = QuestionForm(data=data, instance=self.question1)
        history_form.is_valid()

        history_form.save()

        questions = Question.objects.filter(UID=self.question1.UID)

        self.assertEqual(1, questions.count())
        self.failUnless(self.question1.id, questions[0].id)
예제 #14
0
    def test_form_invalid_if_multichoice_question_and_no_options_in_data_options(self):
        form = {'text': 'How many kids were immunised this year?',
                'instructions': 'Some instructions',
                'short_instruction': 'short version',
                'export_label': 'blah',
                'answer_type': 'MultiChoice',
                'options': ['', '']}
        question_form = QuestionForm(data=form)

        self.assertFalse(question_form.is_valid())
        message = "MultiChoice questions must have at least one option"
        self.assertIn(message, question_form.errors['answer_type'][0])
예제 #15
0
    def test_duplicate_question_maintains_region(self):
        self.questionnaire.status = Questionnaire.PUBLISHED
        self.questionnaire.save()
        region = Region.objects.create(name="AFR")
        self.question1.region = region
        self.question1.save()
        data = self.form_data.copy()
        history_form = QuestionForm(data=data, instance=self.question1)

        self.assertTrue(history_form.is_valid())
        duplicate_question = history_form.save()

        self.assertEqual(region, duplicate_question.region)
예제 #16
0
    def test_form_invalid_if_multipleresponse_question_and_no_options_in_data_options(self):
        form = {'text': 'How many kids were immunised this year?',
                'instructions': 'Some instructions',
                'short_instruction': 'short version',
                'export_label': 'blah',
                'answer_type': AnswerTypes.MULTIPLE_RESPONSE,
                'options': ['', ''],
                'theme': self.theme.id}
        question_form = QuestionForm(data=form)

        self.assertFalse(question_form.is_valid())
        message = "%s questions must have at least one option" % AnswerTypes.MULTIPLE_RESPONSE
        self.assertIn(message, question_form.errors['answer_type'][0])
예제 #17
0
    def test_editing_question_used_in_a_published_questionnaire_creates_a_duplicate_question(self):
        self.questionnaire.status = Questionnaire.PUBLISHED
        self.questionnaire.save()
        data = self.form_data.copy()
        history_form = QuestionForm(data=data, instance=self.question1)

        self.assertTrue(history_form.is_valid())

        history_form.save()

        questions = Question.objects.filter(UID=self.question1.UID)

        self.assertEqual(2, questions.count())
        self.failUnless(questions.filter(**data))
예제 #18
0
    def test_form_invalid_if_multichoice_question_and_no_options_in_data_options(
            self):
        form = {
            'text': 'How many kids were immunised this year?',
            'instructions': 'Some instructions',
            'short_instruction': 'short version',
            'export_label': 'blah',
            'answer_type': 'MultiChoice',
            'options': ['', '']
        }
        question_form = QuestionForm(data=form)

        self.assertFalse(question_form.is_valid())
        message = "MultiChoice questions must have at least one option"
        self.assertIn(message, question_form.errors['answer_type'][0])
예제 #19
0
    def test_save_multichoice_question_saves_options(self):
        options = ['Yes', 'No', 'Maybe']
        form = {'text': 'How many kids were immunised this year?',
                'instructions': 'Some instructions',
                'short_instruction': 'short version',
                'export_label': 'blah',
                'answer_type': 'MultiChoice',
                'options': options}

        question_form = QuestionForm(data=form)
        question = question_form.save(commit=True)
        question_options = QuestionOption.objects.filter(question=question)

        self.assertEqual(3, question_options.count())
        [self.assertIn(question_option.text, options) for question_option in question_options]
예제 #20
0
    def test_form_invalid_if_multipleresponse_question_is_primary(self):
        options = ['', 'Yes', 'No', 'Maybe']
        form = {'text': 'How many kids were immunised this year?',
                'instructions': 'Some instructions',
                'short_instruction': 'short version',
                'export_label': 'blah',
                'answer_type': AnswerTypes.MULTIPLE_RESPONSE,
                'is_primary': 'true',
                'options': options,
                'theme': self.theme.id}
        question_form = QuestionForm(data=form)

        self.assertFalse(question_form.is_valid())
        message = "%s questions cannot be primary" % AnswerTypes.MULTIPLE_RESPONSE
        self.assertIn(message, question_form.errors['is_primary'][0])
예제 #21
0
파일: questions.py 프로젝트: eJRF/ejrf
 def post(self, request, *args, **kwargs):
     region = self.request.user.user_profile.region
     self.form = QuestionForm(region=region, data=request.POST)
     self.form.question_options = map(lambda o: str(o), dict(request.POST).get('options', []))
     if self.form.is_valid():
         return self._form_valid()
     return self._form_invalid()
예제 #22
0
    def test_save__multipleresponse_question_saves_listed_options(self):
        options = ['', 'Yes', 'No', 'Maybe']
        form = {'text': 'How many kids were immunised this year?',
                'instructions': 'Some instructions',
                'short_instruction': 'short version',
                'export_label': 'blah',
                'answer_type': AnswerTypes.MULTIPLE_RESPONSE,
                'options': options,
                'theme': self.theme.id}

        question_form = QuestionForm(data=form)
        question = question_form.save(commit=True)
        question_options = QuestionOption.objects.filter(question=question)

        self.assertEqual(3, question_options.count())
        [self.assertIn(question_option.text, ['Yes', 'No', 'Maybe']) for question_option in question_options]
예제 #23
0
    def test_multichoice_options_are_only_edited_in_the_duplicate_questions(self):
        self.questionnaire.status = Questionnaire.PUBLISHED
        self.questionnaire.save()
        self.question1.orders.create(order=1, question_group=self.parent_group)
        self.question1.answer_type = 'MultiChoice'
        self.question1.save()
        question1_options_texts = ["Yes", "No", "DK"]
        for text in question1_options_texts:
            self.question1.options.create(text=text)

        draft_questionnaire = Questionnaire.objects.create(name="draft qnaire", description="haha",
                                                           status=Questionnaire.DRAFT)
        section_1 = Section.objects.create(title="section 1", order=1, questionnaire=draft_questionnaire, name="ha")
        sub_section_1 = SubSection.objects.create(title="subs1", order=1, section=section_1)
        parent_group_d = QuestionGroup.objects.create(subsection=sub_section_1, name="group")
        parent_group_d.question.add(self.question1)
        self.question1.orders.create(order=2, question_group=parent_group_d)

        finalized_questionnaire = Questionnaire.objects.create(name="finalized qnaire", description="haha",
                                                               status=Questionnaire.FINALIZED)
        section_1_f = Section.objects.create(title="section 1", order=1, questionnaire=finalized_questionnaire,
                                             name="ha")
        sub_section_1_f = SubSection.objects.create(title="subs1", order=1, section=section_1_f)
        parent_group_f = QuestionGroup.objects.create(subsection=sub_section_1_f, name="group")
        parent_group_f.question.add(self.question1)
        self.question1.orders.create(order=3, question_group=parent_group_f)

        changed_options = ['', 'haha', 'hehe', 'hihi']
        data = {'text': 'changed text',
                'instructions': 'Some instructions',
                'export_label': 'blah',
                'answer_type': 'MultiChoice',
                'theme': self.theme.id,
                'options': changed_options}

        history_form = QuestionForm(data=data, instance=self.question1)

        self.assertTrue(history_form.is_valid())
        duplicate_question = history_form.save()

        question1_options = self.question1.options.all()
        self.assertEqual(3, question1_options.count())
        [self.assertIn(question_option.text, question1_options_texts) for question_option in question1_options]

        duplicate_question_options = duplicate_question.options.all()
        self.assertEqual(3, duplicate_question_options.count())
        [self.assertIn(question_option.text, changed_options) for question_option in duplicate_question_options]
예제 #24
0
    def test_save_multichoice_question_saves_options(self):
        options = ['Yes', 'No', 'Maybe']
        form = {
            'text': 'How many kids were immunised this year?',
            'instructions': 'Some instructions',
            'short_instruction': 'short version',
            'export_label': 'blah',
            'answer_type': 'MultiChoice',
            'options': options
        }

        question_form = QuestionForm(data=form)
        question = question_form.save(commit=True)
        question_options = QuestionOption.objects.filter(question=question)

        self.assertEqual(3, question_options.count())
        [
            self.assertIn(question_option.text, options)
            for question_option in question_options
        ]
예제 #25
0
파일: questions.py 프로젝트: remo4sam/ejrf
 def post(self, request, *args, **kwargs):
     region = self.request.user.user_profile.region
     self.form = QuestionForm(region=region, data=request.POST)
     if self.form.is_valid():
         return self._form_valid()
     return self._form_invalid()
예제 #26
0
 def post(self, request, *args, **kwargs):
     self.form = QuestionForm(data=request.POST)
     if self.form.is_valid():
         return self._form_valid()
     return self._form_invalid()
예제 #27
0
 def test_valid(self):
     section_form = QuestionForm(data=self.form_data)
     self.assertTrue(section_form.is_valid())
예제 #28
0
 def test_clean_export_label(self):
     data = self.form_data.copy()
     data['export_label'] = ''
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("All questions must have export label.", question_form.errors['export_label'])
예제 #29
0
 def test_clean_answer_date_sub_type(self):
     data = self.form_data.copy()
     data['answer_type'] = AnswerTypes.DATE
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("This field is required if you select '%s'" % AnswerTypes.DATE, question_form.errors['answer_sub_type'])
예제 #30
0
 def test_invalid_if_question_text_is_blank(self):
     data = self.form_data.copy()
     data['text'] = ''
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("This field is required.", question_form.errors['text'])
예제 #31
0
 def test_clean_answer_type(self):
     data = self.form_data.copy()
     data['answer_type'] = ''
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("This field is required.", question_form.errors['answer_type'])
예제 #32
0
 def test_answer_type_choices_has_empty_label(self):
     question_form = QuestionForm()
     self.assertIn(('', 'Response type'),
                   question_form.fields['answer_type'].choices)
예제 #33
0
 def test_invalid_if_question_text_is_blank(self):
     data = self.form_data.copy()
     data['text'] = ''
     question_form = QuestionForm(data=data)
     self.assertFalse(question_form.is_valid())
     self.assertIn("This field is required.", question_form.errors['text'])
예제 #34
0
 def post(self, request, *args, **kwargs):
     self.form = QuestionForm(data=request.POST)
     if self.form.is_valid():
         return self._form_valid()
     return self._form_invalid()
예제 #35
0
 def test_valid(self):
     section_form = QuestionForm(data=self.form_data)
     self.assertTrue(section_form.is_valid())