Пример #1
0
    def test_build_navigation_submit_answers_link_hidden_when_not_all_sections_completed(self):
        survey = load_schema_file("test_navigation_confirmation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = [
            Location('property-details', 0, 'insurance-type'),
            Location('property-details', 0, 'insurance-address'),
            Location('property-details', 0, 'property-interstitial'),
            Location('house-details', 0, 'house-type'),
            Location('multiple-questions-group', 0, 'household-composition'),
        ]

        navigation = Navigation(survey, AnswerStore(), metadata, completed_blocks)

        confirmation_link = {
            'link_name': 'Submit answers',
            'highlight': False,
            'repeating': False,
            'completed': False,
            'link_url': Location('confirmation-group', 0, 'confirmation').url(metadata)
        }

        navigation_links = navigation.build_navigation('property-details', 0)
        self.assertNotIn(confirmation_link, navigation_links)
        self.assertEqual(len(navigation_links), 4)
Пример #2
0
    def test_navigation_skip_condition_show_group(self):
        survey = load_schema_file("test_navigation.json")

        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = []

        answer_store = AnswerStore()

        answer_1 = Answer(value="Buildings",
                          group_instance=0,
                          block_id='insurance-type',
                          group_id='property-details',
                          answer_instance=0,
                          answer_id='insurance-type-answer')

        answer_store.add(answer_1)

        navigation = Navigation(survey,
                                answer_store,
                                metadata,
                                completed_blocks=completed_blocks)

        user_navigation = navigation.build_navigation('property-details', 0)
        link_names = [d['link_name'] for d in user_navigation]
        self.assertIn('House Details', link_names)
Пример #3
0
    def test_build_navigation_submit_answers_link_not_visible_when_no_completed_blocks(self):
        survey = load_schema_file("census_household.json")

        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = []
        routing_path = []

        navigation = Navigation(survey, AnswerStore(), metadata, completed_blocks, routing_path)

        confirmation_link = {
            'link_name': 'Submit answers',
            'highlight': False,
            'repeating': False,
            'completed': False,
            'link_url': Location('questionnaire-completed', 0, 'confirmation').url(metadata)
        }

        navigation_links = navigation.build_navigation('permanent-or-family-home', 0)
        self.assertNotIn(confirmation_link, navigation_links)
        self.assertEqual(len(navigation_links), 2)
Пример #4
0
    def test_navigation_no_blocks_completed(self):
        survey = load_schema_file("test_navigation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        navigation = Navigation(survey, AnswerStore(), metadata)

        user_navigation = [{
            'link_name':
            'Property Details',
            'highlight':
            True,
            'repeating':
            False,
            'completed':
            False,
            'link_url':
            Location('property-details', 0, 'insurance-type').url(metadata)
        }, {
            'link_name':
            'Household Details',
            'highlight':
            False,
            'repeating':
            False,
            'completed':
            False,
            'link_url':
            Location('multiple-questions-group', 0,
                     'household-composition').url(metadata)
        }, {
            'link_name':
            'Extra Cover',
            'highlight':
            False,
            'repeating':
            False,
            'completed':
            False,
            'link_url':
            Location('extra-cover', 0, 'extra-cover-block').url(metadata)
        }, {
            'link_name':
            'Payment Details',
            'highlight':
            False,
            'repeating':
            False,
            'completed':
            False,
            'link_url':
            Location('payment-details', 0, 'credit-card').url(metadata)
        }]

        self.assertEqual(navigation.build_navigation('property-details', 0),
                         user_navigation)
Пример #5
0
    def test_build_navigation_summary_link_not_visible_when_hidden_group_not_completed(self):
        survey = load_schema_file("test_navigation.json")

        # Payment details group not displayed in navigation
        survey['groups'][5]['hide_in_navigation'] = True

        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        # Payment details thus not completed
        completed_blocks = [
            Location('property-details', 0, 'insurance-type'),
            Location('property-details', 0, 'insurance-address'),
            Location('property-details', 0, 'property-interstitial'),
            Location('house-details', 0, 'house-type'),
            Location('multiple-questions-group', 0, 'household-composition'),
            Location('repeating-group', 0, 'repeating-block-1'),
            Location('repeating-group', 0, 'repeating-block-2'),
            Location('extra-cover', 0, 'extra-cover-block'),
            Location('extra-cover', 0, 'extra-cover-interstitial'),
            Location('extra-cover-items-group', 0, 'extra-cover-items'),
        ]

        routing_path = [
            Location('property-details', 0, 'insurance-type'),
            Location('property-details', 0, 'insurance-address'),
            Location('property-details', 0, 'property-interstitial'),
            Location('house-details', 0, 'house-type'),
            Location('multiple-questions-group', 0, 'household-composition'),
            Location('repeating-group', 0, 'repeating-block-1'),
            Location('repeating-group', 0, 'repeating-block-2'),
            Location('payment-details', 0, 'credit-card'),
            Location('payment-details', 0, 'expiry-date'),
            Location('payment-details', 0, 'security-code'),
            Location('payment-details', 0, 'security-code-interstitial'),
            Location('extra-cover', 0, 'extra-cover-block'),
            Location('extra-cover', 0, 'extra-cover-interstitial'),
            Location('extra-cover-items-group', 0, 'extra-cover-items'),
            Location('confirmation-group', 0, 'confirmation'),
        ]

        navigation = Navigation(survey, AnswerStore(), metadata, completed_blocks, routing_path)

        confirmation_link = {
            'link_name': 'Summary',
            'highlight': False,
            'repeating': False,
            'completed': False,
            'link_url': Location('summary-group', 0, 'summary').url(metadata)
        }

        navigation_links = navigation.build_navigation('property-details', 0)
        self.assertNotIn(confirmation_link, navigation_links)
        self.assertEqual(len(navigation_links), 3)
Пример #6
0
    def test_build_navigation_submit_answers_link_visible_when_all_sections_complete(self):
        survey = load_schema_file("test_navigation_confirmation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = [
            Location('property-details', 0, 'insurance-type'),
            Location('property-details', 0, 'insurance-address'),
            Location('property-details', 0, 'property-interstitial'),
            Location('house-details', 0, 'house-type'),
            Location('multiple-questions-group', 0, 'household-composition'),
            Location('repeating-group', 0, 'repeating-block-1'),
            Location('repeating-group', 0, 'repeating-block-2'),
            Location('extra-cover', 0, 'extra-cover-block'),
            Location('extra-cover', 0, 'extra-cover-interstitial'),
            Location('payment-details', 0, 'credit-card'),
            Location('payment-details', 0, 'expiry-date'),
            Location('payment-details', 0, 'security-code'),
            Location('payment-details', 0, 'security-code-interstitial'),
            Location('extra-cover-items-group', 0, 'extra-cover-items'),
        ]

        routing_path = [
            Location('property-details', 0, 'insurance-type'),
            Location('property-details', 0, 'insurance-address'),
            Location('property-details', 0, 'property-interstitial'),
            Location('house-details', 0, 'house-type'),
            Location('multiple-questions-group', 0, 'household-composition'),
            Location('repeating-group', 0, 'repeating-block-1'),
            Location('repeating-group', 0, 'repeating-block-2'),
            Location('extra-cover', 0, 'extra-cover-block'),
            Location('extra-cover', 0, 'extra-cover-interstitial'),
            Location('payment-details', 0, 'credit-card'),
            Location('payment-details', 0, 'expiry-date'),
            Location('payment-details', 0, 'security-code'),
            Location('payment-details', 0, 'security-code-interstitial'),
            Location('extra-cover-items-group', 0, 'extra-cover-items'),
            Location('confirmation-group', 0, 'confirmation'),
        ]

        navigation = Navigation(survey, AnswerStore(), metadata, completed_blocks, routing_path)

        confirmation_link = {
            'link_name': 'Submit answers',
            'highlight': False,
            'repeating': False,
            'completed': False,
            'link_url': Location('confirmation-group', 0, 'confirmation').url(metadata)
        }

        navigation_links = navigation.build_navigation('property-details', 0)
        self.assertIn(confirmation_link, navigation_links)
        self.assertEqual(len(navigation_links), 5)
Пример #7
0
    def test_build_navigation_returns_none_when_no_schema_navigation_property(self):
        # Given
        survey = load_schema_file("test_navigation.json")
        del survey['navigation']
        completed_blocks = []
        metadata = {}
        navigation = Navigation(survey, AnswerStore(), metadata, completed_blocks)

        # When
        nav_menu = navigation.build_navigation('group-1', 'group-instance-1')

        # Then
        self.assertIsNone(nav_menu)
Пример #8
0
def _get_front_end_navigation(answer_store,
                              current_location,
                              metadata,
                              schema,
                              routing_path=None):
    completed_blocks = get_completed_blocks(current_user)
    navigation = Navigation(schema, answer_store, metadata, completed_blocks,
                            routing_path, get_completeness(current_user))
    block_json = schema.get_block(current_location.block_id)
    if block_json['type'] != 'Introduction':
        return navigation.build_navigation(current_location.group_id,
                                           current_location.group_instance)

    return None
Пример #9
0
def _get_front_end_navigation(answer_store,
                              current_location,
                              metadata,
                              routing_path=None):
    completed_blocks = get_completed_blocks(current_user)
    navigation = Navigation(g.schema_json, answer_store, metadata,
                            completed_blocks, routing_path)
    block_json = SchemaHelper.get_block_for_location(g.schema_json,
                                                     current_location)
    if block_json is not None and block_json['type'] in (
            'Questionnaire', 'Interstitial', 'Confirmation', 'Summary'):
        return navigation.build_navigation(current_location.group_id,
                                           current_location.group_instance)
    else:
        return None
Пример #10
0
    def test_build_navigation_returns_navigation_when_schema_navigation_is_true(self):
        # Given
        survey = load_schema_file("test_navigation.json")
        survey['navigation'] = True
        completed_blocks = []
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }
        navigation = Navigation(survey, AnswerStore(), metadata, completed_blocks)

        # When
        nav_menu = navigation.build_navigation('group-1', 'group-instance-1')

        # Then
        self.assertIsNotNone(nav_menu)
Пример #11
0
    def test_build_navigation_summary_link_hidden_when_no_sections_completed(self):
        survey = load_schema_file("test_navigation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        navigation = Navigation(survey, AnswerStore(), metadata)

        confirmation_link = {
            'link_name': 'Summary',
            'highlight': False,
            'repeating': False,
            'completed': False,
            'link_url': Location('summary-group', 0, 'summary').url(metadata)
        }

        self.assertNotIn(confirmation_link, navigation.build_navigation('property-details', 0))
Пример #12
0
def _build_template(current_location, context=None, template=None):
    metadata = get_metadata(current_user)
    metadata_context = build_metadata_context(metadata)

    answer_store = get_answer_store(current_user)
    completed_blocks = get_completed_blocks(current_user)

    navigation = Navigation(g.schema_json, answer_store, metadata, completed_blocks)
    front_end_navigation = navigation.build_navigation(current_location.group_id, current_location.group_instance)

    path_finder = PathFinder(g.schema_json, answer_store, metadata)
    previous_location = path_finder.get_previous_location(current_location)

    previous_url = None

    is_first_block_for_group = SchemaHelper.is_first_block_id_for_group(g.schema_json, current_location.group_id, current_location.block_id)

    if previous_location is not None and not is_first_block_for_group and not current_location.block_id == 'thank-you':
        previous_url = previous_location.url(metadata)

    return _render_template(context, current_location.block_id, front_end_navigation, metadata_context, current_location, previous_url, template)
Пример #13
0
    def test_navigation_repeating_group_link_name_format(self):
        survey = load_schema_file("test_repeating_household.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = [
            Location('multiple-questions-group', 0, 'introduction'),
            Location('multiple-questions-group', 0, 'household-composition'),
        ]

        answer_store = AnswerStore()

        answer_1 = Answer(block_id='household-composition',
                          answer_instance=0,
                          answer_id='first-name',
                          group_id='multiple-questions-group',
                          group_instance=0,
                          value='Joe')
        answer_2 = Answer(block_id='household-composition',
                          answer_instance=0,
                          answer_id='middle-names',
                          group_id='multiple-questions-group',
                          group_instance=0,
                          value=None)
        answer_3 = Answer(block_id='household-composition',
                          answer_instance=0,
                          answer_id='last-name',
                          group_id='multiple-questions-group',
                          group_instance=0,
                          value='Bloggs')
        answer_4 = Answer(block_id='household-composition',
                          answer_instance=1,
                          answer_id='first-name',
                          group_id='multiple-questions-group',
                          group_instance=0,
                          value='Jim')
        answer_5 = Answer(block_id='household-composition',
                          answer_instance=1,
                          answer_id='last-name',
                          group_id='multiple-questions-group',
                          group_instance=0,
                          value=None)
        answer_6 = Answer(block_id='household-composition',
                          answer_instance=1,
                          answer_id='middle-names',
                          group_id='multiple-questions-group',
                          group_instance=0,
                          value=None)

        answer_store.add(answer_1)
        answer_store.add(answer_2)
        answer_store.add(answer_3)
        answer_store.add(answer_4)
        answer_store.add(answer_5)
        answer_store.add(answer_6)

        navigation = Navigation(survey,
                                answer_store,
                                metadata,
                                completed_blocks=completed_blocks)

        user_navigation = [{
            'repeating':
            False,
            'completed':
            True,
            'highlight':
            False,
            'link_name':
            '',
            'link_url':
            Location('multiple-questions-group', 0,
                     'household-composition').url(metadata)
        }, {
            'repeating':
            True,
            'link_name':
            'Joe Bloggs',
            'completed':
            False,
            'highlight':
            False,
            'link_url':
            Location('repeating-group', 0, 'repeating-block-1').url(metadata)
        }, {
            'repeating':
            True,
            'link_name':
            'Jim',
            'completed':
            False,
            'highlight':
            False,
            'link_url':
            Location('repeating-group', 1, 'repeating-block-1').url(metadata)
        }]

        self.assertEqual(navigation.build_navigation('property-details', 0),
                         user_navigation)
Пример #14
0
    def test_navigation_repeating_group_extra_answered_completed(self):
        survey = load_schema_file("test_navigation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = [
            Location('property-details', 0, 'introduction'),
            Location('extra-cover', 0, 'extra-cover-block'),
            Location('extra-cover', 0, 'extra-cover-interstitial'),
            Location('extra-cover-items-group', 0, 'extra-cover-items'),
            Location('extra-cover-items-group', 1, 'extra-cover-items'),
        ]

        answer_store = AnswerStore()

        answer_1 = Answer(value=2,
                          group_instance=0,
                          block_id='extra-cover-block',
                          group_id='extra-cover',
                          answer_instance=0,
                          answer_id='extra-cover-answer')
        answer_2 = Answer(value='2',
                          group_instance=0,
                          block_id='extra-cover-items',
                          group_id='extra-cover-items-group',
                          answer_instance=0,
                          answer_id='extra-cover-items-answer')
        answer_3 = Answer(value='2',
                          group_instance=1,
                          block_id='extra-cover-items',
                          group_id='extra-cover-items-group',
                          answer_id='extra-cover-items-answer',
                          answer_instance=0)

        answer_store.add(answer_1)
        answer_store.add(answer_2)
        answer_store.add(answer_3)

        navigation = Navigation(survey,
                                answer_store,
                                metadata,
                                completed_blocks=completed_blocks)

        user_navigation = [{
            'repeating':
            False,
            'highlight':
            True,
            'completed':
            False,
            'link_name':
            'Property Details',
            'link_url':
            Location('property-details', 0, 'insurance-type').url(metadata)
        }, {
            'repeating':
            False,
            'highlight':
            False,
            'completed':
            False,
            'link_name':
            'Household Details',
            'link_url':
            Location('multiple-questions-group', 0,
                     'household-composition').url(metadata)
        }, {
            'repeating':
            False,
            'highlight':
            False,
            'completed':
            True,
            'link_name':
            'Extra Cover',
            'link_url':
            Location('extra-cover', 0, 'extra-cover-block').url(metadata)
        }, {
            'repeating':
            False,
            'highlight':
            False,
            'completed':
            False,
            'link_name':
            'Payment Details',
            'link_url':
            Location('payment-details', 0, 'credit-card').url(metadata)
        }, {
            'repeating':
            False,
            'highlight':
            False,
            'completed':
            True,
            'link_name':
            'Extra Cover Items',
            'link_url':
            Location('extra-cover-items-group', 0,
                     'extra-cover-items').url(metadata)
        }]
        self.assertEqual(navigation.build_navigation('property-details', 0),
                         user_navigation)
Пример #15
0
    def test_navigation_repeating_group_extra_answered_not_completed(self):
        survey = load_schema_file("test_navigation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = [
            Location('property-details', 0, 'introduction'),
            Location('property-details', 0, 'insurance-type'),
            Location('property-details', 0,
                     'cd6a5727-8cab-4737-aa4e-d666d98b3f92'),
            Location('property-details', 0, 'personal-interstitial'),
            Location('extra-cover', 0, 'extra-cover-block'),
            Location('extra-cover', 0, 'ea651fa7-6b9d-4b6f-ba72-79133f312039'),
        ]

        answer_store = AnswerStore()

        answer_1 = Answer(answer_instance=0,
                          group_id='multiple-questions-group',
                          answer_id='household-full-name',
                          block_id='household-composition',
                          group_instance=0,
                          value='Person1')
        answer_2 = Answer(answer_instance=1,
                          group_id='multiple-questions-group',
                          answer_id='household-full-name',
                          block_id='household-composition',
                          group_instance=0,
                          value='Person2')
        answer_3 = Answer(answer_instance=1,
                          group_id='extra-cover',
                          answer_id='extra-cover-answer',
                          block_id='extra-cover-block',
                          group_instance=0,
                          value=2)

        answer_store.add(answer_1)
        answer_store.add(answer_2)
        answer_store.add(answer_3)

        navigation = Navigation(survey, answer_store, metadata,
                                completed_blocks)

        user_navigation = [{
            'completed':
            False,
            'highlight':
            True,
            'repeating':
            False,
            'link_name':
            'Property Details',
            'link_url':
            Location('property-details', 0, 'insurance-type').url(metadata)
        }, {
            'completed':
            False,
            'highlight':
            False,
            'repeating':
            False,
            'link_name':
            'Household Details',
            'link_url':
            Location('multiple-questions-group', 0,
                     'household-composition').url(metadata),
        }, {
            'completed':
            False,
            'highlight':
            False,
            'repeating':
            True,
            'link_name':
            'Person1',
            'link_url':
            Location('repeating-group', 0, 'repeating-block-1').url(metadata),
        }, {
            'completed':
            False,
            'highlight':
            False,
            'repeating':
            True,
            'link_name':
            'Person2',
            'link_url':
            Location('repeating-group', 1, 'repeating-block-1').url(metadata),
        }, {
            'completed':
            False,
            'highlight':
            False,
            'repeating':
            False,
            'link_name':
            'Extra Cover',
            'link_url':
            Location('extra-cover', 0, 'extra-cover-block').url(metadata),
        }, {
            'completed':
            False,
            'highlight':
            False,
            'repeating':
            False,
            'link_name':
            'Payment Details',
            'link_url':
            Location('payment-details', 0, 'credit-card').url(metadata),
        }, {
            'completed':
            False,
            'highlight':
            False,
            'repeating':
            False,
            'link_name':
            'Extra Cover Items',
            'link_url':
            Location('extra-cover-items-group', 0,
                     'extra-cover-items').url(metadata)
        }]

        self.assertEqual(navigation.build_navigation('property-details', 0),
                         user_navigation)
Пример #16
0
    def test_navigation_repeating_household_and_hidden_household_groups_completed(
            self):

        survey = load_schema_file("test_navigation.json")
        metadata = {
            "eq_id": '1',
            "collection_exercise_sid": '999',
            "form_type": "some_form"
        }

        completed_blocks = [
            Location('property-details', 0, 'introduction'),
            Location('multiple-questions-group', 0, 'household-composition'),
            Location('repeating-group', 0, 'repeating-block-1'),
            Location('repeating-group', 0, 'repeating-block-2'),
            Location('repeating-group', 1, 'repeating-block-1'),
            Location('repeating-group', 1, 'repeating-block-2')
        ]

        navigation = Navigation(survey,
                                AnswerStore(),
                                metadata,
                                completed_blocks=completed_blocks)

        navigation.answer_store.answers = [{
            'group_instance': 0,
            'answer_instance': 0,
            'answer_id': 'household-full-name',
            'value': 'Jim',
            'group_id': 'multiple-questions-group',
            'block_id': 'household-composition'
        }, {
            'group_instance': 0,
            'answer_instance': 1,
            'answer_id': 'household-full-name',
            'value': 'Ben',
            'group_id': 'multiple-questions-group',
            'block_id': 'household-composition'
        }, {
            'group_instance': 0,
            'answer_instance': 0,
            'answer_id': 'what-is-your-age',
            'value': None,
            'group_id': 'repeating-group',
            'block_id': 'repeating-block-1'
        }, {
            'group_instance': 0,
            'answer_instance': 0,
            'answer_id': 'what-is-your-shoe-size',
            'value': None,
            'group_id': 'repeating-group',
            'block_id': 'repeating-block-2'
        }, {
            'group_instance': 1,
            'answer_instance': 0,
            'answer_id': 'what-is-your-age',
            'value': None,
            'group_id': 'repeating-group',
            'block_id': 'repeating-block-1'
        }, {
            'group_instance': 1,
            'answer_instance': 0,
            'answer_id': 'what-is-your-shoe-size',
            'value': None,
            'group_id': 'repeating-group',
            'block_id': 'repeating-block-2'
        }]

        user_navigation = [{
            'link_name':
            'Property Details',
            'repeating':
            False,
            'completed':
            False,
            'highlight':
            True,
            'link_url':
            Location('property-details', 0, 'insurance-type').url(metadata)
        }, {
            'link_name':
            'Household Details',
            'repeating':
            False,
            'completed':
            True,
            'highlight':
            False,
            'link_url':
            Location('multiple-questions-group', 0,
                     'household-composition').url(metadata)
        }, {
            'link_name':
            'Jim',
            'repeating':
            True,
            'completed':
            True,
            'highlight':
            False,
            'link_url':
            Location('repeating-group', 0, 'repeating-block-1').url(metadata)
        }, {
            'link_name':
            'Ben',
            'repeating':
            True,
            'completed':
            True,
            'highlight':
            False,
            'link_url':
            Location('repeating-group', 1, 'repeating-block-1').url(metadata)
        }, {
            'link_name':
            'Extra Cover',
            'repeating':
            False,
            'completed':
            False,
            'highlight':
            False,
            'link_url':
            Location('extra-cover', 0, 'extra-cover-block').url(metadata)
        }, {
            'link_name':
            'Payment Details',
            'repeating':
            False,
            'completed':
            False,
            'highlight':
            False,
            'link_url':
            Location('payment-details', 0, 'credit-card').url(metadata)
        }]

        self.assertEqual(navigation.build_navigation('property-details', 0),
                         user_navigation)