"""Unit testcases for StatementPeriodAdjustmentBatchCriteria schema.""" import pytest from marshmallow import ValidationError from royalties.constants.constants import PAYMENT_SCHEDULES from royalties.constants.error import ( ERROR_INVALID_CRITERIA_DUPLICATE_PAYMENT_ENTITIES, ERROR_MUST_CONTAIN_AT_LEAST_ONE_VALUE, ) from royalties.schemas.statement_period_adjustment_batch_criteria import ( StatementPeriodAdjustmentBatchCriteriaBaseSchema, StatementPeriodAdjustmentBatchCriteriaDetailSchema, StatementPeriodAdjustmentBatchCriteriaJsonSchema, StatementPeriodAdjustmentBatchCriteriaPostSchema, StatementPeriodAdjustmentFileAndBatchCriteriaPostSchema, ) from royalties.tests.utils.factories import ( StatementPeriodAdjustmentBatchCriteriaFactory, ) def test_statement_period_adjustment_batch_criteria_base_schema(): """Test base schema for statement_period_adjustment_batch_criteria.""" mock_batch = StatementPeriodAdjustmentBatchCriteriaFactory.create() result = StatementPeriodAdjustmentBatchCriteriaBaseSchema().dump(mock_batch) assert result == { 'batch_criteria': { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], }, 'statement_period_adjustment_file_id': mock_batch.statement_period_adjustment_file_id, } def test_statement_period_adjustment_batch_criteria_detail_schema(): """Test detail schema for statement_period_adjustment_batch_criteria.""" mock_batch = StatementPeriodAdjustmentBatchCriteriaFactory.create() result = StatementPeriodAdjustmentBatchCriteriaDetailSchema().dump(mock_batch) assert result == { 'batch_criteria': { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], }, 'statement_period_adjustment_file_id': mock_batch.statement_period_adjustment_file_id, 'statement_period_adjustment_batch_criteria_id': mock_batch.statement_period_adjustment_batch_criteria_id, } def test_statement_period_adjustment_batch_criteria_json_schema(): """Test criteria json schema.""" result = StatementPeriodAdjustmentBatchCriteriaJsonSchema().dump( { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], } ) assert result == { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], } def test_statement_period_adjustment_batch_criteria_criteria_schema_with_no_values(): """Test criteria json schema with empty values.""" with pytest.raises(ValidationError) as exc_info: StatementPeriodAdjustmentBatchCriteriaJsonSchema().load( { 'payment_schedules': [], 'reference_payment_entities': [], } ) assert exc_info.value.messages == { 'reference_payment_entities': [ ERROR_MUST_CONTAIN_AT_LEAST_ONE_VALUE.format('reference_payment_entities') ], 'payment_schedules': [ ERROR_MUST_CONTAIN_AT_LEAST_ONE_VALUE.format('payment_schedules') ], } def test_batch_criteria_json_schema_with_duplicate_values(): """Test criteria json schema with duplicate values.""" with pytest.raises(ValidationError) as exc_info: StatementPeriodAdjustmentBatchCriteriaJsonSchema().load( { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4, 3], } ) assert exc_info.value.messages == { '_schema': [ERROR_INVALID_CRITERIA_DUPLICATE_PAYMENT_ENTITIES] } def test_batch_criteria_json_schema_with_missing_field(): """Test criteria schema with missing field.""" with pytest.raises(ValidationError) as exc_info: StatementPeriodAdjustmentBatchCriteriaJsonSchema().load( { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ] } ) assert exc_info.value.messages == { 'reference_payment_entities': ['Must be specified.'] } def test_statement_period_adjustment_batch_criteria_post_schema(): """Test post schema for statement_period_adjustment_batch_criteria.""" mock_batch = StatementPeriodAdjustmentBatchCriteriaFactory.create() result = StatementPeriodAdjustmentBatchCriteriaPostSchema().dump(mock_batch) assert result == { 'batch_criteria': { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], }, 'statement_period_adjustment_file_id': mock_batch.statement_period_adjustment_file_id, } def test_statement_period_adjustment_file_and_batch_criteria_post_schema(): """Test post schema for statement_period_adjustment_file_and_batch_criteria.""" mock_post_request = { 'batch_criteria': { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], }, 'file_name': 'Test Adjustment File', } result = StatementPeriodAdjustmentFileAndBatchCriteriaPostSchema().dump( mock_post_request ) assert result == mock_post_request