def test_get_evidence(self):
        expected_evidence = StepResultEvidence(name='evidence1',
                                               value='value1',
                                               description='description1')

        step_result = StepResult('step1', 'sub1', 'implementer1')
        step_result.add_evidence('evidence1', 'value1', 'description1')
        self.assertEqual(step_result.get_evidence('evidence1'),
                         expected_evidence)
    def test_evidence_dicts_with_evidence(self):
        step_result = StepResult(
            step_name='foo',
            sub_step_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            sub_step_implementer_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer')
        step_result.add_evidence(name='evi-str', value='hello')
        step_result.add_evidence(name='evi-bool-t', value=True)
        step_result.add_evidence(name='evi-bool-f', value=False)
        step_result.add_evidence(name='evi-desc',
                                 value='world',
                                 description='test evidence')

        expected_step_result_evidence_dicts = [{
            'description': '',
            'name': 'evi-str',
            'value': 'hello'
        }, {
            'description': '',
            'name': 'evi-bool-t',
            'value': True
        }, {
            'description': '',
            'name': 'evi-bool-f',
            'value': False
        }, {
            'description': 'test evidence',
            'name': 'evi-desc',
            'value': 'world'
        }]

        self.assertEqual(expected_step_result_evidence_dicts,
                         step_result.evidence_dicts)
    def test_get_evidence_property(self):
        step_result = StepResult('step1', 'sub1', 'implementer1')
        step_result.add_evidence('evidence1', 'value1', 'description1')
        step_result.add_evidence('evidence2', 'value2')

        expected_evidence = {
            'evidence1':
            StepResultEvidence(name='evidence1',
                               value='value1',
                               description='description1'),
            'evidence2':
            StepResultEvidence(name='evidence2', value='value2')
        }

        self.assertEqual(step_result.evidence, expected_evidence)
    def test_add_duplicate_evidence(self):
        expected_evidence = {
            'evidence1':
            StepResultEvidence(name='evidence1',
                               value='value1',
                               description='description1'),
            'evidence2':
            StepResultEvidence(name='evidence2', value='lastonewins')
        }

        step_result = StepResult('step1', 'sub1', 'implementer1')
        step_result.add_evidence('evidence1', 'value1', 'description1')
        step_result.add_evidence('evidence2', 'here')
        step_result.add_evidence('evidence2', 'andhere')
        step_result.add_evidence('evidence2', 'lastonewins')
        self.assertEqual(step_result.evidence, expected_evidence)
    def test___repr__(self):
        step_result = StepResult(
            step_name='foo',
            sub_step_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            sub_step_implementer_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            environment='blarg')
        step_result.add_artifact(name='art-str', value='hello')
        step_result.add_artifact(name='art-bool-t', value=True)
        step_result.add_artifact(name='art-bool-f', value=False)
        step_result.add_artifact(name='art-desc',
                                 value='world',
                                 description='test artifact')

        step_result.add_evidence(name='evi-str', value='hello')
        step_result.add_evidence(name='evi-bool-t', value=True)
        step_result.add_evidence(name='evi-bool-f', value=False)
        step_result.add_evidence(name='evi-desc',
                                 value='world',
                                 description='test evidence')

        expected = "StepResult(step_name=foo,sub_step_name=tests.helpers." \
            "sample_step_implementers.FooStepImplementer,sub_step_implementer_name=" \
            "tests.helpers.sample_step_implementers.FooStepImplementer,environment=" \
            "blarg,success=True,message=,artifacts=[{'name': 'art-str', 'value': 'hello', "\
            "'description': ''}, {'name': 'art-bool-t', 'value': True, 'description': ''}, "\
            "{'name': 'art-bool-f', 'value': False, 'description': ''}, "\
            "{'name': 'art-desc', 'value': 'world', 'description': 'test artifact'}]"\
            "evidence=[{'name': 'evi-str', 'value': 'hello', 'description': ''}, "\
            "{'name': 'evi-bool-t', 'value': True, 'description': ''}, "\
            "{'name': 'evi-bool-f', 'value': False, 'description': ''}, "\
            "{'name': 'evi-desc', 'value': 'world', 'description': 'test evidence'}])"

        print(str(repr(step_result)))

        self.assertEqual(expected, repr(step_result))
    def test___str__(self):
        step_result = StepResult(
            step_name='foo',
            sub_step_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            sub_step_implementer_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            environment='blarg')
        step_result.add_artifact(name='art-str', value='hello')
        step_result.add_artifact(name='art-bool-t', value=True)
        step_result.add_artifact(name='art-bool-f', value=False)
        step_result.add_artifact(name='art-desc',
                                 value='world',
                                 description='test artifact')

        step_result.add_evidence(name='evi-str', value='hello')
        step_result.add_evidence(name='evi-bool-t', value=True)
        step_result.add_evidence(name='evi-bool-f', value=False)
        step_result.add_evidence(name='evi-desc',
                                 value='world',
                                 description='test evidence')

        expected = "{'step-name': 'foo', 'sub-step-name': "\
        "'tests.helpers.sample_step_implementers.FooStepImplementer', "\
        "'sub-step-implementer-name': 'tests.helpers.sample_step_implementers.FooStepImplementer', "\
        "'environment': 'blarg', 'success': True, 'message': '', "\
        "'artifacts': [{'name': 'art-str', 'value': 'hello', 'description': ''}, "\
        "{'name': 'art-bool-t', 'value': True, 'description': ''}, "\
        "{'name': 'art-bool-f', 'value': False, 'description': ''}, "\
        "{'name': 'art-desc', 'value': 'world', 'description': 'test artifact'}], "\
        "'evidence': [{'name': 'evi-str', 'value': 'hello', 'description': ''}, "\
        "{'name': 'evi-bool-t', 'value': True, 'description': ''}, "\
        "{'name': 'evi-bool-f', 'value': False, 'description': ''}, "\
        "{'name': 'evi-desc', 'value': 'world', 'description': 'test evidence'}]}"

        self.assertEqual(expected, str(step_result))
    def test_add_evidence(self):
        step_result = StepResult('step1', 'sub1', 'implementer1')
        step_result.add_evidence('evidence1', 'value1', 'description1')
        step_result.add_evidence('evidence2', 'value2', 'description2')
        step_result.add_evidence('evidence3', 'value3')

        self.assertEqual(
            step_result.get_evidence('evidence1'),
            StepResultEvidence(name='evidence1',
                               value='value1',
                               description='description1'))
        self.assertEqual(
            step_result.get_evidence('evidence2'),
            StepResultEvidence(name='evidence2',
                               value='value2',
                               description='description2'))
        self.assertEqual(step_result.get_evidence('evidence3'),
                         StepResultEvidence(name='evidence3', value='value3'))
    def test_add_evidence_missing_value(self):
        step_result = StepResult('step1', 'sub1', 'implementer1')

        with self.assertRaisesRegex(StepRunnerException,
                                    r"Value is required to add evidence"):
            step_result.add_evidence('name1', '', 'description1')
    def test_get_step_result_dict_with_env(self):
        step_result = StepResult(
            step_name='foo',
            sub_step_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            sub_step_implementer_name=
            'tests.helpers.sample_step_implementers.FooStepImplementer',
            environment='blarg')
        step_result.add_artifact(name='art-str', value='hello')
        step_result.add_artifact(name='art-bool-t', value=True)
        step_result.add_artifact(name='art-bool-f', value=False)
        step_result.add_artifact(name='art-desc',
                                 value='world',
                                 description='test artifact')

        step_result.add_evidence(name='evi-str', value='hello')
        step_result.add_evidence(name='evi-bool-t', value=True)
        step_result.add_evidence(name='evi-bool-f', value=False)
        step_result.add_evidence(name='evi-desc',
                                 value='world',
                                 description='test evidence')

        expected = {
            'blarg': {
                'foo': {
                    'tests.helpers.sample_step_implementers.FooStepImplementer':
                    {
                        'artifacts': [{
                            'description': '',
                            'name': 'art-str',
                            'value': 'hello'
                        }, {
                            'description': '',
                            'name': 'art-bool-t',
                            'value': True
                        }, {
                            'description': '',
                            'name': 'art-bool-f',
                            'value': False
                        }, {
                            'description': 'test artifact',
                            'name': 'art-desc',
                            'value': 'world'
                        }],
                        'evidence': [{
                            'description': '',
                            'name': 'evi-str',
                            'value': 'hello'
                        }, {
                            'description': '',
                            'name': 'evi-bool-t',
                            'value': True
                        }, {
                            'description': '',
                            'name': 'evi-bool-f',
                            'value': False
                        }, {
                            'description': 'test evidence',
                            'name': 'evi-desc',
                            'value': 'world'
                        }],
                        'message':
                        '',
                        'sub-step-implementer-name':
                        'tests.helpers.sample_step_implementers.FooStepImplementer',
                        'success':
                        True
                    }
                }
            }
        }

        self.assertEqual(expected, step_result.get_step_result_dict())
 def test_get_evidence_value(self):
     step_result_expected = 'value1'
     step_result = StepResult('step1', 'sub1', 'implementer1')
     step_result.add_evidence('evidence1', 'value1', 'description1')
     self.assertEqual(step_result.get_evidence_value('evidence1'),
                      step_result_expected)