"""Ledger Reserve Release Schedule model tests.""" from moneyhub.models.ledger_reserve_release_schedule import LedgerReserveReleaseSchedule from tests.unit.conftest import insert_mock_data def _insert_ledger_reserve_release_schedule( account_id=1, taken_statement_period_id=1): """Insert mock data for ledger reserve release schedule.""" abacus_event_id = 111 accounting_run_id = 9 accounting_period_id = 1 contract_id = 1001 contract_reserve_id = 5 currency_code = 'AUD' ledger_reserve_taken_id = 1 ledger_reserve_release_schedule_id = 1 ledger_reserve_release_id = 1 run_controller_id = 12 insert_mock_data({ 'account': {'account_id': account_id}, 'statement_period': [ {'statement_period_id': taken_statement_period_id}, {'statement_period_id': taken_statement_period_id + 1}, {'statement_period_id': taken_statement_period_id + 2}, ], 'abacus_event': [ {'abacus_event_id': abacus_event_id}, {'abacus_event_id': abacus_event_id + 1}, ], 'run_controller': {'run_controller_id': run_controller_id}, 'accounting_period': { 'accounting_period_id': accounting_period_id, 'statement_period_id': taken_statement_period_id, }, 'accounting_run': { 'accounting_run_id': accounting_run_id, 'accounting_period_id': accounting_period_id, 'run_controller_id': run_controller_id, }, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': { 'contract_id': contract_id, 'reference_signing_entity_id': 1, }, 'contract_reserve': { 'contract_reserve_id': contract_reserve_id, 'contract_id': contract_id, }, 'ledger_reserve_taken': { 'ledger_reserve_taken_id': ledger_reserve_taken_id, 'statement_period_id': taken_statement_period_id, 'abacus_event_id': abacus_event_id, 'contract_reserve_id': contract_reserve_id, 'accounting_run_id': accounting_run_id, }, 'ledger_reserve_release_schedule': [ { 'ledger_reserve_release_schedule_id': ledger_reserve_release_schedule_id, 'abacus_event_id': abacus_event_id, 'account_id': account_id, 'taken_statement_period_id': taken_statement_period_id, 'release_statement_period_id': taken_statement_period_id + 1, 'ledger_reserve_taken_id': ledger_reserve_taken_id, 'currency_code': currency_code, 'installment_amount': -100, 'outstanding_amount_after_installment': 100, }, { 'ledger_reserve_release_schedule_id': ledger_reserve_release_schedule_id + 1, 'abacus_event_id': abacus_event_id + 1, 'account_id': account_id, 'taken_statement_period_id': taken_statement_period_id, 'release_statement_period_id': taken_statement_period_id + 2, 'ledger_reserve_taken_id': ledger_reserve_taken_id, 'currency_code': currency_code, 'installment_amount': -200, 'outstanding_amount_after_installment': 0, }, ], 'ledger_reserve_release': { 'ledger_reserve_release_id': ledger_reserve_release_id, 'ledger_reserve_release_schedule_id': ledger_reserve_release_schedule_id, 'abacus_event_id': abacus_event_id, 'statement_period_id': taken_statement_period_id + 1, 'installment_amount': 100, } }) def test_get_by_account_id_for_statement_period(): """Test to get release reserve schedule for a specified account.""" account_id = 1 statement_period_id = 1 _insert_ledger_reserve_release_schedule(account_id, statement_period_id) res = LedgerReserveReleaseSchedule.get_by_account_id_for_statement_period( account_id, statement_period_id) assert len(res) == 2 assert any(entry.account_id == account_id for entry in res) def test_get_by_account_id_for_statement_period_before_period(): """Test to get release reserve schedule before the taken period.""" account_id = 1 taken_statement_period_id = 5 statement_period_id = 3 _insert_ledger_reserve_release_schedule(account_id, taken_statement_period_id) res = LedgerReserveReleaseSchedule.get_by_account_id_for_statement_period( account_id, statement_period_id) assert len(res) == 0 def test_get_account_reserves_activity(): """Test to get release reserve schedule for a specified account.""" account_id = 1 _insert_ledger_reserve_release_schedule(account_id) res = LedgerReserveReleaseSchedule.get_account_reserves_activity(account_id) assert res.account_id == account_id