"""Functional tests for tax withholding override.""" from unittest.mock import ANY from payee.config import Config def test_tax_withholding_override_dataloader( fresh_db, account_fixtures, payoneer_program_fixtures, account_payee_fixtures, tax_withholding_override_fixtures, fixture_client, ): """Test tax withholding override dataloader.""" account_payee_ids = [1, 2] res = fixture_client.post( '/account-payee/withholding-tax-override/dataloader', json=account_payee_ids ) assert res.status_code == 200 assert res.json == { 'items': [ { 'data': { 'tax_withholding_override_id': 1, 'account_payee_id': 1, 'rate_override': '15.25', 'certificate_expiration_date': None, 'message': 'test override message', 'created_by': ANY, 'created_at': ANY, 'last_modified_by': ANY, 'last_modified': ANY, } }, {'data': None}, ] } def test_tax_withholding_override_dataloader_invalid_input( fresh_db, fixture_client, ): """Test tax withholding override dataloader with invalid input.""" res = fixture_client.post( '/account-payee/withholding-tax-override/dataloader', json=[1, -5, 3] ) assert res.status_code == 400 def test_create_tax_withholding_override_success( fresh_db, account_fixtures, payoneer_program_fixtures, account_payee_fixtures, fixture_client, mock_jwt_auth, ): """Test successful creation of tax withholding override.""" mock_jwt_auth.identity = Config.TAX_FORM_SERVICE_IDENTITIES[0] account_payee_id = 2 payload = { 'rate_override': 25.50, 'certificate_expiration_date': '2025-12-31', 'message': 'new message', } res = fixture_client.post( f'/account-payee/{account_payee_id}/withholding-tax-override', headers=mock_jwt_auth.headers, json=payload, ) assert res.status_code == 200 response_data = res.json assert response_data['account_payee_id'] == account_payee_id assert response_data['rate_override'] == '25.50' assert response_data['certificate_expiration_date'] == '2025-12-31' assert response_data['message'] == 'new message' assert 'tax_withholding_override_id' in response_data assert response_data['created_by'] == ANY assert response_data['created_at'] == ANY def test_update_tax_withholding_override_success( fresh_db, account_fixtures, payoneer_program_fixtures, account_payee_fixtures, tax_withholding_override_fixtures, fixture_client, mock_jwt_auth, ): mock_jwt_auth.identity = Config.TAX_FORM_SERVICE_IDENTITIES[0] account_payee_id = 1 payload = {'rate_override': 20.00, 'message': 'update message'} res = fixture_client.post( f'/account-payee/{account_payee_id}/withholding-tax-override', headers=mock_jwt_auth.headers, json=payload, ) assert res.status_code == 200 response_data = res.json assert response_data['account_payee_id'] == account_payee_id assert response_data['rate_override'] == '20.00' assert response_data['message'] == 'update message' assert 'tax_withholding_override_id' in response_data assert response_data['last_modified'] == ANY assert response_data['last_modified_by'] == ANY def test_create_tax_withholding_override_account_payee_not_found( fresh_db, fixture_client, mock_jwt_auth, ): mock_jwt_auth.identity = Config.TAX_FORM_SERVICE_IDENTITIES[0] non_existent_account_payee_id = 9999 payload = {'rate_override': 15.00, 'message': 'Test override'} res = fixture_client.post( f'/account-payee/{non_existent_account_payee_id}/withholding-tax-override', headers=mock_jwt_auth.headers, json=payload, ) assert res.status_code == 400 assert res.json['code'] == 'error' assert 'message' in res.json assert 'error' in res.json['message'] assert 'Account payee not found' in res.json['message']['error'] assert str(non_existent_account_payee_id) in res.json['message']['error']