Example #1
0
    def test_update_state_multiple_answers_in_schema(self):

        question = RepeatingAnswerStateQuestion('question_id', MagicMock())
        question.schema_item.type = 'RepeatingAnswer'

        answer1 = Answer('answer_one')
        answer2 = Answer('answer_two')

        answer1.widget = TextWidget('answer_one')
        answer2.widget = TextWidget('answer_two')

        question.schema_item.answers = [answer1, answer2]

        question.update_state({
            'answer_one': 'answer_one_value',
            'answer_one_1': 'answer_one_value_1',
            'answer_two': 'answer_two_value',
        })

        self.assertEqual(len(question.children), 3)

        question.update_state({
            'answer_one': 'answer_one_value',
            'answer_two': 'answer_two_value',
            'answer_two_3': 'answer_two_value_3',
            'answer_two_2': 'answer_two_value_2',
        })

        self.assertEqual(len(question.children), 5)
Example #2
0
    def test_basics(self):
        question = Question()

        question.id = 'some-id'
        question.title = 'my question object'
        question.description = 'fill this in'

        answer1 = Answer()
        answer1.id = 'answer-1'
        answer2 = Answer()
        answer2.id = 'answer-2'

        question.add_answer(answer1)
        question.add_answer(answer2)

        self.assertEqual(question.id, 'some-id')
        self.assertEqual(question.title, 'my question object')
        self.assertEqual(question.description, 'fill this in')
        self.assertIsNone(question.container)
        self.assertEqual(len(question.answers), 2)
        self.assertEqual(question.answers[0], answer1)
        self.assertEqual(question.answers[1], answer2)

        self.assertEqual(answer1.container, question)
        self.assertEqual(answer2.container, question)
Example #3
0
    def test_convert_answers(self):
        with self.application.test_request_context():
            user_answer = [create_answer('ABC', '2016-01-01', group_id='group-1', block_id='block-1'),
                           create_answer('DEF', '2016-03-30', group_id='group-1', block_id='block-1')]

            answer_1 = Answer()
            answer_1.id = "ABC"
            answer_1.code = "001"

            answer_2 = Answer()
            answer_2.id = "DEF"
            answer_2.code = "002"

            question = Question()
            question.id = 'question-1'
            question.add_answer(answer_1)
            question.add_answer(answer_2)

            section = Section()
            section.add_question(question)

            block = Block()
            block.id = 'block-1'
            block.add_section(section)

            group = Group()
            group.id = 'group-1'
            group.add_block(block)

            questionnaire = Questionnaire()
            questionnaire.survey_id = "021"
            questionnaire.data_version = "0.0.1"
            questionnaire.add_group(group)

            questionnaire.register(group)
            questionnaire.register(block)
            questionnaire.register(section)
            questionnaire.register(question)
            questionnaire.register(answer_1)
            questionnaire.register(answer_2)

            routing_path = [Location(group_id='group-1', group_instance=0, block_id='block-1')]
            answer_object = convert_answers(metadata, questionnaire, AnswerStore(user_answer), routing_path)

            self.assertEqual(answer_object['type'], 'uk.gov.ons.edc.eq:surveyresponse')
            self.assertEqual(answer_object['version'], '0.0.1')
            self.assertEqual(answer_object['origin'], 'uk.gov.ons.edc.eq')
            self.assertEqual(answer_object['survey_id'], '021')
            self.assertEqual(answer_object['collection']['exercise_sid'], metadata['collection_exercise_sid'])
            self.assertEqual(answer_object['collection']['instrument_id'], metadata['form_type'])
            self.assertEqual(answer_object['collection']['period'], metadata['period_id'])
            self.assertEqual(answer_object['metadata']['user_id'], metadata['user_id'])
            self.assertEqual(answer_object['metadata']['ru_ref'], metadata['ru_ref'])
            self.assertEqual(answer_object['data']['001'], '2016-01-01')
            self.assertEqual(answer_object['data']['002'], '2016-03-30')
Example #4
0
    def test_update_state_multiple_repeating_answers(self):

        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())
        question_state.schema_item.type = 'RepeatingAnswer'

        answers = []
        for x in range(3):
            answer = Answer('answer' + str(x))
            answer.widget = TextWidget('answer' + str(x))
            answers.append(answer)
        question_state.schema_item.answers = answers

        answer1 = StateAnswer('answer0', MagicMock())
        answer2 = StateAnswer('answer1', MagicMock())
        answer3 = StateAnswer('answer2', MagicMock())

        question_state.answers = [answer1, answer2, answer3]

        question_state.update_state({
            'answer0': 'answer_one_value',
            'answer0_1': 'answer_one_value_1',
            'answer1': 'answer_two_value',
            'answer1_1': 'answer_two_value_1',
            'answer1_2': 'answer_two_value_2',
            'answer2': 'answer_three_value',
        })

        self.assertEqual(len(question_state.answers), 6)
Example #5
0
    def test_answers_grouped_by_instance_id_one_answer_many_instances(self):
        # Given
        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())

        schema_answer = Answer('answer')
        schema_answer.widget = TextWidget('answer')
        question_state.schema_item.answers = [schema_answer]

        state_answer = MagicMock()
        state_answer.id = 'answer'
        state_answer.answer_instance = 0

        state_answer1 = MagicMock()
        state_answer1.id = 'answer'
        state_answer1.answer_instance = 1

        question_state.answers = [state_answer, state_answer1]

        # When
        result = question_state.answers_grouped_by_instance()

        # Then
        self.assertEqual(len(result), 2)
        self.assertEqual(len(result[0]), 1)
        self.assertEqual(result[0][0], state_answer)
        self.assertEqual(len(result[1]), 1)
        self.assertEqual(result[1][0], state_answer1)
    def test_get_known_validators_by_type(self):
        # answer types
        item = Answer()
        item.type = 'integer'
        validators = TypeValidatorFactory.get_validators_by_type(item)

        self.assertEqual(len(validators), 1)
        self.assertTrue(isinstance(validators[0], IntegerTypeCheck))

        item.type = 'date'
        validators = TypeValidatorFactory.get_validators_by_type(item)

        self.assertEqual(len(validators), 1)
        self.assertTrue(isinstance(validators[0], DateTypeCheck))

        item.type = 'positiveinteger'
        validators = TypeValidatorFactory.get_validators_by_type(item)

        self.assertEqual(len(validators), 1)
        self.assertTrue(isinstance(validators[0], PositiveIntegerTypeCheck))

        item.type = 'textarea'
        validators = TypeValidatorFactory.get_validators_by_type(item)

        self.assertEqual(len(validators), 1)
        self.assertTrue(isinstance(validators[0], TextAreaTypeCheck))

        # question types
        item = Question()

        item.type = 'daterange'
        validators = TypeValidatorFactory.get_validators_by_type(item)

        self.assertEqual(len(validators), 1)
        self.assertTrue(isinstance(validators[0], DateRangeCheck))
Example #7
0
    def test_answers_grouped_by_instance_id_odd_number_of_instances(self):
        # Given
        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())

        first_name_schema = Answer('first-name')
        first_name_schema.widget = TextWidget('first-name')

        last_name_schema = Answer('last-name')
        last_name_schema.widget = TextWidget('last-name')

        question_state.schema_item.answers = [
            first_name_schema, last_name_schema
        ]

        first_name = MagicMock()
        first_name.id = 'first-name'
        first_name.answer_instance = 0

        last_name = MagicMock()
        last_name.id = 'last-name'
        last_name.answer_instance = 0

        first_name1 = MagicMock()
        first_name1.id = 'first-name'
        first_name1.answer_instance = 1

        question_state.answers = [first_name, last_name, first_name1]

        # When
        result = question_state.answers_grouped_by_instance()

        # Then
        self.assertEqual(len(result), 2)

        # Instance 0
        self.assertEqual(len(result[0]), 2)
        self.assertEqual(result[0][0], first_name)
        self.assertEqual(result[0][1], last_name)

        # Instance 1
        self.assertEqual(len(result[1]), 1)
        self.assertEqual(result[1][0], first_name1)
Example #8
0
    def test_widget_should_contain_current_person(self):
        # Given
        widget = RelationshipWidget('relationship')
        widget.current_person = 'John Doe'
        state_answer = StateAnswer('who-related', Answer())

        # When
        widget_params = widget.build_widget_params(state_answer)

        # Then
        self.assertEqual(widget_params['answer']['current_person'], 'John Doe')
Example #9
0
    def test_answers_grouped_by_instance_id_many_answers_one_instance(self):
        # Given
        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())

        first_name_schema = Answer('first-name')
        first_name_schema.widget = TextWidget('first-name')

        middle_name_schema = Answer('middle-names')
        middle_name_schema.widget = TextWidget('middle-names')

        last_name_schema = Answer('last-name')
        last_name_schema.widget = TextWidget('last-name')

        question_state.schema_item.answers = [
            first_name_schema, middle_name_schema, last_name_schema
        ]

        first_name = MagicMock()
        first_name.id = 'first-name'
        first_name.answer_instance = 0

        middle_name = MagicMock()
        middle_name.id = 'middle-names'
        middle_name.answer_instance = 0

        last_name = MagicMock()
        last_name.id = 'last-name'
        last_name.answer_instance = 0

        question_state.answers = [first_name, middle_name, last_name]

        # When
        result = question_state.answers_grouped_by_instance()

        # Then
        self.assertEqual(len(result), 1)
        self.assertEqual(len(result[0]), 3)
        self.assertEqual(result[0][0], first_name)
        self.assertEqual(result[0][1], middle_name)
        self.assertEqual(result[0][2], last_name)
    def test_unknown_validators(self):
        # answer types
        item = Answer()

        item.type = 'unknown_type'
        self.assertRaises(TypeValidatorFactoryException, TypeValidatorFactory.get_validators_by_type, item)

        # question types
        item = Question()

        item.type = 'unknown_type'
        self.assertRaises(TypeValidatorFactoryException, TypeValidatorFactory.get_validators_by_type, item)
Example #11
0
    def test_widget_should_be_selected(self):
        # Given
        widget = RelationshipWidget('relationship')
        answer = Answer()
        answer.options = [{'label': 'Husband or wife', 'value': 'Husband or wife'},
                          {'label': 'Son or daughter', 'value': 'Son or daughter'}]
        state_answer = StateAnswer('who-related', answer)
        state_answer.input = 'Husband or wife'

        # When
        widget_params = widget.build_widget_params(state_answer)

        # Then
        self.assertEqual(widget_params['widget']['options'][0].selected, True)
Example #12
0
    def test_answers_grouped_by_instance_id_one_answer_no_instances(self):
        # Given
        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())

        schema_answer = Answer('answer')
        schema_answer.widget = TextWidget('answer')
        question_state.schema_item.answers = [schema_answer]

        question_state.answers = []

        # When
        result = question_state.answers_grouped_by_instance()

        # Then
        self.assertEqual(len(result), 0)
Example #13
0
    def test_render_widget_should_contain_other_person(self):
        with self.app.test_request_context():
            # Given
            widget = RelationshipWidget('relationship')
            widget.other_person = 'Jane Doe'
            answer = Answer()
            answer.label = '%(current_person)s is the … of %(other_person)s'
            answer.options = [{'label': 'Husband or wife', 'value': 'Husband or wife'},
                              {'label': 'Son or daughter', 'value': 'Son or daughter'}]
            state_answer = StateAnswer('who-related', answer)
            state_answer.input = 'Husband or wife'

            # When
            rendered = widget.render(state_answer)

            # Then
            self.assertRegex(rendered, 'of Jane Doe')
Example #14
0
 def setUp(self):
     self.answer_schema = Answer('multiple-choice-with-other')
     self.answer_schema.type = 'Radio'
     self.answer_schema.widget = TextWidget(self.answer_schema.id)
     self.answer_schema.options = [
         {
             "label": "Yes",
             "value": "Yes"
         },
         {
             "label": "No",
             "value": "No",
             "other": {
                 "label": "Please enter the country of usual residence"
             }
         }
     ]
Example #15
0
    def test_widget_should_contain_options(self):
        # Given
        widget = RelationshipWidget('relationship')
        answer = Answer()
        answer.options = [{'label': 'Husband or wife', 'value': 'Husband or wife'}, {'label': 'Son or daughter', 'value': 'Son or daughter'}]
        state_answer = StateAnswer('who-related', answer)

        # When
        widget_params = widget.build_widget_params(state_answer)

        # Then
        self.assertEqual(widget_params['widget']['options'][0].label, 'Husband or wife')
        self.assertEqual(widget_params['widget']['options'][0].value, 'Husband or wife')
        self.assertEqual(widget_params['widget']['options'][0].selected, False)
        self.assertEqual(widget_params['widget']['options'][1].label, 'Son or daughter')
        self.assertEqual(widget_params['widget']['options'][1].value, 'Son or daughter')
        self.assertEqual(widget_params['widget']['options'][0].selected, False)
Example #16
0
    def test_update_state_initialise_repeating(self):

        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())
        question_state.schema_item.type = 'RepeatingAnswer'
        question_state.schema_item.answers = [Answer('answer_id')]
        question_state.schema_item.answers[0].widget = TextWidget('answer_id')

        answer_state = MagicMock()
        answer_state.id = 'answer_id'
        answer_state.answer_instance = 0

        question_state.answers.append(answer_state)
        question_state.update_state({
            'answer_id': 'answer_value',
            'answer_id_1': 'answer_value_1'
        })
        self.assertEqual(len(question_state.answers), 2)
Example #17
0
    def test_answer_with_multiple_instances(self):
        with self.application.test_request_context():
            user_answer = [create_answer('GHI', 0, group_id='group-1', block_id='block-1'),
                           create_answer('GHI', value=1, answer_instance=1, group_id='group-1', block_id='block-1'),
                           create_answer('GHI', value=2, answer_instance=2, group_id='group-1', block_id='block-1')]

            answer = Answer()
            answer.id = "GHI"
            answer.code = "003"

            question = Question()
            question.id = 'question-2'
            question.add_answer(answer)

            section = Section()
            section.add_question(question)

            block = Block()
            block.id = 'block-1'
            block.add_section(section)

            group = Group()
            group.id = 'group-1'
            group.add_block(block)

            questionnaire = Questionnaire()
            questionnaire.survey_id = "021"
            questionnaire.data_version = "0.0.1"
            questionnaire.add_group(group)
            questionnaire.register(question)
            questionnaire.register(answer)

            routing_path = [Location(group_id='group-1', group_instance=0, block_id='block-1')]

            answer_object = convert_answers(metadata, questionnaire, AnswerStore(user_answer), routing_path)

            # Check the converter correctly
            self.assertEqual(answer_object["data"]["003"], ['0', '1', '2'])
def create_answer(group_instance=0):
    answer = Answer('whos-related')
    answer.widget = TextWidget('whos-related')
    answer_state = answer.construct_state()
    answer_state.group_instance = group_instance
    return answer_state
Example #19
0
    def test_answers_grouped_by_instance_id_many_answers_many_instance(self):  # pylint: disable=too-many-statements
        # Given
        question_state = RepeatingAnswerStateQuestion('question_id',
                                                      MagicMock())

        first_name_schema = Answer('first-name')
        first_name_schema.widget = TextWidget('first-name')

        middle_name_schema = Answer('middle-names')
        middle_name_schema.widget = TextWidget('middle-names')

        last_name_schema = Answer('last-name')
        last_name_schema.widget = TextWidget('last-name')

        question_state.schema_item.answers = [
            first_name_schema, middle_name_schema, last_name_schema
        ]

        first_name = MagicMock()
        first_name.id = 'first-name'
        first_name.answer_instance = 0

        middle_name = MagicMock()
        middle_name.id = 'middle-names'
        middle_name.answer_instance = 0

        last_name = MagicMock()
        last_name.id = 'last-name'
        last_name.answer_instance = 0

        first_name1 = MagicMock()
        first_name1.id = 'first-name'
        first_name1.answer_instance = 1

        middle_name1 = MagicMock()
        middle_name1.id = 'middle-names'
        middle_name1.answer_instance = 1

        last_name1 = MagicMock()
        last_name1.id = 'last-name'
        last_name1.answer_instance = 1

        first_name2 = MagicMock()
        first_name2.id = 'first-name'
        first_name2.answer_instance = 2

        middle_name2 = MagicMock()
        middle_name2.id = 'middle-names'
        middle_name2.answer_instance = 2

        last_name2 = MagicMock()
        last_name2.id = 'last-name'
        last_name2.answer_instance = 2

        question_state.answers = [
            first_name,
            middle_name,
            last_name,
            first_name1,
            middle_name1,
            last_name1,
            first_name2,
            middle_name2,
            last_name2,
        ]

        # When
        result = question_state.answers_grouped_by_instance()

        # Then
        self.assertEqual(len(result), 3)

        # Instance 0
        self.assertEqual(len(result[0]), 3)
        self.assertEqual(result[0][0], first_name)
        self.assertEqual(result[0][1], middle_name)
        self.assertEqual(result[0][2], last_name)

        # Instance 1
        self.assertEqual(len(result[1]), 3)
        self.assertEqual(result[1][0], first_name1)
        self.assertEqual(result[1][1], middle_name1)
        self.assertEqual(result[1][2], last_name1)

        # Instance 2
        self.assertEqual(len(result[2]), 3)
        self.assertEqual(result[2][0], first_name2)
        self.assertEqual(result[2][1], middle_name2)
        self.assertEqual(result[2][2], last_name2)