From 9c60a0e91659ab4ace5831c808b861ccb56e8faf Mon Sep 17 00:00:00 2001 From: Giulia Naponiello Date: Apr 02 2019 15:54:55 +0000 Subject: Remove duplicated waivers and results from response When asked for a decision, Greenwave returns multiple results or waivers when verbose==True in case the same "subject" gets repeated. Removing duplicated waivers and results. --- diff --git a/functional-tests/test_api_v1.py b/functional-tests/test_api_v1.py index 1e43869..f002083 100644 --- a/functional-tests/test_api_v1.py +++ b/functional-tests/test_api_v1.py @@ -1318,3 +1318,30 @@ def test_verbose_retrieve_latest_results_scenario(requests_session, greenwave_se assert len(res_data['results']) == 2 for result in res_data['results']: assert result['outcome'] == 'PASSED' + + +def test_api_returns_not_repeated_waiver_in_verbose_info( + requests_session, greenwave_server, testdatabuilder): + """ + This tests that the API doesn't return repeated waivers when the flag verbose==True + """ + nvr = testdatabuilder.unique_nvr() + testdatabuilder.create_waiver(nvr=nvr, + testcase_name=TASKTRON_RELEASE_CRITICAL_TASKS[0], + product_version='fedora-26', + comment='This is fine') + data = { + 'decision_context': 'bodhi_update_push_stable', + 'product_version': 'fedora-26', + 'subject': [ + {'item': nvr, 'type': 'koji_build'}, + {'original_spec_nvr': nvr}, + ], + 'verbose': True + } + r_ = requests_session.post(greenwave_server + 'api/v1.0/decision', + headers={'Content-Type': 'application/json'}, + data=json.dumps(data)) + assert r_.status_code == 200 + res_data = r_.json() + assert len(res_data['waivers']) == 1 diff --git a/greenwave/api_v1.py b/greenwave/api_v1.py index 7c472e5..aac01f4 100644 --- a/greenwave/api_v1.py +++ b/greenwave/api_v1.py @@ -377,9 +377,10 @@ def make_decision(): } if verbose: + # removing duplicated elements... response.update({ - 'results': verbose_results, - 'waivers': verbose_waivers, + 'results': list({result['id']: result for result in verbose_results}.values()), + 'waivers': list({waiver['id']: waiver for waiver in verbose_waivers}.values()), }) log.debug('Response: %s', response)