from typing import Any, Union import pytest import requests from tests.integration import config VENDOR_UUID = 'fff741c2-6def-4493-bfdf-c2bcb1128e02' ENDPOINT = f'{config.QA_BASE_URL}/vendor/{VENDOR_UUID}/closers' @pytest.mark.parametrize( 'profile_fixture, token_fixture, headers, payload, expected_status, expected_response', [ pytest.param( 'orchard_permissions_test_user_label_profile', None, { 'Orchard-User-Id': 'oa:3188', 'Orchard-Requestor-Service': 'graphql-account-test', }, {'closers': [11, 68]}, 200, {'vendor_id': 6971, 'vendor_uuid': VENDOR_UUID, 'closers': [11, 68]}, id='success', ), pytest.param( None, 'bearer_token_contract_admin_sme', {}, {'closers': [11, 68]}, 200, {'vendor_id': 6971, 'vendor_uuid': VENDOR_UUID, 'closers': [11, 68]}, id='success-with-valid-jwt', ), pytest.param( None, None, { 'Orchard-Requestor-Service': 'graphql-account-test', }, {'closers': [11, 68]}, 403, {'code': 'authorization_error', 'message': 'Forbidden'}, id='forbidden-no-auth', ), pytest.param( None, None, { 'Orchard-User-Id': 'oa:3188', 'Orchard-Requestor-Service': 'graphql-account-test', }, {'closers': []}, 400, { 'code': 'input_validation_error', 'message': {'closers': ['Shorter than minimum length 1.']}, }, id='invalid-payload', ), pytest.param( 'orchard_permissions_test_user_label_profile', None, { 'Orchard-User-Id': 'oa:3188', 'Orchard-Requestor-Service': 'graphql-account-test', }, {}, 400, { 'code': 'input_validation_error', 'message': {'closers': ['Missing data for required field.']}, }, id='missing-closers-field', ), pytest.param( None, None, { 'Orchard-User-Id': 'invalid_3188', }, {'closers': [11, 68]}, 401, { 'code': 'authorization_error', 'message': 'Unauthorized user with user_id = invalid_3188', }, id='unauthorized-invalid-user-id', ), ], ) def test_update_vendor_closers( profile_fixture: str, token_fixture: str, headers: dict[str, str], payload: dict[str, Any], expected_status: int, expected_response: Union[dict[str, Any], dict[str, dict[str, list]]], request: Any, ) -> None: """PUT /vendor/{VENDOR_UUID}/closers updates closers or access denied.""" full_headers = { 'Content-Type': 'application/json', **headers, } if token_fixture: token = request.getfixturevalue(token_fixture) full_headers['Authorization'] = f'Bearer {token}' if profile_fixture: profile = request.getfixturevalue(profile_fixture) full_headers.update( { 'Orchard-Identity-Id': profile.identity_id, 'Orchard-Profile-Id': str(profile.profile_id), 'Orchard-Profile-Type': profile.profile_type, } ) response = requests.put(ENDPOINT, headers=full_headers, json=payload) assert response.status_code == expected_status if expected_status == 200: assert response.json() == expected_response