252 lines
8.1 KiB
Python
252 lines
8.1 KiB
Python
import pytest
|
|
import asyncio
|
|
from app.main import app
|
|
from httpx import AsyncClient
|
|
from datetime import datetime, timedelta
|
|
from app.database.models import Base, RbacUser, RbacPapel, RbacPermissao
|
|
# from fastapi_users_db_sqlalchemy import SQLAlchemyBaseUserTableUUID
|
|
from app.config import URL_BD_TESTE, SECRET
|
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
|
|
|
from app.rbac.classes_customizadas import CustomJWTStrategy
|
|
from app.rbac.auth import current_active_user
|
|
|
|
# Criação do engine de testes com o URL do banco de dados
|
|
engine = create_async_engine(URL_BD_TESTE)
|
|
|
|
# Configurando o async_sessionmaker para usar AsyncSession
|
|
TestSessionLocal = async_sessionmaker(
|
|
bind=engine,
|
|
class_=AsyncSession,
|
|
autoflush=False,
|
|
autocommit=False,
|
|
)
|
|
|
|
print("Configuração do sessionmaker concluída")
|
|
# Definindo a permissão fictícia que o papel de teste irá possuir
|
|
test_permissao = RbacPermissao(
|
|
id=1, # "ID" fictício, certifique-se de que o valor seja único e não cause conflitos
|
|
nome="Permissao_Fake"
|
|
)
|
|
|
|
# Definindo o papel fictício que o usuário de teste irá possuir
|
|
test_papel = RbacPapel(
|
|
# uuid=uuid.uuid4(),
|
|
nome="Teste_Papel",
|
|
permissoes=[test_permissao] # Adicione permissões conforme necessário para simular o comportamento real
|
|
)
|
|
|
|
# Definindo o usuário de teste que será simulado, incluindo o papel
|
|
test_user = RbacUser(
|
|
# id=uuid.uuid4(), # Gere um UUID único
|
|
email="test@email.com",
|
|
hashed_password="hashed-password", # Senha fictícia, pois a verificação não será feita
|
|
username="testuser",
|
|
full_name="Test User",
|
|
is_active=True,
|
|
is_superuser=False,
|
|
papeis=[test_papel] # Incluindo o papel definido anteriormente
|
|
)
|
|
|
|
|
|
def fake_current_user():
|
|
return test_user # Variável definida com o usuário fictício
|
|
|
|
|
|
# Suponha que você tenha uma lista de permissões que deseja simular
|
|
required_permissions_for_test = [1, 2] # "IDs" artificiais de permissões para o teste
|
|
|
|
|
|
# Função para criar e destruir o banco de dados de testes
|
|
async def create_test_database():
|
|
print("Dentro da função de criação do Banco de Dados")
|
|
async with engine.begin() as conn:
|
|
print("Apagando todas as tabelas...")
|
|
await conn.run_sync(Base.metadata.drop_all)
|
|
print("Criando todas as tabelas...")
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def anyio_backend():
|
|
return "asyncio"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
async def client():
|
|
print("Iniciando Cliente")
|
|
# Chama a função para criar o banco de dados de teste
|
|
await create_test_database()
|
|
# Inicializa permissões e papéis após a criação do banco de dados
|
|
|
|
# Definindo a sobrecarga de usuário
|
|
|
|
app.dependency_overrides[current_active_user] = fake_current_user
|
|
|
|
# Instanciando a estratégia JWT e gerando o token
|
|
strategy = CustomJWTStrategy(secret=SECRET, lifetime_seconds=3600)
|
|
token = await strategy.write_token(test_user)
|
|
|
|
async with AsyncClient(app=app, base_url="http://test") as client:
|
|
client.headers.update({"Authorization": f"Bearer {token}"})
|
|
yield client
|
|
|
|
|
|
# FUNÇÕES PARA ROTAS QUE REQUEREM AUTENTICAÇÃO
|
|
|
|
|
|
# MODULOS COM UUID PARA TESTES
|
|
@pytest.fixture(scope="session")
|
|
def datas_referencia():
|
|
data_atual = datetime.now().date()
|
|
return {
|
|
"data_atual": data_atual,
|
|
"data_anterior": data_atual - timedelta(days=1),
|
|
"data_posterior": data_atual + timedelta(days=1),
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_relacao_comercial():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e20", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e30", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
"uuid_9": None,
|
|
"uuid_10": None,
|
|
"uuid_11": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_tipo_endereco():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e40", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e50", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_pessoa():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e60", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e70", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None,
|
|
"uuid_7": None,
|
|
"uuid_8": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_endereco():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e80", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e90", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None,
|
|
"uuid_7": None,
|
|
"uuid_8": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_setor():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e21", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e32", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
"uuid_9": None,
|
|
"uuid_10": None,
|
|
"uuid_11": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_tipo_equipamento():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e22", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e31", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
"uuid_9": None,
|
|
"uuid_10": None,
|
|
"uuid_11": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_equipamento():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e23", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e32", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
"uuid_9": None,
|
|
"uuid_10": None,
|
|
"uuid_11": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_itens_equipamento():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e24", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e33", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
"uuid_9": None,
|
|
"uuid_10": None,
|
|
"uuid_11": None,
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def uuid_store_manutencao_equipamento():
|
|
return {
|
|
"uuid_1": "01915caf-2c4d-7270-a071-d928c87f8e25", # UUID inválido para testes
|
|
"uuid_2": "01915caf-2c4d-7270-a071-d928c87f8e34", # UUID inválido para testes
|
|
"uuid_3": None,
|
|
"uuid_4": None,
|
|
"uuid_5": None,
|
|
"uuid_6": None, # UUID para Relacionamento
|
|
"uuid_7": None, # UUID para Relacionamento
|
|
"uuid_8": None, # UUID para Relacionamento
|
|
"uuid_9": None,
|
|
"uuid_10": None,
|
|
"uuid_11": None,
|
|
}
|