Skip to content
Open
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
2 changes: 1 addition & 1 deletion iac/requirements-infra.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
aws-cdk-lib==2.126.0
aws-cdk-lib==2.211.0
2 changes: 1 addition & 1 deletion requirements-app.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pytest==8.4.1
pytest-cov==6.2.1
pydantic==2.11.7
pydantic[email]==2.11.7
python-dotenv==1.1.1
77 changes: 25 additions & 52 deletions src/shared/domain/entities/user.py
Original file line number Diff line number Diff line change
@@ -1,60 +1,33 @@
import abc
import re
import uuid

from src.shared.domain.enums.state_enum import STATE
from src.shared.helpers.errors.domain_errors import EntityError
from pydantic import BaseModel, ConfigDict, EmailStr, Field

from src.shared.domain.enums.role_enum import RoleEnum

class User(abc.ABC):
name: str
email: str
state: STATE
MIN_NAME_LENGTH = 2
user_id: int

def __init__(self, name: str, email: str, state: STATE, user_id: int = None):
if not User.validate_name(name):
raise EntityError("name")
self.name = name
class User(BaseModel):
id: uuid.UUID = Field(
default_factory=uuid.uuid4,
description="Id unico do usuário"
)

if not User.validate_email(email):
raise EntityError("email")
self.email = email
email: EmailStr = Field(
...,
description="Email do usuário"
)

if type(user_id) == int:
if user_id < 0:
raise EntityError("user_id")
role: RoleEnum = Field(
default=RoleEnum.USER,
description="Role do usuário"
)

if type(user_id) != int and user_id is not None:
raise EntityError("user_id")
senha_hash: str = Field(
...,
description="Hash da senha do usuário"
)

self.user_id = user_id

if type(state) != STATE:
raise EntityError("state")
self.state = state

@staticmethod
def validate_name(name: str) -> bool:
if name is None:
return False
elif type(name) != str:
return False
elif len(name) < User.MIN_NAME_LENGTH:
return False

return True

@staticmethod
def validate_email(email: str) -> bool:
if email is None:
return False

regex = re.compile(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)")

return bool(re.fullmatch(regex, email))



def __repr__(self):
return f"User(name={self.name}, email={self.email}, user_id={self.user_id}, state={self.state})"
model_config = ConfigDict(
use_enum_values=True,
extra="forbid",
populate_by_name=True
)
6 changes: 6 additions & 0 deletions src/shared/domain/enums/role_enum.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from enum import Enum


class RoleEnum(str, Enum):
ADMIN = "Admin"
USER = "User"
170 changes: 85 additions & 85 deletions tests/modules/create_user/app/test_create_user_controller.py
Original file line number Diff line number Diff line change
@@ -1,85 +1,85 @@
from src.modules.create_user.app.create_user_controller import CreateUserController
from src.modules.create_user.app.create_user_usecase import CreateUserUsecase
from src.shared.helpers.external_interfaces.http_models import HttpRequest
from src.shared.infra.repositories.user_repository_mock import UserRepositoryMock


class Test_CreateUserControler:
def test_create_user_controller(self):
repo = UserRepositoryMock()
usecase = CreateUserUsecase(repo=repo)
controller = CreateUserController(usecase=usecase)

request = HttpRequest(body={
'name': 'Branco do Branco Branco da Silva',
'email': 'branco@branco.com'
})

response = controller(request=request)

assert response.status_code == 201
assert response.body['user_id'] == repo.users[-1].user_id
assert response.body['name'] == repo.users[-1].name
assert response.body['email'] == repo.users[-1].email
assert response.body['state'] == repo.users[-1].state.value
assert response.body['message'] == "the user was created successfully"

def test_create_user_controller_missing_name(self):
repo = UserRepositoryMock()
usecase = CreateUserUsecase(repo=repo)
controller = CreateUserController(usecase=usecase)

request = HttpRequest(body={
'email': '21.01444-2@maua.br'})

response = controller(request=request)

assert response.status_code == 400
assert response.body == "Field name is missing"


def test_create_user_controller_missing_email(self):
repo = UserRepositoryMock()
usecase = CreateUserUsecase(repo=repo)
controller = CreateUserController(usecase=usecase)

request = HttpRequest(body={
'name': 'Branco do Branco Branco da Silva'})

response = controller(request=request)

assert response.status_code == 400
assert response.body == "Field email is missing"

def test_create_user_controller_invalid_email(self):
repo = UserRepositoryMock()
usecase = CreateUserUsecase(repo=repo)
controller = CreateUserController(usecase=usecase)

request = HttpRequest(body={
'name': 'Branco do Branco Branco da Silva',
'email': 'branco@branco'})

response = controller(request=request)

assert response.status_code == 400
assert response.body == "Field email is not valid"

def test_create_user_controller_invalid_name(self):
repo = UserRepositoryMock()
usecase = CreateUserUsecase(repo=repo)
controller = CreateUserController(usecase=usecase)

request = HttpRequest(body={
'name': 'B',
'email': 'branco@branco.com'})

response = controller(request=request)

assert response.status_code == 400
assert response.body == "Field name is not valid"





#from src.modules.create_user.app.create_user_controller import CreateUserController
#from src.modules.create_user.app.create_user_usecase import CreateUserUsecase
#from src.shared.helpers.external_interfaces.http_models import HttpRequest
#from src.shared.infra.repositories.user_repository_mock import UserRepositoryMock
#
#
#class Test_CreateUserControler:
# def test_create_user_controller(self):
# repo = UserRepositoryMock()
# usecase = CreateUserUsecase(repo=repo)
# controller = CreateUserController(usecase=usecase)
#
# request = HttpRequest(body={
# 'name': 'Branco do Branco Branco da Silva',
# 'email': 'branco@branco.com'
# })
#
# response = controller(request=request)
#
# assert response.status_code == 201
# assert response.body['user_id'] == repo.users[-1].user_id
# assert response.body['name'] == repo.users[-1].name
# assert response.body['email'] == repo.users[-1].email
# assert response.body['state'] == repo.users[-1].state.value
# assert response.body['message'] == "the user was created successfully"
#
# def test_create_user_controller_missing_name(self):
# repo = UserRepositoryMock()
# usecase = CreateUserUsecase(repo=repo)
# controller = CreateUserController(usecase=usecase)
#
# request = HttpRequest(body={
# 'email': '21.01444-2@maua.br'})
#
# response = controller(request=request)
#
# assert response.status_code == 400
# assert response.body == "Field name is missing"
#
#
# def test_create_user_controller_missing_email(self):
# repo = UserRepositoryMock()
# usecase = CreateUserUsecase(repo=repo)
# controller = CreateUserController(usecase=usecase)
#
# request = HttpRequest(body={
# 'name': 'Branco do Branco Branco da Silva'})
#
# response = controller(request=request)
#
# assert response.status_code == 400
# assert response.body == "Field email is missing"
#
# def test_create_user_controller_invalid_email(self):
# repo = UserRepositoryMock()
# usecase = CreateUserUsecase(repo=repo)
# controller = CreateUserController(usecase=usecase)
#
# request = HttpRequest(body={
# 'name': 'Branco do Branco Branco da Silva',
# 'email': 'branco@branco'})
#
# response = controller(request=request)
#
# assert response.status_code == 400
# assert response.body == "Field email is not valid"
#
# def test_create_user_controller_invalid_name(self):
# repo = UserRepositoryMock()
# usecase = CreateUserUsecase(repo=repo)
# controller = CreateUserController(usecase=usecase)
#
# request = HttpRequest(body={
# 'name': 'B',
# 'email': 'branco@branco.com'})
#
# response = controller(request=request)
#
# assert response.status_code == 400
# assert response.body == "Field name is not valid"
#
#
#
#
#
Loading
Loading