"""Test DELETE /v2/vendors/.""" import time from typing import Any import pytest import requests from tests.integration import config @pytest.fixture() def theorchard_vendor_attrs() -> dict[str, Any]: return { 'name': f'ows-account integration-test delete orchard {time.time()}', 'owner': 'odd', 'company_brand': 'theorchard', 'service_tier_uuid': '5f2bd4fc-df94-4f35-97d3-ef23f8573279', 'payment_currency': 'USD', } @pytest.fixture() def awal_vendor_attrs() -> dict[str, Any]: return { 'name': f'ows-account integration-test delete awal {time.time()}', 'owner': 'odd', 'company_brand': 'awal', 'service_tier_uuid': '5f2bd4fc-df94-4f35-97d3-ef23f8573279', 'payment_currency': 'USD', } @pytest.mark.parametrize( 'create_token_fixture,delete_token_fixture,vendor_attrs_fixture,expected_status', [ pytest.param( 'bearer_token_account_admin_theorchard', 'bearer_token_account_admin_theorchard', 'theorchard_vendor_attrs', 200, id='theorchard account admin can delete a theorchard vendor', ), pytest.param( 'bearer_token_account_admin_theorchard', 'bearer_token_contract_admin_theorchard', 'theorchard_vendor_attrs', 403, id='theorchard contract admin cannot delete a theorchard vendor', ), pytest.param( 'bearer_token_contract_admin_awal', 'bearer_token_account_admin_theorchard', 'awal_vendor_attrs', 403, id='theorchard account admin cannot delete an awal vendor', ), pytest.param( 'bearer_token_contract_admin_awal', 'bearer_token_contract_admin_awal', 'awal_vendor_attrs', 403, id='awal contract admin cannot delete awal vendor', ), ], ) def test_v2_delete_vendor( request: pytest.FixtureRequest, create_token_fixture: str, delete_token_fixture: str, vendor_attrs_fixture: str, expected_status: int, ) -> None: """Test DELETE /v2/vendors/ authorization scenarios.""" create_token = request.getfixturevalue(create_token_fixture) delete_token = request.getfixturevalue(delete_token_fixture) vendor_attrs = request.getfixturevalue(vendor_attrs_fixture) response = requests.post( f'{config.QA_BASE_URL}/v2/vendors', json=vendor_attrs, headers={'Authorization': f'Bearer {create_token}'}, ) assert response.status_code == 200, response.text vendor_uuid = response.json()['vendor_uuid'] response = requests.delete( f'{config.QA_BASE_URL}/v2/vendors/{vendor_uuid}', headers={'Authorization': f'Bearer {delete_token}'}, ) assert response.status_code == expected_status, response.text if expected_status == 200: assert response.json()['vendor_uuid'] == vendor_uuid else: assert response.json() == {'code': 'authorization_error', 'message': 'Forbidden'} def test_v2_delete_vendor_already_deleted( bearer_token_account_admin_theorchard: str, theorchard_vendor_attrs: dict[str, Any], ) -> None: """DELETE /v2/vendors/ is idempotent — repeat call returns 200.""" create_response = requests.post( f'{config.QA_BASE_URL}/v2/vendors', json=theorchard_vendor_attrs, headers={'Authorization': f'Bearer {bearer_token_account_admin_theorchard}'}, ) assert create_response.status_code == 200, create_response.text vendor_uuid = create_response.json()['vendor_uuid'] first = requests.delete( f'{config.QA_BASE_URL}/v2/vendors/{vendor_uuid}', headers={'Authorization': f'Bearer {bearer_token_account_admin_theorchard}'}, ) assert first.status_code == 200, first.text second = requests.delete( f'{config.QA_BASE_URL}/v2/vendors/{vendor_uuid}', headers={'Authorization': f'Bearer {bearer_token_account_admin_theorchard}'}, ) assert second.status_code == 200, second.text assert second.json()['vendor_uuid'] == vendor_uuid