diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6c56ff1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +.pytest_cache/ diff --git a/bank.py b/bank.py index ab74f6f..a89fd85 100644 --- a/bank.py +++ b/bank.py @@ -45,9 +45,18 @@ def calculate_total_assets(self): pass - def process_loan_payments(self): - # Processes loan payments by deducting the installment amount from the balance. - pass + def process_loan_payments(self): + # Processes loan payments by deducting the installment amount from the balance. + for loan in self.loans: + if loan.tenure <= 0 or loan.remaining_balance <= 0: + continue + + installment = min(loan.remaining_balance, loan.amount / loan.tenure) + for account in self.accounts: + if account.account_number == loan.account_number and account.balance >= installment: + account.balance -= installment + loan.remaining_balance -= installment + break class Account: diff --git a/test_process_loan_payments.py b/test_process_loan_payments.py new file mode 100644 index 0000000..2bf61fd --- /dev/null +++ b/test_process_loan_payments.py @@ -0,0 +1,40 @@ +from bank import Account, Bank, Loan + + +def test_process_loan_payments_deducts_installment_and_reduces_remaining_balance(): + bank = Bank("Test Bank") + account = Account("ACC-1", "Alice", 200.0) + loan = Loan("LOAN-1", "ACC-1", 120.0, 5.0, 12) + bank.accounts.append(account) + bank.loans.append(loan) + + bank.process_loan_payments() + + assert account.balance == 190.0 + assert loan.remaining_balance == 110.0 + + +def test_process_loan_payments_skips_accounts_with_insufficient_balance(): + bank = Bank("Test Bank") + account = Account("ACC-2", "Bob", 5.0) + loan = Loan("LOAN-2", "ACC-2", 120.0, 5.0, 12) + bank.accounts.append(account) + bank.loans.append(loan) + + bank.process_loan_payments() + + assert account.balance == 5.0 + assert loan.remaining_balance == 120.0 + + +def test_process_loan_payments_skips_loans_with_non_positive_tenure(): + bank = Bank("Test Bank") + account = Account("ACC-3", "Charlie", 100.0) + loan = Loan("LOAN-3", "ACC-3", 100.0, 5.0, 0) + bank.accounts.append(account) + bank.loans.append(loan) + + bank.process_loan_payments() + + assert account.balance == 100.0 + assert loan.remaining_balance == 100.0