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

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 

8 

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 ) 

33 

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 

39 

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''' 

45 

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

50 

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 ] 

56 

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