"""Integration tests for POST /vendors/dataloader endpoint.""" from typing import Any import pytest import requests from tests.integration.consts import api, vendors EXPECTED_FRENCHKISS_RECORDS = { 'company_brand_id': 2, 'is_distributor': 'N', 'name': 'Frenchkiss Records', 'owner': 'odd', 'status': 'signed', 'vendor_id': 6971, 'uuid': vendors.FRENCHKISS_RECORDS_VENDOR_UUID, } EXPECTED_TVT_RECORDS = { 'company_brand_id': 2, 'is_distributor': 'N', 'name': 'TVT Records', 'owner': 'odd', 'status': 'signed', 'vendor_id': 15063, 'uuid': vendors.TVT_RECORDS_VENDOR_UUID, } EXPECTED_COLUMBIA_RECORDS = { 'company_brand_id': 4, 'is_distributor': 'Y', 'name': 'Columbia Records Group', 'owner': 'SMEAnalytics', 'status': 'signed', 'vendor_id': 34514, 'uuid': vendors.COLUMBIA_RECORDS_VENDOR_UUID, } EXPECTED_LOVESTYLE_RECORDS = { 'company_brand_id': 2, 'is_distributor': 'Y', 'name': 'Lovestyle Records Kft.', 'owner': 'odd', 'status': 'signed', 'vendor_id': 32496, 'uuid': vendors.LOVESTYLE_RECORDS_VENDOR_UUID, } EXPECTED_PITFALL = { 'company_brand_id': 5, 'is_distributor': 'N', 'name': 'Pitfall', 'owner': 'AWAL-Core', 'status': 'deletion', 'vendor_id': 73952, 'uuid': vendors.PITFALL_VENDOR_UUID, } @pytest.mark.parametrize( 'token_fixture, profile_fixture, additional_headers, ' 'input_vendors, expected_vendors, expected_status', [ pytest.param( 'bearer_token_with_vendor_star', 'ows_permissions_test_user_label_profile', {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], [None, None, None], 200, id='ows-permissions-integration-test-with-auth-and-vendor-star', ), pytest.param( 'bearer_token_with_vendor_star', 'ows_account_test_user_settings_profile', {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], [EXPECTED_FRENCHKISS_RECORDS, EXPECTED_TVT_RECORDS, EXPECTED_COLUMBIA_RECORDS], 200, id='ows-account-integration-test-with-auth-and-vendor-star', ), pytest.param( None, 'settings_e2e_user_label_profile', {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], [ EXPECTED_FRENCHKISS_RECORDS, EXPECTED_TVT_RECORDS, EXPECTED_COLUMBIA_RECORDS, ], 200, id='tester-settingstesting.com-without-auth-and-no-vendor-star', ), pytest.param( None, 'settings_e2e_user_audience_profile', {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], [EXPECTED_FRENCHKISS_RECORDS, EXPECTED_TVT_RECORDS, EXPECTED_COLUMBIA_RECORDS], 200, id='tester@settingstesting.com-without-auth-and-vendor-star', ), pytest.param( None, 'ows_permissions_test_user_settings_profile', {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], None, 200, id='ows-permissions-integration-test-without-auth-and-indirect-access', ), pytest.param( None, 'ows_permissions_test_user_settings_profile', {}, [ vendors.LOVESTYLE_RECORDS_VENDOR_UUID, ], [EXPECTED_LOVESTYLE_RECORDS], 200, id='ows-permissions-integration-test-without-auth-and-other-profile', ), pytest.param( 'bearer_token_account360_user', None, {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.PITFALL_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, ], [None, EXPECTED_PITFALL, None], 200, id='ows-account-integration-test-account360profile-pdp', ), pytest.param( None, None, {}, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], None, 401, id='no-headers', ), pytest.param( None, None, { 'Orchard-User-Id': 'oa:2414', }, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], [EXPECTED_FRENCHKISS_RECORDS, EXPECTED_TVT_RECORDS, EXPECTED_COLUMBIA_RECORDS], 200, id='legacy-orchard-user-id-oa', ), pytest.param( None, None, { 'Orchard-User-Id': 'alw:10014201', }, [ vendors.FRENCHKISS_RECORDS_VENDOR_UUID, vendors.TVT_RECORDS_VENDOR_UUID, vendors.COLUMBIA_RECORDS_VENDOR_UUID, ], [EXPECTED_FRENCHKISS_RECORDS, EXPECTED_TVT_RECORDS, EXPECTED_COLUMBIA_RECORDS], 200, id='legacy-orchard-user-id-alw', ), ], ) def test_vendors_dataloader( token_fixture: str, profile_fixture: str, additional_headers: dict[str, str], input_vendors: list[str], expected_vendors: list[dict[str,]], expected_status: int, request: Any, ) -> None: """POST /vendors/dataloader with varying headers and authorization.""" full_headers = {**additional_headers, 'Orchard-Requestor-Service': 'graphql-account-test'} # Add Authorization header if provided in the parameters. bearer_token = request.getfixturevalue(token_fixture) if token_fixture else None if bearer_token: full_headers['Authorization'] = f'Bearer {bearer_token}' # Add profile headers if provided in the parameters. profile = request.getfixturevalue(profile_fixture) if profile_fixture else None if profile: full_headers.update( { 'Orchard-Identity-Id': f'{profile.identity_id}', 'Orchard-Profile-Id': f'{profile.profile_id}', 'Orchard-Profile-Type': f'{profile.profile_type}', } ) response = requests.post( api.VENDORS_DATALOADER, json=input_vendors, headers=full_headers, ) # Assert the response status assert response.status_code == expected_status # If the expected vendors are provided (i.e., not for 401 cases), assert the response content if expected_vendors: response_json = response.json() assert 'vendors' in response_json assert response_json['vendors'] == expected_vendors