Skip to content

Commit 0e452dd

Browse files
committed
feat: Add get transactions usecase
1 parent dd734f5 commit 0e452dd

2 files changed

Lines changed: 42 additions & 9 deletions

File tree

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
from typing import List
2+
23
from src.shared.domain.entities.transactions import Transaction
34
from src.shared.domain.repositories.transaction_repository_interface import ITransactionRepository
4-
from src.shared.domain.repositories.user_repository_interface import IUserRepository
5+
from src.shared.helpers.errors.domain_errors import EntityError
56
from src.shared.helpers.errors.usecase_errors import NoItemsFound
7+
from src.shared.infra.external.observability.observability_aws import ObservabilityAWS
68

79

810
class GetTransactionsByUserUsecase:
9-
10-
def __init__(self, repo_transaction: ITransactionRepository, repo_user: IUserRepository):
11-
self.repo_transaction = repo_transaction
12-
self.repo_user = repo_user
11+
def __init__(self, repo: ITransactionRepository, observability: ObservabilityAWS):
12+
self.repo = repo
13+
self.observability = observability
1314

1415
def __call__(self, user_id: str) -> List[Transaction]:
15-
user = self.repo_user.get_user_by_id(user_id)
16+
self.observability.log_usecase_in()
1617

17-
transactions = self.repo_transaction.get_all_transactions_by_user(user_id)
18+
if type(user_id) is not str:
19+
raise EntityError("user_id")
1820

19-
if not transactions:
20-
raise NoItemsFound("transactions")
21+
transactions = self.repo.get_all_transactions_by_user(user_id=user_id)
2122

23+
self.observability.log_usecase_out()
2224
return transactions
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import pytest
2+
3+
from src.modules.get_transactions_by_user.app.get_transactions_by_user_usecase import GetTransactionsByUserUsecase
4+
from src.shared.helpers.errors.domain_errors import EntityError
5+
from src.shared.helpers.errors.usecase_errors import NoItemsFound
6+
from src.shared.infra.external.observability.observability_mock import ObservabilityMock
7+
from src.shared.infra.repositories.transaction_repository_mock import TransactionRepositoryMock
8+
9+
observability = ObservabilityMock(module_name="get_transactions_by_user")
10+
11+
12+
class Test_GetTransactionsByUserUsecase:
13+
14+
def test_get_transactions_by_user_success(self):
15+
repo = TransactionRepositoryMock()
16+
usecase = GetTransactionsByUserUsecase(repo=repo, observability=observability)
17+
18+
first_tx = repo.transactions[0]
19+
valid_user_id = first_tx.user_id
20+
21+
result = usecase(user_id=valid_user_id)
22+
23+
assert isinstance(result, list)
24+
assert all(tx.user_id == valid_user_id for tx in result)
25+
26+
def test_get_transactions_by_user_invalid_type(self):
27+
repo = TransactionRepositoryMock()
28+
usecase = GetTransactionsByUserUsecase(repo=repo, observability=observability)
29+
30+
with pytest.raises(EntityError):
31+
usecase(user_id=123)

0 commit comments

Comments
 (0)