"""Test Ledger Reserve Release Schedule schema.""" from decimal import Decimal from ledger.schemas.ledger_reserve_release_schedule import ( LedgerReserveReleaseScheduleDetailSchema, LedgerReserveReleaseScheduleExtendedSchema, LedgerReserveReleaseSchedulePostSchema, ) from tests.utils.factories import ( LedgerReserveReleaseScheduleFactory, LedgerReserveTakenFactory, ) def test_ledger_reserve_release_schedule_load( mock_bulk_ledger_reserve_release_schedule_body, ): """Test Ledger Reserve Release Schedule schema loading.""" entries = LedgerReserveReleaseSchedulePostSchema(many=True).load( mock_bulk_ledger_reserve_release_schedule_body ) assert entries == [ { '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'), 'early_release_date': None, }, { 'abacus_event_id': 2, 'account_id': 1, 'taken_statement_period_id': 1, 'release_statement_period_id': 2, 'ledger_reserve_taken_id': 1, 'currency_code': 'USD', 'installment_amount': -Decimal('1111.22'), 'outstanding_amount_after_installment': -Decimal('3333.44'), 'early_release_date': None, }, ] def test_ledger_reserve_release_schedule_schema_dump(mock_event_fixtures): """Test Ledger Reserve Release Schedule schema dumping.""" LedgerReserveTakenFactory.create() entity = LedgerReserveReleaseScheduleFactory.create() res = LedgerReserveReleaseScheduleDetailSchema().dump(entity) assert res == { 'ledger_reserve_release_schedule_id': entity.ledger_reserve_release_schedule_id, 'abacus_event_id': entity.abacus_event_id, 'account_id': entity.account_id, 'taken_statement_period_id': entity.taken_statement_period_id, 'release_statement_period_id': entity.release_statement_period_id, 'ledger_reserve_taken_id': entity.ledger_reserve_taken_id, 'currency_code': entity.currency_code, 'installment_amount': str(entity.installment_amount), 'outstanding_amount_after_installment': str( entity.outstanding_amount_after_installment ), 'early_release_date': None, } def test_ledger_reserve_release_schedule_period_schema_dump(mock_event_fixtures): """Test Ledger Reserve Release Schedule Period schema dumping.""" LedgerReserveTakenFactory.create() entity = LedgerReserveReleaseScheduleFactory.create() setattr(entity, 'contract_id', 1) res = LedgerReserveReleaseScheduleExtendedSchema().dump(entity) assert res == { 'ledger_reserve_release_schedule_id': entity.ledger_reserve_release_schedule_id, 'abacus_event_id': entity.abacus_event_id, 'account_id': entity.account_id, 'taken_statement_period_id': entity.taken_statement_period_id, 'release_statement_period_id': entity.release_statement_period_id, 'ledger_reserve_taken_id': entity.ledger_reserve_taken_id, 'currency_code': entity.currency_code, 'installment_amount': str(entity.installment_amount), 'outstanding_amount_after_installment': str( entity.outstanding_amount_after_installment ), 'contract_id': 1, 'early_release_date': None, }