From e38cf733837959d3e29d8db8229e62a00f8ec6fa Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Mar 14 2022 10:56:19 +0000 Subject: Fix matching scenario from rules --- diff --git a/functional-tests/test_api_v1.py b/functional-tests/test_api_v1.py index 0f0f84a..4d0ccf5 100644 --- a/functional-tests/test_api_v1.py +++ b/functional-tests/test_api_v1.py @@ -1637,3 +1637,45 @@ def test_installed_subject_types(requests_session, greenwave_server): 'redhat-container-image', 'redhat-module', ] + +def test_make_a_decision_on_passed_result_with_custom_scenario( + requests_session, greenwave_server, testdatabuilder): + item1_nvr = testdatabuilder.unique_nvr() + result1 = testdatabuilder.create_result( + item=item1_nvr, + testcase_name='test.testcase1', + outcome='FAILED' + ) + result2 = testdatabuilder.create_result( + item=item1_nvr, + testcase_name='test.testcase1', + outcome='PASSED', + scenario='scenario1', + ) + data = { + 'product_version': 'fedora-26', + 'subject_type': 'koji_build', + 'subject_identifier': item1_nvr, + "rules": [ + { + "type": "PassingTestCaseRule", + "test_case_name": "test.testcase1", + "scenario": "scenario1", + } + ] + } + r = requests_session.post(greenwave_server + 'api/v1.0/decision', json=data) + assert r.status_code == 200 + res_data = r.json() + assert res_data['policies_satisfied'] is True + assert res_data['summary'] == 'All required tests passed' + assert res_data['satisfied_requirements'] == [ + { + 'subject_identifier': item1_nvr, + 'subject_type': 'koji_build', + 'result_id': result2['id'], + 'testcase': 'test.testcase1', + 'source': None, + 'type': 'test-result-passed' + } + ] diff --git a/greenwave/policies.py b/greenwave/policies.py index edddf40..892a2fa 100644 --- a/greenwave/policies.py +++ b/greenwave/policies.py @@ -660,7 +660,7 @@ class PassingTestCaseRule(Rule): if self.scenario is not None: matching_results = [ result for result in matching_results - if self.scenario in result['data']['scenario']] + if self.scenario in result['data'].get('scenario', [])] # Investigate the absence of result first. if not matching_results: