"""Test Get Worksheet Payment Contract Advances .""" from typing import Any import pytest from tests.integration.conftest import ( create_account, create_contract_advance_fixture, create_contract_fixture, ows_payment_api_client, ) @pytest.mark.jira('ACC-3942') @pytest.mark.parametrize( 'header_fixture_name, expected_status_code', [ pytest.param('basic_headers', 200, id='original test case'), pytest.param('abacus_headers', 200, id='Abacus users are authorized'), pytest.param('a360_headers', 403, id='A360 Profile headers are not authorized'), pytest.param( 'unauthorized_headers', 403, id='unauthorized user cannot view contract advance payments', ), pytest.param( 'no_authorization_headers', 403, id='jwt or profiles are required' ), pytest.param( 'some_other_app_profile_headers', 403, id='Content reviewer is not authorized', ), pytest.param( 'minimum_a360_read_only_user_headers', 200, id='A360 Read Only user with only a JWT is authorized', ), ], ) def test_get_payments_advances( header_fixture_name: str, expected_status_code: int, basic_headers: dict[str, str], drop_fks: Any, mock_exchange_rate: Any, mock_abacus_state: Any, request: pytest.FixtureRequest, ) -> None: """GET /payments/advances/ .""" account_id = 123123 contract_id = 123 contract_advance_id = 1 create_account(basic_headers, account_id) create_contract_fixture(account_id, contract_id) create_contract_advance_fixture() ows_payment_client = ows_payment_api_client(basic_headers) post_body = { 'exchange_rate_id': 1, 'statement_period_id': 1, 'payment_name': 'integration_tests', 'amount': '100.00', 'currency_code': 'USD', 'payee_currency_code': 'GBP', 'withholding_tax_amount': '-10.00', 'vat_amount': '20.00', 'amount_after_withholding_and_vat': '110.00', 'us_source_income_rate': '90.00', 'is_internal': True, } res_post = ows_payment_client.post_payment_contract_advance( contract_advance_id, post_body ) assert res_post.status_code == 201 # Now actually test the endpoint with different headers headers = request.getfixturevalue(header_fixture_name) ows_payment_client = ows_payment_api_client(headers) res_get = ows_payment_client.get_payments_advances() assert res_get.status_code == expected_status_code if expected_status_code == 200: assert res_get.json()['items'][0]['payment_name'] == post_body['payment_name'] else: assert res_get.json() == { 'code': 'authorization_error', 'message': 'Unauthorized', }