api-admim/tests/bkp_conftest.py

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,
}