82 lines
2.4 KiB
Python
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)
|