Files
2026-10-26 14:24:33 +07:00

82 lines
2.4 KiB
Python

from unittest.mock import patch
import pytest
from banking import BankAccount
@pytest.mark.parametrize("amount, expected", [
(1, 100_001),
(99_999, 199_999),
(100_000, 200_000),
(100_001, 200_001),
])
def test_deposit_bva(account, amount, expected):
assert account.deposit(amount) == expected
def test_deposit_zero_raises(account):
with pytest.raises(ValueError, match="Deposit must be positive"):
account.deposit(0)
def test_deposit_negative_raises(account):
with pytest.raises(ValueError, match="Deposit must be positive"):
account.deposit(-1)
@pytest.mark.parametrize("amount, expected", [
(1, 99_999),
(99_999, 1),
(100_000, 0),
])
def test_withdraw_valid_boundaries(account, amount, expected):
assert account.withdraw(amount) == expected
def test_withdraw_zero_raises(account):
with pytest.raises(ValueError, match="Withdrawal must be positive"):
account.withdraw(0)
def test_withdraw_over_balance_raises(account):
with pytest.raises(ValueError, match="Insufficient funds"):
account.withdraw(100_001)
assert account.balance == 100_000
def test_transfer_and_notification_mock(account):
recipient = BankAccount("Bob", 10_000)
with patch("banking.send_notification") as mocked:
assert account.transfer(recipient, 40_000) == 60_000
assert recipient.balance == 50_000
mocked.assert_called_once_with("Bob", "Received 40000 from Alice")
def test_transfer_insufficient_funds_does_not_notify(account):
recipient = BankAccount("Bob")
with patch("banking.send_notification") as mocked:
with pytest.raises(ValueError, match="Insufficient funds"):
account.transfer(recipient, 100_001)
mocked.assert_not_called()
assert account.balance == 100_000
assert recipient.balance == 0
def test_transfer_zero_raises(account):
with pytest.raises(ValueError, match="Transfer must be positive"):
account.transfer(BankAccount("Bob"), 0)
def test_transfer_to_self_raises(account):
with pytest.raises(ValueError, match="Cannot transfer to the same account"):
account.transfer(account, 100)
def test_blank_owner_raises():
with pytest.raises(ValueError, match="Owner is required"):
BankAccount(" ")
def test_negative_initial_balance_raises():
with pytest.raises(ValueError, match="Initial balance cannot be negative"):
BankAccount("Alice", -1)