"""Ledger Reserve Release Schedule model tests.""" from decimal import Decimal from ledger.models.ledger_reserve_release_schedule import LedgerReserveReleaseSchedule from tests.utils.factories import ( LedgerReserveReleaseFactory, LedgerReserveReleaseScheduleFactory, LedgerReserveTakenFactory, ) def test_create_reserve_release_schedule(mock_event_fixtures): """Create a Ledger Reserve Release Schedule entry.""" LedgerReserveTakenFactory.create() records = LedgerReserveReleaseSchedule.query.all() assert len(records) == 0 LedgerReserveReleaseSchedule.create( abacus_event_id=1, account_id=1, taken_statement_period_id=1, release_statement_period_id=2, ledger_reserve_taken_id=1, currency_code='USD', installment_amount=-Decimal('1500.11'), outstanding_amount_after_installment=-Decimal('2100.01'), ) records = LedgerReserveReleaseSchedule.query.all() assert len(records) == 1 assert records[0].installment_amount == -Decimal('1500.11') assert records[0].outstanding_amount_after_installment == -Decimal('2100.01') def test_get_by_release_statement_period_id(mock_event_fixtures): """Get Ledger Reserve Release Schedule items by release statement period id.""" expected = LedgerReserveReleaseScheduleFactory.create( taken_statement_period_id=2, release_statement_period_id=1 ) not_expected = LedgerReserveReleaseScheduleFactory.create() items = LedgerReserveReleaseSchedule.get_by_release_statement_period_id( release_statement_period_id=1 ) assert len(items) == 1 assert ( items[0].ledger_reserve_release_schedule_id == expected.ledger_reserve_release_schedule_id ) assert items[0].release_statement_period_id == expected.release_statement_period_id assert ( items[0].release_statement_period_id != not_expected.release_statement_period_id ) assert items[0].contract_id is not None def test_get_by_release_statement_period_id_unreleased_only(mock_event_fixtures): """Get scheduled reserves by statement period returns unreleased reserves only.""" expected = LedgerReserveReleaseScheduleFactory.create( taken_statement_period_id=2, release_statement_period_id=1 ) not_expected = LedgerReserveReleaseScheduleFactory.create( taken_statement_period_id=2, release_statement_period_id=1 ) LedgerReserveReleaseFactory.create(ledger_reserve_release_schedule=not_expected) items = LedgerReserveReleaseSchedule.get_by_release_statement_period_id( release_statement_period_id=1 ) assert len(items) == 1 assert ( items[0].ledger_reserve_release_schedule_id == expected.ledger_reserve_release_schedule_id ) assert ( items[0].ledger_reserve_release_schedule_id != not_expected.ledger_reserve_release_schedule_id ) def test_get_by_ledger_reserve_taken_ids(mock_event_fixtures): """Test to get ledger_reserve_release_schedule records.""" ledger_reserve_taken_list = LedgerReserveTakenFactory.create_batch(2) LedgerReserveTakenFactory.create() LedgerReserveReleaseScheduleFactory.create( abacus_event_id=1, account_id=1, ledger_reserve_taken=ledger_reserve_taken_list[0], ) LedgerReserveReleaseScheduleFactory.create( abacus_event_id=2, account_id=1, ledger_reserve_taken=ledger_reserve_taken_list[1], ) items = LedgerReserveReleaseSchedule.get_by_ledger_reserve_taken_ids( [ledger_reserve_taken_list[0].ledger_reserve_taken_id] ) assert len(items) == 1 assert ( items[0].ledger_reserve_taken_id == ledger_reserve_taken_list[0].ledger_reserve_taken_id )