"""Integration tests for contract term conditions endpoints.""" from decimal import Decimal import pytest import requests from tests.integration import conftest from tests.integration.consts import api, constants from tests.integration.utils import generic_helper @pytest.mark.jira('ACC-2991', 'ACC-3134') def test_post_get_delete_contract_term_conditions( basic_headers: dict[str, str] ) -> None: """POST, GET and DELETE /contract_terms/conditions endpoint.""" account_fixture = generic_helper.create_account() ows_abacus_contract_client = conftest.ows_abacus_contract_api_client(basic_headers) contract_name = f'orcd_autotest_{generic_helper.generate_random_string(16)}' contract_body = ows_abacus_contract_client.generate_contract_body( contract_name, account_fixture['account_id'], 'distribution' ) response_post = ows_abacus_contract_client.post_contract(contract_body) assert response_post.status_code == 201 contract_id = response_post.json()['contract_id'] term = { 'term_type': 'label', 'attachments': ['1010', '2010'], 'is_base_term': True } response_post_term = ows_abacus_contract_client.post_contract_term( contract_id, term) assert response_post_term.status_code == 201 contract_term_id = response_post_term.json()['contract_term_id'] contract_term_conditions_body = [ ows_abacus_contract_client.generate_contract_term_conditions( countries=['USA'] ), ows_abacus_contract_client.generate_contract_term_conditions( countries=['UA'], priority=2)] response_post_term_conditions = ows_abacus_contract_client\ .post_contract_term_conditions( contract_term_id, contract_term_conditions_body) assert response_post_term_conditions.status_code == 201 contract_term_condition_ids = [ d['contract_term_condition_id'] for d in response_post_term_conditions.json() ] response_get_term_conditions = ows_abacus_contract_client \ .get_contract_term_conditions(contract_term_id) assert response_get_term_conditions.status_code == 200 expected_item = contract_term_conditions_body for i in range(len(expected_item)): expected_item[i].update(contract_term_id=contract_term_id) expected_item[i].update( contract_term_condition_id=contract_term_condition_ids[i] ) expected_item[i].update( commission=str(100 - Decimal(expected_item[i]['term_rate'])) ) expected_item[i].update(contract_term_condition_name=None) assert response_get_term_conditions.json() == expected_item response_delete_term_conditions = ows_abacus_contract_client. \ soft_delete_contract_term_condition([contract_term_condition_ids[0]]) assert response_delete_term_conditions.status_code == 200 assert len(ows_abacus_contract_client.get_contract_term_conditions( contract_term_id).json()) == 1 @pytest.mark.jira('ACC-2990') def test_put_contract_term_conditions(basic_headers: dict[str, str]) -> None: """PUT /contract_terms/conditions endpoint.""" account_fixture = generic_helper.create_account() ows_abacus_contract_client = generic_helper.ows_abacus_contract_api_client( basic_headers ) contract_name = f'orcd_autotest_{generic_helper.generate_random_string(16)}' contract_body = ows_abacus_contract_client.generate_contract_body( contract_name, account_fixture['account_id'], 'distribution' ) response_post = ows_abacus_contract_client.post_contract(contract_body) assert response_post.status_code == 201 contract_id = response_post.json()['contract_id'] term = { 'term_type': 'label', 'attachments': ['1010', '2010'], 'is_base_term': True } response_post_term = ows_abacus_contract_client.post_contract_term( contract_id, term) assert response_post_term.status_code == 201 contract_term_id = response_post_term.json()['contract_term_id'] contract_term_conditions_body = ows_abacus_contract_client \ .generate_contract_term_conditions() response_post_term_conditions = ows_abacus_contract_client \ .post_contract_term_conditions( contract_term_id, [contract_term_conditions_body]) assert response_post_term_conditions.status_code == 201 contract_term_condition_id = \ response_post_term_conditions.json()[0]['contract_term_condition_id'] update_term_conditions_body = [ ows_abacus_contract_client.generate_contract_term_conditions(countries=['UA']) ] update_term_conditions_body[0].update( contract_term_condition_id=contract_term_condition_id) response_put_term_conditions = ows_abacus_contract_client \ .put_contract_term_conditions(contract_term_id, update_term_conditions_body) assert response_put_term_conditions.status_code == 200 @pytest.mark.jira('PLATFORM-4472') def test_get_contract_term_conditions_authorization( admin_headers: dict[str, str], unauthorized_headers: dict[str, str], auth_headers: dict[str, str], ) -> None: """GET /contract_terms/conditions endpoint.""" contract_id, _, _ = generic_helper.create_account_and_contract( account_id=constants.TEST_ACCOUNT_ID, ) ows_abacus_contract_client = generic_helper.ows_abacus_contract_api_client( admin_headers ) term = { 'term_type': 'label', 'attachments': ['1010', '2010'], 'is_base_term': True } response_post_term = ows_abacus_contract_client.post_contract_term( contract_id, term) assert response_post_term.status_code == 201 contract_term_id = response_post_term.json()['contract_term_id'] contract_term_conditions_body = ows_abacus_contract_client \ .generate_contract_term_conditions() response_post_term_conditions = ows_abacus_contract_client \ .post_contract_term_conditions( contract_term_id, [contract_term_conditions_body]) assert response_post_term_conditions.status_code == 201 res = requests.get( f'{api.QA_BASE_URL}/contract-term/{contract_term_id}/conditions', headers=unauthorized_headers ) assert res.status_code == 403 assert res.json()['message'] == 'User is forbidden' res = requests.get( f'{api.QA_BASE_URL}/contract-term/{contract_term_id}/conditions', headers=auth_headers ) assert res.status_code == 200