Exemple #1
0
    def test_is_summary_or_confirmation_returns_false_when_block_is_none(self):
        block = None

        is_summary_or_confirmation = SchemaHelper.is_summary_or_confirmation(
            block)

        self.assertFalse(is_summary_or_confirmation)
Exemple #2
0
    def build_navigation(self, current_group_id, current_group_instance):
        """
        Build navigation based on the current group/instance selected

        :param current_group_id:
        :param current_group_instance:
        :return:
        """
        if self.survey_json.get('navigation', False) is False:
            return None

        navigation = []

        last_group_id = SchemaHelper.get_last_group_id(self.survey_json)

        for group in filter(lambda x: 'hide_in_navigation' not in x,
                            self.survey_json['groups']):
            logger.debug("building frontend navigation", group_id=group['id'])

            first_location = Location(group['id'], 0, group['blocks'][0]['id'])
            last_block_in_group = SchemaHelper.get_last_block_in_group(group)

            is_summary_or_confirm_group = last_block_in_group and \
                SchemaHelper.is_summary_or_confirmation(last_block_in_group)

            last_block_location = Location(group['id'], 0,
                                           last_block_in_group['id'])
            can_get_to_summary = is_summary_or_confirm_group and self.routing_path and \
                last_block_location in self.routing_path

            skip_group = self._should_skip_group(current_group_instance, group)
            if not skip_group:
                repeating_rule = SchemaHelper.get_repeat_rule(group)
                if repeating_rule:
                    logger.debug("building repeating navigation",
                                 group_id=group['id'])
                    navigation.extend(
                        self._build_repeating_navigation(
                            repeating_rule, group, current_group_id,
                            current_group_instance))
                elif last_group_id == group['id'] and can_get_to_summary:
                    logger.debug("building navigation", group_id=group['id'])
                    if len(self.completed_blocks) > 0 and set(
                            self.routing_path[:-1]).issubset(
                                self.completed_blocks):
                        navigation.append(
                            self._build_single_navigation(
                                group, current_group_id, first_location))
                elif last_group_id != group[
                        'id'] and not is_summary_or_confirm_group:
                    logger.debug("building navigation", group_id=group['id'])
                    navigation.append(
                        self._build_single_navigation(group, current_group_id,
                                                      first_location))

        return navigation
Exemple #3
0
    def test_is_summary_or_confirmation_returns_true_when_type_is_confirmation(
            self):
        block = {
            'type': 'Confirmation',
        }

        is_summary_or_confirmation = SchemaHelper.is_summary_or_confirmation(
            block)

        self.assertTrue(is_summary_or_confirmation)
Exemple #4
0
    def test_is_summary_or_confirmation_returns_false_when_type_is_questionnaire(
            self):
        block = {
            'type': 'Questionnaire',
        }

        is_summary_or_confirmation = SchemaHelper.is_summary_or_confirmation(
            block)

        self.assertFalse(is_summary_or_confirmation)
Exemple #5
0
    def test_is_summary_or_confirmation_returns_false_when_block_has_no_type(
            self):
        block = {
            'id': 'block-with-no-type',
        }

        is_summary_or_confirmation = SchemaHelper.is_summary_or_confirmation(
            block)

        self.assertFalse(is_summary_or_confirmation)