from typing import Any import pytest import requests from tests.integration import config EXPECTED_VALID_RESPONSE = { 'vendors': [ {'uuid': '87682992-bff2-40ff-aa75-18eb6214679e', 'first_statement_period': '1'}, {'uuid': '6097ad5a-2186-4dbe-8286-82ce933d3538', 'first_statement_period': '1'}, ] } EXPECTED_INVALID_RESPONSE = { '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', {}, [ '87682992-bff2-40ff-aa75-18eb6214679e', '6097ad5a-2186-4dbe-8286-82ce933d3538', ], 200, EXPECTED_VALID_RESPONSE, id='success', ), pytest.param( 'orchard_permissions_test_user_label_profile', {}, ['87682992-bff2-40ff-aa75-18eb6214679e', '6097ad5a-2186-4dbe-8286-82ce933d353a'], 200, { 'vendors': [ {'first_statement_period': '1', 'uuid': '87682992-bff2-40ff-aa75-18eb6214679e'}, None, ] }, id='partial-success-with-null-first_statement_period', ), pytest.param( None, {}, [ '87682992-bff2-40ff-aa75-18eb6214679e', '6097ad5a-2186-4dbe-8286-82ce933d3538', ], 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_RESPONSE, id='invalid_uuid', ), ], ) def test_vendors_first_statement_period_dataloader_endpoint( profile_fixture: str, additional_headers: dict[str, str], vendor_uuids: list[str], expected_status: int, expected_response: list[dict[str, str]], request: Any, ) -> None: """POST /vendors/first_statement_period/dataloader.""" 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}', } ) response = requests.post( f'{config.QA_BASE_URL}/vendors/first_statement_period/dataloader', json={'vendor_uuids': vendor_uuids}, headers=full_headers, ) assert response.status_code == expected_status if expected_status == 200: assert response.json() == expected_response