from typing import Any import pytest import requests from tests.integration import config EXPECTED_VALID_RESPONSE = { 'vendors': [ { 'vendor_id': 7875, 'vendor_uuid': 'a94221c5-de13-43fc-b87a-b8e2fe133f63', 'relationship_notes': 'This is a test note', }, { 'vendor_id': 6481, 'vendor_uuid': '0640d861-7fbe-4034-aebb-c6083edb850e', 'relationship_notes': 'this is a note', }, ] } 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, vendor_uuids, expected_status, expected_response', [ pytest.param( 'orchard_permissions_test_user_label_profile', [ 'a94221c5-de13-43fc-b87a-b8e2fe133f63', '0640d861-7fbe-4034-aebb-c6083edb850e', ], 200, EXPECTED_VALID_RESPONSE, id='success', ), pytest.param( 'orchard_permissions_test_user_label_profile', [ 'a94221c5-de13-43fc-b87a-b8e2fe133f63', '11111111-1111-1111-1111-111111111111', ], 200, { 'vendors': [ { 'vendor_id': 7875, 'vendor_uuid': 'a94221c5-de13-43fc-b87a-b8e2fe133f63', 'relationship_notes': 'This is a test note', }, None, ] }, id='partial-success-with-null', ), pytest.param( None, [ 'a94221c5-de13-43fc-b87a-b8e2fe133f63', '0640d861-7fbe-4034-aebb-c6083edb850e', ], 403, None, id='forbidden-error', ), pytest.param( 'orchard_permissions_test_user_label_profile', [ 'abc-123', 'abc-456', ], 400, EXPECTED_INVALID_RESPONSE, id='invalid-uuid', ), ], ) def test_vendors_relationship_notes_dataloader_endpoint( profile_fixture: str, vendor_uuids: list[str], expected_status: int, expected_response: dict[str, Any], request: Any, ) -> None: """POST /vendors/relationship_notes/dataloader.""" full_headers = { 'Content-Type': 'application/json', 'Orchard-Requestor-Service': 'graphql-account-test', } 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/relationship_notes/dataloader', json={'vendor_uuids': vendor_uuids}, headers=full_headers, ) assert response.status_code == expected_status if expected_status == 200: assert response.json() == expected_response