Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added src/controllers/__init__.py
Empty file.
28 changes: 28 additions & 0 deletions src/controllers/user_creator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from src.models.repositories.interfaces.users_repository import UsersRepositoryInterface

class UserCreator:
def __init__(self, users_repository: UsersRepositoryInterface): # Inverção da dependência - D SOLID
self.__users_repo = users_repository

def insert_new_user(self, name: str, age: int, height: float) -> dict:
self.__check_if_user_exists(name)
self.__create_new_user(name, age, height)
return self.__format_response()

def __check_if_user_exists(self, name: str) -> None:
select_users = self.__users_repo.select_user(name)
if (not select_users or len(select_users) == 0):
return

raise Exception("User is not registered!")

def __create_new_user(self, name: str, age: int, height: float) -> None:
#Others Activates necessary (optional)
self.__users_repo.insert_user(name, age, height)

def __format_response(self) -> dict:
return {
"type": "Users",
"count": 1,
"message": "User is not registered!"
}
49 changes: 49 additions & 0 deletions src/controllers/user_creator_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import pytest
from src.controllers.user_creator import UserCreator

class UserRepositoryMock:
def __init__(self):
self.select_user_att = {}
self.insert_user_att = {}

def select_user(self, name: str) -> list:
self.select_user_att["name"] = name
return []

def insert_user(self, name: str, age: int, height: float) -> None:
self.insert_user_att["name"] = name
self.insert_user_att["age"] = age
self.insert_user_att["height"] = height


class UserRepositoryMockWithError:
def __init__(self):
self.select_user_att = {}

def select_user(self, name: str) -> list:
self.select_user_att["name"] = name
return [1, 2, 3]

def test_insert_new_user():
user_repository = UserRepositoryMock()
user_creator = UserCreator(user_repository)

name = "My name"
age = 42
height = 1.80

response = user_creator.insert_new_user(name, age, height)

assert isinstance(response, dict)
assert "type" in response
assert response["count"] == 1
assert response["message"] == "User is not registered!"

def test_insert_new_user_with_error():
user_repository = UserRepositoryMockWithError()
user_creator = UserCreator(user_repository)

with pytest.raises(Exception) as exc_info:
user_creator.insert_new_user("something", 42, 1.11)
assert str(exc_info.value) == "User is not registered!"

32 changes: 32 additions & 0 deletions src/controllers/user_finder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from src.models.repositories.interfaces.users_repository import UsersRepositoryInterface

class UserFinder:
def __init__(self, users_repository: UsersRepositoryInterface):
self.__users_repo = users_repository

def find_by_name(self, name:str) -> dict:
select_users = self.__select_and_validate_user(name)
return self.__format_response(select_users)
def __select_and_validate_user(self, name: str) -> list:
select_users = self.__users_repo.select_user(name)
if (not select_users or len(select_users) == 0):
raise Exception("User is not registered!")

return select_users

def __format_response(self, select_users: list) -> dict:
formatted_users = []
for user in select_users:
formatted_users.append({
"id": user.id,
"name": user.name,
"age": user.age,
"height": user.height
})

return {
"type": "Users",
"count": len(formatted_users),
"attributes": formatted_users
}

51 changes: 51 additions & 0 deletions src/controllers/user_finder_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import pytest
from src.models.entities.users import Users
from .user_finder import UserFinder

class UserRepositoryMock:
def __init__(self):
self.select_user_att = {}

def select_user(self, name: str) -> list:
self.select_user_att["name"] = name
return [
Users(
id=123,
name="tatu",
age=42,
height=3.20
)
]

class UserRepositoryMockWithError:
def __init__(self):
self.select_user_att = {}

def select_user(self, name: str) -> list:
self.select_user_att["name"] = name
return[]

def test_find_by_name():
name = "my_papa_name"
user_repo = UserRepositoryMock()
user_finder = UserFinder(user_repo)

response = user_finder.find_by_name(name)
print(response)
print(user_repo.select_user_att)

assert user_repo.select_user_att["name"] == name
assert isinstance(response, dict)
assert response["type"] == "Users"
assert "attributes" in response
assert isinstance(response["attributes"], list)

def test_find_by_name_with_error():
user_repo = UserRepositoryMockWithError()
user_finder = UserFinder(user_repo)

with pytest.raises(Exception) as exc_info:
user_finder.find_by_name("something")

assert str(exc_info.value) == "User is not registered!"

Empty file.
12 changes: 12 additions & 0 deletions src/models/repositories/interfaces/users_repository.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from abc import ABC, abstractmethod
from src.models.entities.users import Users

class UsersRepositoryInterface:

@abstractmethod
def insert_user(self, name: str, age: int, height: float) -> None:
pass
@abstractmethod
def select_user(self, name: str) -> list[Users]:
pass

4 changes: 3 additions & 1 deletion src/models/repositories/users_repository.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from src.models.connection.db_connection_handler import DbConnectionHandler
from src.models.entities.users import Users
class UsersRepository:
from .interfaces.users_repository import UsersRepositoryInterface

class UsersRepository(UsersRepositoryInterface):
def __init__(self, db_conn_handler: DbConnectionHandler):
self.__db_conn_handler = db_conn_handler

Expand Down
Loading