"""Integration tests for POST /vendors/closers/dataloader endpoint.""" import json from typing import Any import pytest import requests from tests.integration import config EXPECTED_VENDOR_CLOSERS = [ {'uuid': 'fff741c2-6def-4493-bfdf-c2bcb1128e02', 'closers': [11, 68]}, {'uuid': 'ec1fd7e2-9c95-4e09-a037-e924e0244283', 'closers': [1525]}, ] EXPECTED_VENDOR_CLOSERS_NULL = [ {'uuid': 'fff741c2-6def-4493-bfdf-c2bcb1128e02', 'closers': [11, 68]}, None, ] EXPECTED_INVALID_UUID_VENDOR_CLOSERS = { 'code': 'input_validation_error', 'message': {'vendor_uuids': {'0': ['Not a valid UUID.'], '1': ['Not a valid UUID.']}}, } @pytest.mark.parametrize( 'profile_fixture, additional_headers, vendor_uuids, expected_status, expected_response', [ pytest.param( 'orchard_permissions_test_user_label_profile', {}, [ 'fff741c2-6def-4493-bfdf-c2bcb1128e02', 'ec1fd7e2-9c95-4e09-a037-e924e0244283', ], 200, EXPECTED_VENDOR_CLOSERS, id='success', ), pytest.param( 'orchard_permissions_test_user_label_profile', {}, ['fff741c2-6def-4493-bfdf-c2bcb1128e02', '6097ad5a-2186-4dbe-8286-82ce933d353a'], 200, EXPECTED_VENDOR_CLOSERS_NULL, id='partial-success-with-null-closers', ), pytest.param( None, {}, [ 'fff741c2-6def-4493-bfdf-c2bcb1128e02', 'ec1fd7e2-9c95-4e09-a037-e924e0244283', ], 403, None, id='forbidden-error', ), pytest.param( 'orchard_permissions_test_user_label_profile', {}, [ 'abc-bff2-40ff-aa75-18eb6214679e', 'abc-2186-4dbe-8286-82ce933d3538', ], 400, EXPECTED_INVALID_UUID_VENDOR_CLOSERS, id='invalid_uuid', ), ], ) def test_get_vendor_closers( profile_fixture: str, additional_headers: dict[str, str], vendor_uuids: list[str], expected_status: int, expected_response: list[dict[str, Any]], request: Any, ) -> None: """POST /vendors/closers/dataloader returns closers or access denied.""" full_headers = { **additional_headers, 'Content-Type': 'application/json', 'Orchard-Requestor-Service': 'graphql-account-test', } # 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}', } ) url = f'{config.QA_BASE_URL}/vendors/closers/dataloader' payload = {'vendor_uuids': vendor_uuids} response = requests.post(url, headers=full_headers, data=json.dumps(payload)) assert response.status_code == expected_status if expected_status == 200: assert response.json() == expected_response