You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.6 KiB
60 lines
2.6 KiB
# - In this file, you have to add your tests on Transaction module. |
|
# - See, app/transaction.py |
|
# - Test transaction with different types - deposit, withdraw and transfer |
|
# - Use mocks accordingly |
|
|
|
from app.transaction import Transaction |
|
from app.database import Database |
|
|
|
import pytest |
|
from unittest.mock import patch |
|
|
|
@pytest.fixture |
|
def mock_database(): |
|
return Database("") |
|
|
|
@patch('app.database.Database') |
|
def test_deposit_positive_amount(mock_db_class): |
|
mock_db_instance = mock_db_class.return_value |
|
transaction = Transaction(mock_db_instance) |
|
account_id = 1 |
|
amount = 500 |
|
initial_balance = 1000 |
|
mock_db_instance.get_account.return_value = (account_id, None, None, initial_balance) |
|
transaction.deposit(account_id, amount) |
|
mock_db_instance.get_account.assert_called_once_with(account_id) |
|
mock_db_instance.update_account_balance.assert_called_once_with(account_id, initial_balance + amount) |
|
mock_db_instance.add_transaction.assert_called_once_with(None, account_id, amount, "deposit") |
|
|
|
@patch('app.database.Database') |
|
def test_withdraw_positive_amount(mock_db_class): |
|
mock_db_instance = mock_db_class.return_value |
|
transaction = Transaction(mock_db_instance) |
|
account_id = 1 |
|
amount = 500 |
|
initial_balance = 1000 |
|
mock_db_instance.get_account.return_value = (account_id, None, None, initial_balance) |
|
transaction.withdraw(account_id, amount) |
|
mock_db_instance.get_account.assert_called_once_with(account_id) |
|
mock_db_instance.update_account_balance.assert_called_once_with(account_id, initial_balance - amount) |
|
mock_db_instance.add_transaction.assert_called_once_with(account_id, None, amount, "withdrawal") |
|
|
|
@patch('app.database.Database') |
|
def test_transfer_positive_amount(mock_db_class): |
|
mock_db_instance = mock_db_class.return_value |
|
transaction = Transaction(mock_db_instance) |
|
from_account_id = 1 |
|
to_account_id = 2 |
|
amount = 500 |
|
initial_balance_from = 1000 |
|
initial_balance_to = 2000 |
|
mock_db_instance.get_account.side_effect = [ |
|
(from_account_id, None, None, initial_balance_from), |
|
(to_account_id, None, None, initial_balance_to) |
|
] |
|
transaction.transfer(from_account_id, to_account_id, amount) |
|
mock_db_instance.get_account.assert_any_call(from_account_id) |
|
mock_db_instance.get_account.assert_any_call(to_account_id) |
|
mock_db_instance.update_account_balance.assert_any_call(from_account_id, initial_balance_from - amount) |
|
mock_db_instance.update_account_balance.assert_any_call(to_account_id, initial_balance_to + amount) |
|
mock_db_instance.add_transaction.assert_called_once_with(from_account_id, to_account_id, amount, "transfer") |