Esempio n. 1
0
    def test_evaluate_skip_condition_returns_true_when_more_than_one_rule_is_true(
            self):
        # Given
        skip_condition = [{
            'when': [{
                'id': 'this',
                'condition': 'equals',
                'value': 'value'
            }]
        }, {
            'when': [{
                'id': 'that',
                'condition': 'equals',
                'value': 'other value'
            }]
        }]
        answer_store = AnswerStore()
        answer_store.add(Answer(answer_id='this', value='value'))
        answer_store.add(Answer(answer_id='that', value='other value'))

        # When
        condition = evaluate_skip_condition(skip_condition, {}, answer_store)

        # Then
        self.assertTrue(condition)
Esempio n. 2
0
    def test_evaluate_skip_condition_returns_false_when_both_or_rules_false(
            self):
        # Given
        skip_condition = [{
            'when': [{
                'id': 'this',
                'condition': 'equals',
                'value': 'value'
            }]
        }, {
            'when': [{
                'id': 'that',
                'condition': 'equals',
                'value': 'other value'
            }]
        }]
        answer_store = AnswerStore()
        answer_store.add(Answer(answer_id='this', value='not correct'))
        answer_store.add(Answer(answer_id='that', value='not correct'))

        # When
        condition = evaluate_skip_condition(skip_condition, {}, answer_store)

        # Then
        self.assertFalse(condition)
Esempio n. 3
0
    def test_evaluate_skip_condition_returns_true_when_that_rule_true(self):

        skip_condition = [
            {
                'when': [
                    {
                        'id': 'this',
                        'condition': 'equals',
                        'value': 'value'
                    }
                ]
            },
            {
                'when': [
                    {
                        'id': 'that',
                        'condition': 'equals',
                        'value': 'other value'
                    }
                ]
            }
        ]
        answer_store = AnswerStore()
        answer_store.add(Answer(answer_id='that', value='other value'))

        self.assertTrue(evaluate_skip_condition(skip_condition, {}, answer_store))
Esempio n. 4
0
    def _should_skip_group(self, current_group_instance, group):

        skip_group = False
        skip_condition = SchemaHelper.get_skip_condition(group)

        if skip_condition:
            skip_group = evaluate_skip_condition(skip_condition, self.metadata, self.answer_store,
                                                 current_group_instance)
        return skip_group
Esempio n. 5
0
    def test_evaluate_skip_condition_returns_false_when_no_skip_condition(self):
        # Given
        skip_condition = None

        # When
        condition = evaluate_skip_condition(skip_condition, {}, AnswerStore())

        # Then
        self.assertFalse(condition)
Esempio n. 6
0
def _evaluate_skip_conditions(block_json, location, answer_store, metadata):
    for question in SchemaHelper.get_questions_for_block(block_json):
        if 'skip_condition' in question:
            skip_question = evaluate_skip_condition([question['skip_condition']], metadata, answer_store,
                                                    location.group_instance)
            question['skipped'] = skip_question

            for answer in question['answers']:
                if answer['mandatory'] and skip_question:
                    answer['mandatory'] = False

    return block_json