"""Functional tests for Ledger Reserve Release Schedule.""" from ledger.constants.error import ERROR_RECORD_ALREADY_EXISTS from tests.utils.factories import ( LedgerReserveReleaseScheduleFactory, LedgerReserveTakenFactory, ) def test_bulk_create_ledger_reserve_release_schedule( fixture_client, mock_event_fixtures, mock_bulk_ledger_reserve_release_schedule_body ): """Test bulk create Ledger Reserve Release Schedule.""" LedgerReserveTakenFactory.create() post_body = mock_bulk_ledger_reserve_release_schedule_body res = fixture_client.post('/ledger-reserve-release-schedule/bulk', json=post_body) assert res.status_code == 201 items = sorted(res.json, key=lambda x: x['ledger_reserve_release_schedule_id']) post_body[0]['ledger_reserve_release_schedule_id'] = 1 post_body[1]['ledger_reserve_release_schedule_id'] = 2 assert items == post_body def test_bulk_create_ledger_record_already_exist( fixture_client, mock_event_fixtures, mock_bulk_ledger_reserve_release_schedule_body ): """Test to create Ledger Reserve Release Schedule if record already exist.""" LedgerReserveReleaseScheduleFactory.create() mock_bulk_ledger_reserve_release_schedule_body[1].update(account_id=50) post_body = mock_bulk_ledger_reserve_release_schedule_body res = fixture_client.post('/ledger-reserve-release-schedule/bulk', json=post_body) assert res.status_code == 409 assert res.json['message'] == ERROR_RECORD_ALREADY_EXISTS.format( { 'abacus_event_id': 1, 'account_id': 1, 'taken_statement_period_id': 1, 'release_statement_period_id': 2, 'ledger_reserve_taken_id': 1, } ) def test_bulk_create_ledger_record_non_unique_data(fixture_client): """Test to create Ledger Reserve Release Schedule. if POST request body contains non-unique data. """ post_body = [ { 'abacus_event_id': 1, 'account_id': 1, 'taken_statement_period_id': 1, 'release_statement_period_id': 2, 'ledger_reserve_taken_id': 2, 'currency_code': 'USD', 'installment_amount': -800.53, 'outstanding_amount_after_installment': 0, }, { 'abacus_event_id': 1, 'account_id': 1, 'taken_statement_period_id': 1, 'release_statement_period_id': 2, 'ledger_reserve_taken_id': 3, 'currency_code': 'USD', 'installment_amount': 1000.10, 'outstanding_amount_after_installment': 0, }, { 'abacus_event_id': 1, 'account_id': 1, 'taken_statement_period_id': 1, 'release_statement_period_id': 2, 'ledger_reserve_taken_id': 2, 'currency_code': 'USD', 'installment_amount': 1000.53, 'outstanding_amount_after_installment': 0, }, ] res = fixture_client.post('/ledger-reserve-release-schedule/bulk', json=post_body) assert res.status_code == 400 def test_get_by_release_statement_period_id(fixture_client, mock_event_fixtures): """Test getting release schedule items by statement period.""" LedgerReserveReleaseScheduleFactory.create() LedgerReserveReleaseScheduleFactory.create( taken_statement_period_id=2, release_statement_period_id=1 ) res = fixture_client.get( '/ledger-reserve-release-schedule/statement-period/1/release' ) assert res.status_code == 200 items = res.json assert len(items) == 1 assert items == [ { 'ledger_reserve_taken_id': 2, 'outstanding_amount_after_installment': '-2100.01', 'release_statement_period_id': 1, 'account_id': 1, 'installment_amount': '-1500.11', 'taken_statement_period_id': 2, 'ledger_reserve_release_schedule_id': 2, 'abacus_event_id': 1, 'currency_code': 'USD', 'contract_id': 1, 'early_release_date': None, } ]