"""Integration tests for contract mechanical deductions.""" import pytest import requests from tests.integration.conftest import ( ows_abacus_contract_api_client, ) from tests.integration.consts.api import QA_BASE_URL from tests.integration.consts.constants import TEST_ACCOUNT_ID from tests.integration.utils.generic_helper import ( create_account_and_contract, ) def test_post_get_put_delete_deductions(basic_headers): """POST /contract//contract-mechanical-deduction/.""" ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) contract_id, _, _ = create_account_and_contract() post_body = { 'admin_fee': '20.20', 'admin_type': 'business', 'mechanical_type': ['digital', 'physical'], 'territory': 'USA' } res_post = ows_abacus_contract_client.post_mechanical_deduction( contract_id, post_body ) assert res_post.status_code == 201 assert res_post.json()['admin_fee'] == post_body['admin_fee'] assert res_post.json()['admin_type'] == post_body['admin_type'] assert set(res_post.json()['mechanical_type']) == set(post_body['mechanical_type']) assert res_post.json()['territory'] == post_body['territory'] deduction_id = res_post.json()['contract_mechanical_deduction_id'] res_get = ows_abacus_contract_client.get_mechanical_deduction_by_id( deduction_id ) assert res_get.status_code == 200 assert res_get.json()['admin_fee'] == post_body['admin_fee'] assert res_get.json()['admin_type'] == post_body['admin_type'] assert set(res_get.json()['mechanical_type']) == set(post_body['mechanical_type']) assert res_get.json()['territory'] == post_body['territory'] res_get = ows_abacus_contract_client.get_mechanical_deductions_by_contract_id( contract_id ) assert res_get.status_code == 200 item = res_get.json()[0] assert item['admin_fee'] == post_body['admin_fee'] assert item['admin_type'] == post_body['admin_type'] assert set(item['mechanical_type']) == set(post_body['mechanical_type']) assert item['territory'] == post_body['territory'] put_body = {'admin_fee': '13.30'} res_put = ows_abacus_contract_client.put_mechanical_deduction( deduction_id, put_body ) assert res_put.status_code == 200 res_get = ows_abacus_contract_client.get_mechanical_deduction_by_id( deduction_id ) assert res_get.status_code == 200 assert res_get.json()['admin_fee'] == put_body['admin_fee'] res_delete = ows_abacus_contract_client.delete_mechanical_deduction(deduction_id) assert res_delete.status_code == 204 res_get = ows_abacus_contract_client.get_mechanical_deduction_by_id( deduction_id ) assert res_get.status_code == 404 def test_post_deductions_worldwide(basic_headers): """POST /contract//contract-mechanical-deductions/worldwide/ .""" ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) contract_id, _, _ = create_account_and_contract() post_body = { 'admin_fee': '20.20', 'admin_type': 'business', 'mechanical_type': ['digital'] } res_post = ows_abacus_contract_client.post_mechanical_deductions_worldwide( contract_id, post_body ) assert res_post.status_code == 201 assert len(res_post.json()) == 3 res_get = ows_abacus_contract_client.get_mechanical_deductions_by_contract_id( contract_id ) assert res_get.status_code == 200 assert len(res_get.json()) == 3 expected_records = [ {'mechanical_type': ['digital'], 'territory': 'USA'}, {'mechanical_type': ['physical'], 'territory': 'CAN'}, {'mechanical_type': ['physical'], 'territory': 'ROW'} ] for expected in expected_records: assert any( all(item in actual.items() for item in expected.items()) for actual in res_get.json() ) @pytest.mark.jira('PLATFORM-4340') def test_get_deductions_by_contract_id( auth_headers: dict[str, str], admin_headers: dict[str, str], ) -> None: """GET /contract//contract-mechanical-deduction/.""" # create an account, a contract, and deductions using the admin headers. contract_id, _, _ = create_account_and_contract(account_id=TEST_ACCOUNT_ID) post_body = { 'admin_fee': '20.20', 'admin_type': 'business', 'mechanical_type': ['digital', 'physical'], 'territory': 'USA' } endpoint = '{}/contract/{}/contract-mechanical-deduction/'.format( QA_BASE_URL, contract_id) requests.post(endpoint, headers=admin_headers, json=post_body) # request the deductions using the auth headers. endpoint = '{}/contract/{}/contract-mechanical-deductions'.format( QA_BASE_URL, contract_id) result = requests.get(endpoint, headers=auth_headers) assert result.status_code == 200 @pytest.mark.jira('PLATFORM-4340') def test_get_deductions_by_contract_id_unauthorized( unauthorized_headers: dict[str, str], admin_headers: dict[str, str], ) -> None: """GET /contract//contract-mechanical-deduction/ unauthorized.""" # create an account, a contract, and deductions using the admin headers. contract_id, _, _ = create_account_and_contract(account_id=TEST_ACCOUNT_ID) post_body = { 'admin_fee': '20.20', 'admin_type': 'business', 'mechanical_type': ['digital', 'physical'], 'territory': 'USA' } endpoint = '{}/contract/{}/contract-mechanical-deduction/'.format( QA_BASE_URL, contract_id) requests.post(endpoint, headers=admin_headers, json=post_body) # request the deductions using the auth headers. endpoint = '{}/contract/{}/contract-mechanical-deductions'.format( QA_BASE_URL, contract_id) result = requests.get(endpoint, headers=unauthorized_headers) assert result.status_code == 403 assert result.json() == { 'code': 'forbidden', 'message': 'User is forbidden' }