"""Test Get Pending Payments by Account Id.""" from typing import Any import pytest from tests.integration.conftest import ( create_account, create_contract_fixture, create_payment_group_payment, generate_abacus_states, ows_abacus_state_api_client, 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 pending payments', ), pytest.param( 'unauthorized_headers', 403, id='unauthorized user cannot view pending 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_pending_payments_by_account_id( basic_headers: dict[str, str], header_fixture_name: str, expected_status_code: int, mock_reference_payoneer_program_integration: Any, request: pytest.FixtureRequest, ) -> None: """GET /payment-group-payment-account/pending-payment/{account_id}/ .""" # Fixture the database/services account_id = 7123 contract_id = 123 ows_payment_client_for_fixtures = ows_payment_api_client(basic_headers) ows_abacus_state_client = ows_abacus_state_api_client(basic_headers) create_account(basic_headers, account_id) create_contract_fixture(account_id, contract_id) payment_group_payment_id = create_payment_group_payment(basic_headers) payment_group_payment_id_2 = create_payment_group_payment(basic_headers) abacus_states = ows_abacus_state_client.post_states( generate_abacus_states(payment_group_payment_id) ) for state in abacus_states.json(): if state['action_name'] in ('generate_payments', 'generate_export'): new_status = 'complete' else: new_status = 'init' ows_abacus_state_client.update_status(state['abacus_state_id'], new_status) post_body = { 'currency_code': 'CAD', 'current_balance': '1000.00', 'last_payment': '500.00', 'account_id': account_id, 'balance_after_tax': '400.00', 'payoneer_program_id': 100158970, 'contracts_payable': [ { 'contract_id': contract_id, 'current_balance': '1000.00', 'currency_code': 'CAD', } ], } response_group_payment_accounts_bulk = ( ows_payment_client_for_fixtures.post_payment_group_payment_accounts_bulk( payment_group_payment_id, post_body ) ) assert response_group_payment_accounts_bulk.status_code == 201 prior_payment_group_payment_id = payment_group_payment_id post_body['prior_payment_group_payment_id'] = prior_payment_group_payment_id response_group_payment_accounts_bulk = ( ows_payment_client_for_fixtures.post_payment_group_payment_accounts_bulk( payment_group_payment_id_2, post_body ) ) assert response_group_payment_accounts_bulk.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) response_get = ows_payment_client.get_pending_payments_by_account_id(account_id) assert response_get.status_code == expected_status_code response_json = response_get.json() if expected_status_code == 200: assert response_json['account_id'] == account_id assert response_json['current_balance'] == post_body['current_balance'] assert response_json['currency_code'] == post_body['currency_code'] assert response_json['last_payment'] == post_body['last_payment'] assert response_json['payment_group_payment_id'] == payment_group_payment_id else: assert response_json == { 'code': 'authorization_error', 'message': 'Unauthorized', }