import pytest import requests from tests.integration import config def test_lookup_vendors_by_uuid_includes_tenant_hierarchy(): """POST /lookup/vendors/uuids/ should return vendor hierarchy when fetch_flags includes TENANT_HIERARCHY.""" response = requests.post( url='{qa_base_url}/lookup/vendors/uuids/'.format(qa_base_url=config.QA_BASE_URL), json={ 'uuids': ['573d0372-7f2f-48a6-8deb-c9a6558f9549'], 'fetch_flags': ['TENANT_HIERARCHY'], }, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['vendors']) == 1 assert response_json['vendors'][0] == { 'vendor_id': 7123, 'uuid': '573d0372-7f2f-48a6-8deb-c9a6558f9549', 'company_brand_uuid': 'd25a4cd1-e820-45f2-be5c-56edcfeb8298', 'parent_company_uuid': '955a1bbd-b623-4ea1-ab5f-8d6620c442fb', } def test_lookup_vendors_by_uuid_does_not_include_tenant_hierarchy(): """POST /lookup/vendors/uuids/ without fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/vendors/uuids/'.format(qa_base_url=config.QA_BASE_URL), json={'uuids': ['573d0372-7f2f-48a6-8deb-c9a6558f9549']}, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['vendors']) == 1 assert response_json['vendors'][0] == { 'vendor_id': 7123, 'uuid': '573d0372-7f2f-48a6-8deb-c9a6558f9549', } def test_lookup_vendors_by_uuid_errors_on_invalid_fetch_flags(): """POST /lookup/vendors/uuids/ errors out with invalid fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/vendors/uuids/'.format(qa_base_url=config.QA_BASE_URL), json={ 'uuids': ['573d0372-7f2f-48a6-8deb-c9a6558f9549'], 'fetch_flags': ['IS_DISTRIBUTOR'], }, ) assert response.status_code == 400 response_json = response.json() assert response_json == { 'code': 'input_validation_error', 'message': { 'fetch_flags': { '0': [ 'Must be one of: TENANT_HIERARCHY.', ], }, }, } def test_lookup_vendors_by_id_includes_tenant_hierarchy(): """POST /lookup/vendors/vendor-ids/ should return vendor hierarchy when fetch_flags includes TENANT_HIERARCHY.""" response = requests.post( url='{qa_base_url}/lookup/vendors/vendor-ids/'.format(qa_base_url=config.QA_BASE_URL), json={ 'vendor_ids': [7123], 'fetch_flags': ['TENANT_HIERARCHY'], }, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['vendors']) == 1 assert response_json['vendors'][0] == { 'vendor_id': 7123, 'uuid': '573d0372-7f2f-48a6-8deb-c9a6558f9549', 'company_brand_uuid': 'd25a4cd1-e820-45f2-be5c-56edcfeb8298', 'parent_company_uuid': '955a1bbd-b623-4ea1-ab5f-8d6620c442fb', } def test_lookup_vendors_by_id_does_not_include_tenant_hierarchy(): """POST /lookup/vendors/vendor-ids/ without fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/vendors/vendor-ids/'.format(qa_base_url=config.QA_BASE_URL), json={'vendor_ids': [7123]}, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['vendors']) == 1 assert response_json['vendors'][0] == { 'vendor_id': 7123, 'uuid': '573d0372-7f2f-48a6-8deb-c9a6558f9549', } def test_lookup_vendors_by_id_errors_on_invalid_fetch_flags(): """POST /lookup/vendors/vendor-ids/ errors out with invalid fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/vendors/vendor-ids/'.format(qa_base_url=config.QA_BASE_URL), json={ 'vendor_ids': [7123], 'fetch_flags': ['IS_DISTRIBUTOR'], }, ) assert response.status_code == 400 response_json = response.json() assert response_json == { 'code': 'input_validation_error', 'message': { 'fetch_flags': { '0': [ 'Must be one of: TENANT_HIERARCHY.', ], }, }, } def test_lookup_subaccounts_by_uuid_includes_tenant_hierarchy(): """POST /lookup/subaccounts/uuids/ should return subaccount hierarchy when fetch_flags includes TENANT_HIERARCHY.""" response = requests.post( url='{qa_base_url}/lookup/subaccounts/uuids/'.format(qa_base_url=config.QA_BASE_URL), json={ 'uuids': ['0c54f0f1-deda-428a-a00c-9317170db544'], 'fetch_flags': ['TENANT_HIERARCHY'], }, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['subaccounts']) == 1 assert response_json['subaccounts'][0] == { 'subaccount_id': 7532, 'vendor_id': 21989, 'uuid': '0c54f0f1-deda-428a-a00c-9317170db544', 'vendor_uuid': 'ec1fd7e2-9c95-4e09-a037-e924e0244283', 'company_brand_uuid': 'd25a4cd1-e820-45f2-be5c-56edcfeb8298', 'parent_company_uuid': '955a1bbd-b623-4ea1-ab5f-8d6620c442fb', } def test_lookup_subaccounts_by_uuid_does_not_include_tenant_hierarchy(): """POST /lookup/subaccounts/uuids/ without fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/subaccounts/uuids/'.format(qa_base_url=config.QA_BASE_URL), json={'uuids': ['0c54f0f1-deda-428a-a00c-9317170db544']}, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['subaccounts']) == 1 assert response_json['subaccounts'][0] == { 'subaccount_id': 7532, 'vendor_id': 21989, 'uuid': '0c54f0f1-deda-428a-a00c-9317170db544', } def test_lookup_subaccounts_by_uuid_errors_on_invalid_fetch_flags(): """POST /lookup/subaccounts/uuids/ errors out with invalid fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/subaccounts/uuids/'.format(qa_base_url=config.QA_BASE_URL), json={ 'uuids': ['0c54f0f1-deda-428a-a00c-9317170db544'], 'fetch_flags': ['RANDOM_FLAG'], }, ) assert response.status_code == 400 response_json = response.json() assert response_json == { 'code': 'input_validation_error', 'message': { 'fetch_flags': { '0': [ 'Must be one of: TENANT_HIERARCHY.', ], }, }, } def test_lookup_subaccounts_by_id_includes_tenant_hierarchy(): """POST /lookup/subaccounts/subaccount-ids/ should return subaccount hierarchy when fetch_flags includes TENANT_HIERARCHY.""" response = requests.post( url='{qa_base_url}/lookup/subaccounts/subaccount-ids/'.format( qa_base_url=config.QA_BASE_URL ), json={'subaccount_ids': ['7532'], 'fetch_flags': ['TENANT_HIERARCHY']}, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['subaccounts']) == 1 assert response_json['subaccounts'][0] == { 'subaccount_id': 7532, 'vendor_id': 21989, 'uuid': '0c54f0f1-deda-428a-a00c-9317170db544', 'vendor_uuid': 'ec1fd7e2-9c95-4e09-a037-e924e0244283', 'company_brand_uuid': 'd25a4cd1-e820-45f2-be5c-56edcfeb8298', 'parent_company_uuid': '955a1bbd-b623-4ea1-ab5f-8d6620c442fb', } def test_lookup_subaccounts_by_id_does_not_include_tenant_hierarchy(): """POST /lookup/subaccounts/subaccount-ids/ without fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/subaccounts/subaccount-ids/'.format( qa_base_url=config.QA_BASE_URL ), json={'subaccount_ids': ['7532']}, ) assert response.status_code == 200 response_json = response.json() assert len(response_json['subaccounts']) == 1 assert response_json['subaccounts'][0] == { 'subaccount_id': 7532, 'vendor_id': 21989, 'uuid': '0c54f0f1-deda-428a-a00c-9317170db544', } @pytest.mark.parametrize( 'payload, expected_status, expected_response', [ pytest.param( { 'uuids': [ 'a8584a2c-f8e7-4625-a736-85e1b794d017', 'a8e0482f-a65c-4bc4-8d9d-479af90e8958', ] }, 200, { 'vendors': [ None, { 'vendor_uuid': 'a8e0482f-a65c-4bc4-8d9d-479af90e8958', 'feature_ids': [1, 13, 32], }, ] }, id='valid uuids, one unknown, one known vendor uuid', ), pytest.param( {'uuids': []}, 400, {'code': 'invalid_input', 'message': 'Request payload is not valid'}, id='empty_uuids', ), pytest.param( {'uuids': ['not-a-uuid']}, 400, {'code': 'input_validation_error', 'message': {'uuids': {'0': ['Not a valid UUID.']}}}, id='invalid_uuid', ), ], ) def test_lookup_vendors_features_by_uuids(payload, expected_status, expected_response): """POST /lookup/vendors/features/uuids/""" response = requests.post( url='{qa_base_url}/lookup/vendors/features/uuids/'.format(qa_base_url=config.QA_BASE_URL), json=payload, ) assert response.status_code == expected_status assert response.json() == expected_response def test_lookup_subaccounts_by_id_errors_on_invalid_fetch_flags(): """POST /lookup/subaccounts/subaccount-ids/ errors out with invalid fetch_flags.""" response = requests.post( url='{qa_base_url}/lookup/subaccounts/subaccount-ids/'.format( qa_base_url=config.QA_BASE_URL ), json={'subaccount_ids': ['7532'], 'fetch_flags': ['RANDOM_FLAG']}, ) assert response.status_code == 400 response_json = response.json() assert response_json == { 'code': 'input_validation_error', 'message': { 'fetch_flags': { '0': [ 'Must be one of: TENANT_HIERARCHY.', ], }, }, }