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)
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)
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)
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)
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)
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)
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)
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
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
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)
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))
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)
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)
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)
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)
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)