"""Integration tests for contract lifecycle schedule endpoints.""" import pytest from tests.integration.conftest import ows_abacus_contract_api_client from tests.integration.consts.constants import TEST_ACCOUNT_ID from tests.integration.utils import generic_helper @pytest.mark.jira('ACC-7165') def test_contract_lifecycle_schedule( basic_headers, create_account_fixture, create_contract_fixture, create_contract_lifecycle_schedule_detail_fixture ): """Contract lifecycle schedule endpoints.""" ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) schedule_details_ids = [1] contract_id = 1 post_body = [ { 'renewal_type': 'continuously_active', 'termination_notice_detail_interval': 90, 'termination_notice_detail_type': 'day' } ] res_post = ows_abacus_contract_client.post_contract_lifecycle_schedules( contract_id, post_body ) assert res_post.status_code == 201 res_get = \ ows_abacus_contract_client.post_contract_lifecycle_schedule_dataloader( schedule_details_ids ) assert res_get.status_code == 200 assert len(res_get.json()) == 1 res_get = ows_abacus_contract_client.get_contract_lifecycle_schedule_by_id( schedule_details_ids[0] ) assert res_get.status_code == 200 assert res_get.json()['contract_id'] == contract_id assert res_get.json()['contract_lifecycle_schedule_id'] == schedule_details_ids[0] assert 'termination_notice_detail_id' in res_get.json() assert 'renewal_offset_detail_id' in res_get.json() assert 'collection_period_detail_id' in res_get.json() assert 'renewal_type' in res_get.json() assert 'schedule_end' in res_get.json() res_get = ows_abacus_contract_client.get_contract_lifecycle_schedules_by_contract_id( # noqa contract_id ) assert res_get.status_code == 200 item = res_get.json()[0] assert item['contract_id'] == contract_id assert item['contract_lifecycle_schedule_id'] == schedule_details_ids[0] assert 'termination_notice_detail_id' in item assert 'renewal_offset_detail_id' in item assert 'collection_period_detail_id' in item assert 'renewal_type' in item assert 'schedule_end' in item @pytest.mark.jira('ACC-7339') def test_put_contract_lifecycle_schedule( basic_headers, create_account_fixture, create_contract_fixture, create_contract_lifecycle_schedule_detail_fixture ): """Contract lifecycle schedule endpoints.""" ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) contract_id = 1 post_body = [ { 'renewal_type': 'continuously_active', 'termination_notice_detail_interval': 90, 'termination_notice_detail_type': 'day' } ] res_post = ows_abacus_contract_client.post_contract_lifecycle_schedules( contract_id, post_body ) assert res_post.status_code == 201 contract_lifecycle_schedule_id = ( res_post.json() )[0]['contract_lifecycle_schedule_id'] res_get = ows_abacus_contract_client.get_contract_lifecycle_schedule_by_id( contract_lifecycle_schedule_id ) assert res_get.status_code == 200 assert res_get.json()['renewal_type'] == post_body[0]['renewal_type'] post_body = { 'lifecycle_term_start': '2024-07-03' } res_post = ows_abacus_contract_client.post_contract_lifecycle( contract_id, contract_lifecycle_schedule_id, post_body ) assert res_post.status_code == 201 put_body = [ { 'renewal_type': 'renew_periodically', 'termination_notice_detail_interval': 90, 'termination_notice_detail_type': 'day', 'renewal_offset_detail_interval': 1, 'renewal_offset_detail_type': 'month', 'contract_lifecycle_schedule_id': contract_lifecycle_schedule_id }, { 'renewal_type': 'renew_periodically', 'termination_notice_detail_interval': 90, 'termination_notice_detail_type': 'day', 'renewal_offset_detail_interval': 1, 'renewal_offset_detail_type': 'month', 'contract_lifecycle_schedule_id': contract_lifecycle_schedule_id } ] res_put = ows_abacus_contract_client.put_contract_lifecycle_schedules( contract_id, put_body ) assert res_put.status_code == 200 contract_lifecycle_schedule_id = res_put.json()[0]['contract_lifecycle_schedule_id'] res_get = ows_abacus_contract_client.get_contract_lifecycle_schedule_by_id( contract_lifecycle_schedule_id ) assert res_get.status_code == 200 assert res_get.json()['renewal_type'] == put_body[0]['renewal_type'] @pytest.mark.jira('ACC-7339') def test_post_contract_with_lifecycle_schedules_and_contract_lifecycle( basic_headers, create_account_fixture ): """POST /contract/contract-lifecycle-schedule/contract-lifecycle.""" ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) post_body = { 'contract': { 'account_id': 1, 'term_start': '2024-06-30', 'term_end': '2024-08-30', 'contract_type': 'distribution', 'execution_date': None, 'reference_signing_entity_id': 1, 'summary_note': 'This is for the test', 'general_note': 'This is for the test (general_note)', 'contract_name': 'Test Contract', 'oa_contract_id': 1 }, 'contract_lifecycle_schedules': [{ 'renewal_type': 'continuously_active', 'schedule_end': None, 'termination_notice_detail_interval': 1, 'termination_notice_detail_type': 'month', 'renewal_offset_detail_interval': None, 'renewal_offset_detail_type': None, 'collection_period_detail_interval': None, 'collection_period_detail_type': None, }], 'contract_lifecycle': { 'lifecycle_term_start': '2024-07-30' } } res_post = ows_abacus_contract_client.post_contract_with_lifecycle_schedules_and_contract_lifecycle( # noqa post_body ) assert res_post.status_code == 201 assert 'contract_id' in res_post.json() contract_id = res_post.json()['contract_id'] assert res_post.json()['summary_note'] == post_body['contract']['summary_note'] res_get = ows_abacus_contract_client.get_contract(contract_id) assert res_get.status_code == 200 assert res_get.json()['summary_note'] == post_body['contract']['summary_note'] res_get = ows_abacus_contract_client.get_contract_lifecycle_by_contract_id( contract_id ) assert res_get.status_code == 200 assert res_get.json()['lifecycle_term_start'] == \ post_body['contract_lifecycle']['lifecycle_term_start'] res_get = ows_abacus_contract_client.get_contract_lifecycle_schedules_by_contract_id( # noqa contract_id ) assert res_get.status_code == 200 assert res_get.json()[0]['renewal_type'] == \ post_body['contract_lifecycle_schedules'][0]['renewal_type'] @pytest.mark.jira('PLATFORM-4459') def test_get_contract_lifecycle_schedule_by_id( basic_headers, auth_headers ): """Test getting contract lifecycle schedule by contract ID.""" contract_id, _, _ = generic_helper.create_account_and_contract( account_id=TEST_ACCOUNT_ID) ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) post_body = [ { 'renewal_type': 'continuously_active', 'termination_notice_detail_interval': 90, 'termination_notice_detail_type': 'day' } ] res_post = ows_abacus_contract_client.post_contract_lifecycle_schedules( contract_id, post_body ) assert res_post.status_code == 201 contract_lifecycle_schedule_id = \ res_post.json()[0]['contract_lifecycle_schedule_id'] ows_abacus_contract_client = ows_abacus_contract_api_client(auth_headers) res_get = \ ows_abacus_contract_client.get_contract_lifecycle_schedules_by_contract_id( contract_id ) assert res_get.status_code == 200 assert 'contract_lifecycle_schedule_id' in res_get.json()[0] assert res_get.json()[0]['contract_lifecycle_schedule_id'] == \ contract_lifecycle_schedule_id @pytest.mark.jira('PLATFORM-4459') def test_post_contract_lifecycle_schedule_dataloader( basic_headers, auth_headers ): """Test POST contract lifecycle schedule dataloader.""" contract_id, _, _ = generic_helper.create_account_and_contract( account_id=TEST_ACCOUNT_ID) ows_abacus_contract_client = ows_abacus_contract_api_client(basic_headers) post_body = [ { 'renewal_type': 'continuously_active', 'termination_notice_detail_interval': 90, 'termination_notice_detail_type': 'day' } ] res_post = ows_abacus_contract_client.post_contract_lifecycle_schedules( contract_id, post_body ) assert res_post.status_code == 201 contract_lifecycle_schedule_id = \ res_post.json()[0]['contract_lifecycle_schedule_id'] ows_abacus_contract_client = ows_abacus_contract_api_client(auth_headers) res_get = \ ows_abacus_contract_client.post_contract_lifecycle_schedule_dataloader( [contract_id] ) assert res_get.status_code == 200 assert len(res_get.json()) == 1 assert res_get.json()[0]['data']['contract_lifecycle_schedule_id'] == \ contract_lifecycle_schedule_id @pytest.mark.jira('PLATFORM-4459') def test_post_contract_lifecycle_schedule_dataloader_unauthorized( unauthorized_headers ): """Test POST contract lifecycle schedule dataloader with unauthorized headers.""" contract_id, _, _ = generic_helper.create_account_and_contract( account_id=TEST_ACCOUNT_ID) ows_abacus_contract_client = ows_abacus_contract_api_client(unauthorized_headers) res_get = \ ows_abacus_contract_client.post_contract_lifecycle_schedule_dataloader( [contract_id] ) assert res_get.status_code == 403 assert res_get.json()['message'] == 'Unauthorized' assert res_get.json()['code'] == 'authorization_error'