From 9d25854b530dca130c36fe3e132f90144ac38443 Mon Sep 17 00:00:00 2001 From: Ivan Grebenshchikov Date: Wed, 2 Aug 2023 02:35:48 +0200 Subject: [PATCH] LITE-28276 Fix 'hubs' KeyError --- connect_ext_ppr/utils.py | 1 + tests/test_events.py | 57 +++++++++++++++++++++++++--------------- tests/test_utils.py | 36 +++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 21 deletions(-) diff --git a/connect_ext_ppr/utils.py b/connect_ext_ppr/utils.py index 7168152..a6bd2e9 100644 --- a/connect_ext_ppr/utils.py +++ b/connect_ext_ppr/utils.py @@ -169,6 +169,7 @@ def get_all_info(client): prd_id = list_['product']['id'] list_['contract']['marketplace'] = filter_object_list_by_id(marketplaces, mkp_id) list_['product'] = filter_object_list_by_id(products, prd_id) + listings = [li for li in listings if li['contract']['marketplace'].get('hubs')] return listings diff --git a/tests/test_events.py b/tests/test_events.py index 56a28f3..6955ee1 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -7,7 +7,6 @@ from connect.client import ClientError from connect.client.rql import R -import pytest from connect_ext_ppr.events import ConnectExtensionXvsEventsApplication from connect_ext_ppr.models.ppr import PPRVersion @@ -235,11 +234,7 @@ def test_reschedule_product_change( assert result.status == 'reschedule' -@pytest.mark.parametrize( - 'status', - ('installed', 'uninstalled'), -) -def test_handle_installation_changed( +def test_handle_installation_installed( connect_client, client_mocker_factory, dbsession, @@ -248,26 +243,46 @@ def test_handle_installation_changed( listing, marketplace, product, - status, ): config = {} client_mocker = client_mocker_factory(base_url=connect_client.endpoint) - if status == 'installed': - client_mocker.listings.filter(status="listed").mock( - return_value=[listing], - ) - client_mocker.marketplaces.filter(id__in=[marketplace['id']]).mock( - return_value=[marketplace], - ) - rql = R().visibility.listing.eq(True) - rql |= R().visibility.syndication.eq(True) - rql & R().id.in_([product['id']]) - client_mocker.products.filter(rql).mock( - return_value=[product], - ) - installation['status'] = status + client_mocker.listings.filter(status="listed").mock( + return_value=[listing], + ) + client_mocker.marketplaces.filter(id__in=[marketplace['id']]).mock( + return_value=[marketplace], + ) + rql = R().visibility.listing.eq(True) + rql |= R().visibility.syndication.eq(True) + rql & R().id.in_([product['id']]) + client_mocker.products.filter(rql).mock( + return_value=[product], + ) + installation['status'] = 'installed' + ext = ConnectExtensionXvsEventsApplication( + connect_client, logger, config, + installation=installation, + installation_client=connect_client, + ) + result = ext.on_installation_status_change(installation) + assert result.status == 'success' + + +def test_handle_installation_uninstalled( + connect_client, + client_mocker_factory, + dbsession, + logger, + installation, + listing, + marketplace, + product, +): + config = {} + + installation['status'] = 'uninstalled' ext = ConnectExtensionXvsEventsApplication( connect_client, logger, config, installation=installation, diff --git a/tests/test_utils.py b/tests/test_utils.py index d9a80de..95b3a8f 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -59,6 +59,42 @@ def test_get_all_info_success( assert all_info[0] == listing +def test_get_all_info_marketplace_wo_hubs( + connect_client, + client_mocker_factory, + marketplace, + listing, + product, +): + client_mocker = client_mocker_factory(base_url=connect_client.endpoint) + listing_wo_hubs = copy.deepcopy(listing) + listing_wo_hubs['contract']['marketplace']['id'] = 'MP-1637' + listing_wo_hubs['product']['id'] = 'PRD-000-000-988' + marketplace_wo_hubs = copy.deepcopy(marketplace) + marketplace_wo_hubs['id'] = 'MP-1637' + product_wo_hubs = copy.deepcopy(product) + product_wo_hubs['id'] = 'PRD-000-000-988' + marketplace_wo_hubs.pop('hubs') + + client_mocker.listings.filter(R().status.eq("listed")).mock( + return_value=[listing, listing_wo_hubs], + ) + client_mocker.marketplaces.filter(R().id.in_([marketplace['id']])).mock( + return_value=[marketplace, marketplace_wo_hubs], + ) + rql = R().visibility.listing.eq(True) + rql |= R().visibility.syndication.eq(True) + rql &= R().id.in_([product['id']]) + client_mocker.products.filter(rql).mock( + return_value=[product, product_wo_hubs], + ) + all_info = get_all_info(connect_client) + listing['contract']['marketplace'] = marketplace + listing['product'] = product + assert len(all_info) == 1 + assert all_info[0] == listing + + def test_get_marketplaces( connect_client, marketplace,