"""Unit testcases for StatementPeriodAdjustmentBatchCriteria model.""" import pytest from royalties.constants.constants import PAYMENT_SCHEDULES from royalties.models.statement_period_adjustment_batch_criteria import ( StatementPeriodAdjustmentBatchCriteria, ) from royalties.tests.utils.factories import ( StatementPeriodAdjustmentBatchCriteriaFactory, StatementPeriodAdjustmentFileFactory, StatementPeriodFactory, ) def test_create(): """Test creating a statement_period_adjustment_batch_criteria.""" assert len(StatementPeriodAdjustmentBatchCriteria.query.all()) == 0 mock_adjustment_file = StatementPeriodAdjustmentFileFactory.create() batch_criteria = { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], } StatementPeriodAdjustmentBatchCriteria.create( batch_criteria=batch_criteria, statement_period_adjustment_file=mock_adjustment_file, ) result = StatementPeriodAdjustmentBatchCriteria.query.all() assert len(result) == 1 assert ( result[0].statement_period_adjustment_file_id == mock_adjustment_file.statement_period_adjustment_file_id ) assert result[0].batch_criteria == batch_criteria def test_get_by_file_id(): """Test to get a statement_period_adjustment_batch_criteria by file id.""" mock_adjustment_file = StatementPeriodAdjustmentFileFactory.create() mock_batch = StatementPeriodAdjustmentBatchCriteriaFactory.create( statement_period_adjustment_file=mock_adjustment_file ) result = StatementPeriodAdjustmentBatchCriteria.get_by_file_id( mock_adjustment_file.statement_period_adjustment_file_id ) assert ( result.statement_period_adjustment_file_id == mock_batch.statement_period_adjustment_file_id ) 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], } @pytest.mark.db('mysql') def test_get_by_batch_criteria_and_period_id(): """Test to get a statement_period_adjustment_batch_criteria by batch criteria and period id.""" batch_criteria = { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], } mock_statement_period = StatementPeriodFactory.create() mock_adjustment_file = StatementPeriodAdjustmentFileFactory.create( statement_period=mock_statement_period ) mock_batch = StatementPeriodAdjustmentBatchCriteriaFactory.create( batch_criteria=batch_criteria, statement_period_adjustment_file=mock_adjustment_file, ) result = StatementPeriodAdjustmentBatchCriteria.get_by_batch_criteria_and_period_id( { 'payment_schedules': [PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH], 'reference_payment_entities': [1, 2], }, mock_statement_period.statement_period_id, ) assert ( result[0].statement_period_adjustment_file_id == mock_batch.statement_period_adjustment_file_id ) assert result[0].batch_criteria == batch_criteria @pytest.mark.db('mysql') def test_get_no_results_by_batch_criteria_and_period_id(): """Test returns an empty array when no records match the specified batch criteria and period id.""" batch_criteria = { 'payment_schedules': [ PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH, PAYMENT_SCHEDULES.SCHEDULE_90_DAYS_HALFYEAR, ], 'reference_payment_entities': [1, 2, 3, 4], } mock_statement_period = StatementPeriodFactory.create() mock_adjustment_file = StatementPeriodAdjustmentFileFactory.create( statement_period=mock_statement_period ) mock_batch = StatementPeriodAdjustmentBatchCriteriaFactory.create( batch_criteria=batch_criteria, statement_period_adjustment_file=mock_adjustment_file, ) result = StatementPeriodAdjustmentBatchCriteria.get_by_batch_criteria_and_period_id( { 'payment_schedules': [PAYMENT_SCHEDULES.SCHEDULE_30_DAYS_MONTH], 'reference_payment_entities': [1, 2], }, mock_statement_period.statement_period_id, ) assert ( result[0].statement_period_adjustment_file_id == mock_batch.statement_period_adjustment_file_id ) assert result[0].batch_criteria == batch_criteria