Coverage for tests/test_integration.py: 100%
32 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-30 23:18 +0000
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-30 23:18 +0000
1import pytest
2from unittest.mock import patch
3from decimal import Decimal
4from classes.account_manager import AccountManager
5from classes.transaction_manager import TransactionManager
6from classes.currency_manager import CurrencyManager
7from unittest.mock import patch
9@pytest.fixture
10def mock_database_connection():
11 with patch('config.database.Database.get_connection') as mock_connection:
12 mock_cursor = mock_connection.return_value.cursor.return_value
13 mock_cursor.execute.return_value = None
14 yield mock_connection
15def test_complete_transaction_flow(mock_database_connection):
16 # Simula la obtención de balances
17 with patch('classes.currency_manager.CurrencyManager.convert_currency', return_value=(Decimal("0.92"), Decimal("92.00"))):
18 result = TransactionManager.register_transaction(1, "USD", "EUR", Decimal("100.00"), Decimal("0.92"), Decimal("92.00"))
19 assert result is True
20 # Simula la actualización de balances
21 with patch('classes.account_manager.AccountManager.update_balances') as mock_update_balances:
22 mock_update_balances.return_value = True
23 result = AccountManager.update_balances(1, "USD", "EUR", Decimal("100.00"), Decimal("92.00"))
24 assert result is True
25 # Verifica que se hayan realizado las actualizaciones correctamente
26 mock_cursor = mock_database_connection.return_value.cursor.return_value
27 # Verificar la inserción de la transacción
28 mock_cursor.execute.assert_any_call(
29 'INSERT INTO Transactions (UserId, FromCurrency, ToCurrency, Amount, Rate, Result, TransactionDate) VALUES (?, ?, ?, ?, ?, ?, ?)',
30 1, 'USD', 'EUR', Decimal('100.00'), Decimal('0.92'), Decimal('92.00'),
31 TransactionManager.fecha
32 )
34'''
35def test_transaction_with_insufficient_funds(mock_database_connection):
36 # Simulamos el comportamiento de la base de datos
37 mock_cursor = mock_database_connection.return_value.cursor.return_value
38 mock_cursor.fetchone.side_effect = [Decimal("50.00"), Decimal("500.00")] # Saldo insuficiente
40 # Simula la conversión de moneda
41 with patch('classes.currency_manager.CurrencyManager.convert_currency', return_value=(Decimal("0.9"), Decimal("90.00"))):
42 result = TransactionManager.register_transaction(1, "USD", "EUR", Decimal("100.00"), Decimal("0.9"), Decimal("90.00"))
43 assert result is False # No se debería registrar la transacción
44'''
46def test_get_user_transactions_after_transaction(mock_database_connection):
47 # Simula el registro de una transacción
48 with patch('classes.transaction_manager.TransactionManager.register_transaction', return_value=True):
49 TransactionManager.register_transaction(1, "USD", "EUR", Decimal("100.00"), Decimal("0.9"), Decimal("90.00"))
51 # Simula que se obtienen las transacciones
52 mock_cursor = mock_database_connection.return_value.cursor.return_value
53 mock_cursor.fetchall.return_value = [
54 (1, 1, "USD", "EUR", 100.00, 0.9, 90.00, "2024-01-01 12:00:00")
55 ]
57 transactions = TransactionManager.get_user_transactions(1)
58 assert len(transactions) == 1
59 assert transactions[0][2] == "USD" # Verifica que la divisa de origen es correcta