"""Unit tests for Ledger Adjustment model.""" from decimal import Decimal from ledger.models.ledger_adjustment import LedgerAdjustment from tests.utils.factories import ( LedgerAdjustmentAppliedFactory, LedgerAdjustmentFactory, ) def test_create_adjustment(mock_event_fixtures): """Test to create a Ledger Adjustment.""" assert len(LedgerAdjustment.query.all()) == 0 LedgerAdjustment.create( abacus_event_id=1, account_id=1, contract_id=1, activity_statement_period_id=1, apply_to_statement_period_id=2, reference_adjustment_type_id=1, adjustment_currency_code='USD', adjustment_amount=Decimal('550.23'), note='info message', ) records = LedgerAdjustment.query.all() assert len(records) == 1 assert records[0].ledger_adjustment_id == 1 def test_get_pending_by_statement_period_id(mock_event_fixtures): """Test to get pending Ledger Adjustment entries by statement_period_id.""" statement_period_id = 2 ledger_adjustments = [ LedgerAdjustmentFactory.create( activity_statement_period_id=1, apply_to_statement_period_id=2 ), LedgerAdjustmentFactory.create( activity_statement_period_id=2, apply_to_statement_period_id=1 ), LedgerAdjustmentFactory.create( activity_statement_period_id=1, apply_to_statement_period_id=2 ), ] LedgerAdjustmentAppliedFactory.create(ledger_adjustment=ledger_adjustments[0]) params = {'statement_period_id': statement_period_id, 'limit': 25, 'offset': 0} assert len(LedgerAdjustment.query.all()) == 3 items, total_count = LedgerAdjustment.get_pending_by_statement_period_id(**params) assert total_count == 1 assert items[0].ledger_adjustment_id == ledger_adjustments[2].ledger_adjustment_id assert items[0].account_currency_code == 'USD' def test_get_ledger_adjustments(mock_event_fixtures): """Test to get list of Ledger Adjustments.""" statement_period_id = 2 ledger_adjustments = [ LedgerAdjustmentFactory.create( adjustment_amount='1001.9', account_id=1, contract_id=1, apply_to_statement_period_id=statement_period_id, ), LedgerAdjustmentFactory.create( adjustment_amount='500.9', account_id=50, contract_id=2, apply_to_statement_period_id=statement_period_id, ), ] LedgerAdjustmentAppliedFactory.create(ledger_adjustment=ledger_adjustments[0]) params = {'limit': 25, 'offset': 0} items, total_count = LedgerAdjustment.get_ledger_adjustments(**params) assert total_count == 2 assert items[0].ledger_adjustment_id == ledger_adjustments[1].ledger_adjustment_id assert items[0].adjustment_ledger_status == 'Pending' assert items[0].adjustment_amount == Decimal('500.9') assert items[1].ledger_adjustment_id == ledger_adjustments[0].ledger_adjustment_id assert items[1].adjustment_ledger_status == 'Applied' assert items[1].adjustment_amount == Decimal('1001.9') def test_get_ledger_adjustments_by_account_id(mock_event_fixtures): """Test to get filtered list of Ledger Adjustments as per account_id.""" statement_period_id = 2 ledger_adjustments = [ LedgerAdjustmentFactory.create( adjustment_amount='1001.9', account_id=1, contract_id=1, apply_to_statement_period_id=statement_period_id, ), LedgerAdjustmentFactory.create( adjustment_amount='500.9', account_id=50, contract_id=2, apply_to_statement_period_id=statement_period_id, ), ] LedgerAdjustmentAppliedFactory.create(ledger_adjustment=ledger_adjustments[0]) params = {'limit': 25, 'offset': 0, 'account_id': 50} items, total_count = LedgerAdjustment.get_ledger_adjustments(**params) assert total_count == 1 assert items[0].ledger_adjustment_id == ledger_adjustments[1].ledger_adjustment_id assert items[0].adjustment_ledger_status == 'Pending' assert items[0].adjustment_amount == Decimal('500.9') assert items[0].account_id == 50 def test_get_applied_ledger_adjustments(mock_event_fixtures): """Test to get filtered list of Applied Ledger Adjustments.""" statement_period_id = 2 ledger_adjustments = [ LedgerAdjustmentFactory.create( adjustment_amount='1001.9', account_id=1, contract_id=1, apply_to_statement_period_id=statement_period_id, ), LedgerAdjustmentFactory.create( adjustment_amount='500.9', account_id=50, contract_id=2, apply_to_statement_period_id=statement_period_id, ), ] LedgerAdjustmentAppliedFactory.create(ledger_adjustment=ledger_adjustments[0]) params = {'limit': 25, 'offset': 0, 'show_only_applied_adjustments': 1} items, total_count = LedgerAdjustment.get_ledger_adjustments(**params) assert total_count == 1 assert items[0].ledger_adjustment_id == ledger_adjustments[0].ledger_adjustment_id assert items[0].adjustment_ledger_status == 'Applied' assert items[0].adjustment_amount == Decimal('1001.9') assert items[0].account_id == 1 def test_get_ledger_adjustments_by_apply_to_statement_period(mock_event_fixtures): """Test to get filtered list of Ledger Adjustments as per apply_to_statement_period_id range.""" statement_period_id = 2 ledger_adjustments = [ LedgerAdjustmentFactory.create( adjustment_amount='1001.9', account_id=1, contract_id=1, apply_to_statement_period_id=statement_period_id, ), LedgerAdjustmentFactory.create( adjustment_amount='500.9', account_id=50, contract_id=2, apply_to_statement_period_id=statement_period_id, ), ] LedgerAdjustmentAppliedFactory.create(ledger_adjustment=ledger_adjustments[0]) params = { 'limit': 25, 'offset': 0, 'start_apply_to_statement_period_id': 2, 'end_apply_to_statement_period_id': 4, } items, total_count = LedgerAdjustment.get_ledger_adjustments(**params) assert total_count == 2 assert items[0].ledger_adjustment_id == ledger_adjustments[1].ledger_adjustment_id assert items[0].adjustment_ledger_status == 'Pending' assert items[0].adjustment_amount == Decimal('500.9') assert items[1].ledger_adjustment_id == ledger_adjustments[0].ledger_adjustment_id assert items[1].adjustment_ledger_status == 'Applied' assert items[1].adjustment_amount == Decimal('1001.9') def test_get_filtered_ledger_adjustments(mock_event_fixtures): """Test to get list of Ledger Adjustments when all filters are applied.""" statement_period_id = 2 ledger_adjustments = [ LedgerAdjustmentFactory.create( adjustment_amount='1001.9', account_id=1, contract_id=1, apply_to_statement_period_id=statement_period_id, ), LedgerAdjustmentFactory.create( adjustment_amount='500.9', account_id=50, contract_id=2, apply_to_statement_period_id=statement_period_id, ), ] LedgerAdjustmentAppliedFactory.create(ledger_adjustment=ledger_adjustments[0]) params = { 'limit': 25, 'offset': 0, 'account_id': 1, 'start_apply_to_statement_period_id': 1, 'end_apply_to_statement_period_id': 4, 'show_only_applied_adjustments': 1, } items, total_count = LedgerAdjustment.get_ledger_adjustments(**params) assert total_count == 1 assert items[0].ledger_adjustment_id == ledger_adjustments[0].ledger_adjustment_id assert items[0].adjustment_ledger_status == 'Applied' assert items[0].adjustment_amount == Decimal('1001.9') assert items[0].account_id == 1