lab-testing-maksktl created by GitHub Classroom
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

# - 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")