"""Integration tests for contract lifecycle endpoints.""" import pytest from abacus_contract.tests.integration.conftest import ows_abacus_contract_api_client from abacus_contract.tests.integration.consts.constants import TEST_ACCOUNT_ID from abacus_contract.tests.integration.utils import generic_helper @pytest.mark.jira('ACC-7166') def test_contract_lifecycle( basic_headers, create_account_fixture, create_contract_fixture, create_contract_lifecycle_schedule_detail_fixture, ): """Contract lifecycle 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' ] 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 contract_lifecycle_ids = [res_post.json()['contract_lifecycle_id']] res_get = ows_abacus_contract_client.post_contract_lifecycle_dataloader( contract_lifecycle_ids ) assert res_get.status_code == 200 assert len(res_get.json()) == 1 res_get = ( ows_abacus_contract_client.get_contract_lifecycle_by_contract_lifecycle_id( contract_lifecycle_ids[0] ) ) assert res_get.status_code == 200 assert res_get.json()['contract_id'] == contract_id assert res_get.json()['contract_lifecycle_id'] == contract_lifecycle_ids[0] assert 'contract_lifecycle_schedule_id' in res_get.json() assert 'lifecycle_status' in res_get.json() assert 'lifecycle_term_start' in res_get.json() assert 'lifecycle_term_end' in res_get.json() assert 'renewal_effective' in res_get.json() assert 'termination_notice_deadline' in res_get.json() assert 'termination_notice_received' in res_get.json() assert 'termination_effective' in res_get.json() assert 'collection_start' in res_get.json() assert 'collection_end' in res_get.json() res_get = ows_abacus_contract_client.get_contract_lifecycle_by_contract_id( contract_id ) assert res_get.status_code == 200 item = res_get.json() assert item['contract_id'] == contract_id assert res_get.json()['contract_lifecycle_id'] == contract_lifecycle_ids[0] assert 'contract_lifecycle_schedule_id' in res_get.json() assert 'lifecycle_status' in res_get.json() assert 'lifecycle_term_start' in res_get.json() assert 'lifecycle_term_end' in res_get.json() assert 'renewal_effective' in res_get.json() assert 'termination_notice_deadline' in res_get.json() assert 'termination_notice_received' in res_get.json() assert 'termination_effective' in res_get.json() assert 'collection_start' in res_get.json() assert 'collection_end' in res_get.json() res_get = ows_abacus_contract_client.get_contract_lifecycle_by_contract_lifecycle_schedule_id( contract_lifecycle_schedule_id ) assert res_get.status_code == 200 item = res_get.json() assert item['contract_id'] == contract_id assert res_get.json()['contract_lifecycle_id'] == contract_lifecycle_ids[0] assert 'contract_lifecycle_schedule_id' in res_get.json() assert 'lifecycle_status' in res_get.json() assert 'lifecycle_term_start' in res_get.json() assert 'lifecycle_term_end' in res_get.json() assert 'renewal_effective' in res_get.json() assert 'termination_notice_deadline' in res_get.json() assert 'termination_notice_received' in res_get.json() assert 'termination_effective' in res_get.json() assert 'collection_start' in res_get.json() assert 'collection_end' in res_get.json() res_post = ows_abacus_contract_client.post_contract_contract_lifecycle_dataloader( [contract_id] ) assert res_post.status_code == 200 item = res_post.json()[0]['data'] assert item['contract_id'] == contract_id assert item['contract_lifecycle_schedule_id'] == contract_lifecycle_schedule_id assert item['contract_lifecycle_id'] == contract_lifecycle_ids[0] assert 'lifecycle_status' in item assert 'lifecycle_term_start' in item assert 'lifecycle_term_end' in item assert 'renewal_effective' in item assert 'termination_notice_deadline' in item assert 'termination_notice_received' in item assert 'termination_effective' in item assert 'collection_start' in item assert 'collection_end' in item @pytest.mark.jira('PLATFORM-4459') def test_contract_lifecycle_dataloader(auth_headers, basic_headers): """Test contract lifecycle 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) # Create a contract lifecycle schedule and contract_lifecycle 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' ] 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 contract_lifecycle_ids = [res_post.json()['contract_lifecycle_id']] ows_abacus_contract_client = ows_abacus_contract_api_client(auth_headers) res_post = ows_abacus_contract_client.post_contract_contract_lifecycle_dataloader( [contract_id] ) assert res_post.status_code == 200 item = res_post.json()[0]['data'] assert item['contract_id'] == contract_id assert item['contract_lifecycle_schedule_id'] == contract_lifecycle_schedule_id assert item['contract_lifecycle_id'] == contract_lifecycle_ids[0] @pytest.mark.jira('PLATFORM-4459') def test_get_contract_lifecycle_by_contract_id( auth_headers, basic_headers, unauthorized_headers ): """Test get contract lifecycle 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) # Create a contract lifecycle schedule and contract_lifecycle 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' ] 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 ows_abacus_contract_client = ows_abacus_contract_api_client(auth_headers) res_get = ows_abacus_contract_client.get_contract_lifecycle_by_contract_id( contract_id ) assert res_get.status_code == 200 item = res_get.json() assert item['contract_id'] == contract_id assert item['contract_lifecycle_schedule_id'] == contract_lifecycle_schedule_id assert item['contract_lifecycle_id'] == res_post.json()['contract_lifecycle_id'] ows_abacus_contract_client = ows_abacus_contract_api_client(unauthorized_headers) res_get = ows_abacus_contract_client.get_contract_lifecycle_by_contract_id( contract_id ) assert res_get.status_code == 403 assert res_get.json()['message'] == 'Unauthorized'