"""Tests for contract lifecycle termination.""" import datetime from unittest.mock import patch import pytest from json_contract_file_import.contract_lifecycle_terminate import terminate_contract from json_contract_file_import.entity_import_result import EntityImportResult @pytest.fixture def mock_today(): """Return a fixed datetime for testing.""" return datetime.datetime(2024, 1, 1) @patch('json_contract_file_import.contract_lifecycle_terminate.datetime') @patch('json_contract_file_import.ows_royalties.terminate_contract') def test_terminate_contract_success(mock_terminate, mock_datetime, mock_today): """Test successful contract termination when schedule_end date is in the past.""" mock_datetime.datetime.today.return_value = mock_today mock_terminate.return_value.status_code = 200 contract_lifecycle_data = [{ 'lifecycle_schedule': { 'schedule_end': '2023-12-31' } }] result = terminate_contract(1, contract_lifecycle_data) assert len(result) == 1 assert result[0].entity_name == EntityImportResult.CONTRACT_TERMINATION assert result[0].entity_id == 'contract:1' mock_terminate.assert_called_once_with(1, {'termination_effective': '2023-12-31'}) def test_terminate_contract_empty_data(): """Test contract termination with empty contract lifecycle data.""" result = terminate_contract(1, []) assert result == [] def test_terminate_contract_no_schedule_end(): """Test contract termination when schedule_end date is not provided.""" contract_lifecycle_data = [{ 'lifecycle_schedule': {} }] result = terminate_contract(1, contract_lifecycle_data) assert result == [] @patch('json_contract_file_import.contract_lifecycle_terminate.datetime') def test_terminate_contract_future_date(mock_datetime, mock_today): """Test contract termination when schedule_end date is in the future.""" mock_datetime.datetime.today.return_value = mock_today contract_lifecycle_data = [{ 'lifecycle_schedule': { 'schedule_end': '2024-12-31' } }] result = terminate_contract(1, contract_lifecycle_data) assert result == [] @patch('json_contract_file_import.contract_lifecycle_terminate.datetime') def test_terminate_contract_today(mock_datetime, mock_today): """Test contract termination when schedule_end date is today.""" mock_datetime.datetime.today.return_value = mock_today contract_lifecycle_data = [{ 'lifecycle_schedule': { 'schedule_end': mock_today.strftime('%Y-%m-%d') } }] result = terminate_contract(1, contract_lifecycle_data) assert result == []