feat(tests): adicionar suite completa de testes automatizados
- 198 testes cobrindo todos os módulos do backend - Testes unitários para calculador de pontuação (56 testes) - Testes para value objects de período (23 testes) - Testes para cliente Elasticsearch com mocks (27 testes) - Testes para repository de consultores (48 testes) - Testes de integração ES + Repository (6 testes) - Testes para API routes FastAPI (23 testes) - Testes para job de processamento (16 testes) - Cobertura de 54% do código
This commit is contained in:
294
backend/tests/conftest.py
Normal file
294
backend/tests/conftest.py
Normal file
@@ -0,0 +1,294 @@
|
||||
import pytest
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from src.domain.entities.consultor import (
|
||||
Consultor,
|
||||
CoordenacaoCapes,
|
||||
Consultoria,
|
||||
Inscricao,
|
||||
AvaliacaoComissao,
|
||||
Premiacao,
|
||||
BolsaCNPQ,
|
||||
Participacao,
|
||||
Orientacao,
|
||||
MembroBanca,
|
||||
)
|
||||
from src.domain.value_objects.periodo import Periodo
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def data_referencia():
|
||||
return datetime(2025, 1, 1)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def hoje():
|
||||
return datetime.now()
|
||||
|
||||
|
||||
def criar_periodo(anos_atras: int, ativo: bool = False, duracao_anos: int = 0) -> Periodo:
|
||||
inicio = datetime.now() - relativedelta(years=anos_atras)
|
||||
if ativo:
|
||||
fim = None
|
||||
else:
|
||||
fim = inicio + relativedelta(years=duracao_anos) if duracao_anos > 0 else datetime.now()
|
||||
return Periodo(inicio=inicio, fim=fim)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def periodo_ativo_5_anos():
|
||||
return criar_periodo(anos_atras=5, ativo=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def periodo_historico_3_anos():
|
||||
return criar_periodo(anos_atras=5, duracao_anos=3)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def periodo_historico_10_anos():
|
||||
return criar_periodo(anos_atras=12, duracao_anos=10)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def coordenacao_ca_ativa(periodo_ativo_5_anos):
|
||||
return CoordenacaoCapes(
|
||||
codigo="CA",
|
||||
tipo="Coordenador de Área",
|
||||
area_avaliacao="CIÊNCIAS AMBIENTAIS",
|
||||
periodo=periodo_ativo_5_anos,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def coordenacao_ca_historica(periodo_historico_3_anos):
|
||||
return CoordenacaoCapes(
|
||||
codigo="CA",
|
||||
tipo="Coordenador de Área",
|
||||
area_avaliacao="MEDICINA I",
|
||||
periodo=periodo_historico_3_anos,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def coordenacao_caj_ativa():
|
||||
return CoordenacaoCapes(
|
||||
codigo="CAJ",
|
||||
tipo="Coordenador Adjunto",
|
||||
area_avaliacao="ENGENHARIA I",
|
||||
periodo=criar_periodo(anos_atras=3, ativo=True),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def coordenacao_caj_mp_historica():
|
||||
return CoordenacaoCapes(
|
||||
codigo="CAJ_MP",
|
||||
tipo="Coordenador Adjunto de Mestrado Profissionalizante",
|
||||
area_avaliacao="ADMINISTRAÇÃO",
|
||||
periodo=criar_periodo(anos_atras=6, duracao_anos=4),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def coordenacao_cam_ativa():
|
||||
return CoordenacaoCapes(
|
||||
codigo="CAM",
|
||||
tipo="Câmara Temática",
|
||||
area_avaliacao="INTERDISCIPLINAR",
|
||||
periodo=criar_periodo(anos_atras=2, ativo=True),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def consultoria_ativa_8_anos():
|
||||
return Consultoria(
|
||||
codigo="CONS_ATIVO",
|
||||
situacao="Atividade Contínua",
|
||||
periodo=criar_periodo(anos_atras=8, ativo=True),
|
||||
periodos=[criar_periodo(anos_atras=8, ativo=True)],
|
||||
anos_consecutivos=8,
|
||||
retornos=0,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def consultoria_historica_5_anos():
|
||||
return Consultoria(
|
||||
codigo="CONS_HIST",
|
||||
situacao="Inativo",
|
||||
periodo=criar_periodo(anos_atras=7, duracao_anos=5),
|
||||
periodos=[criar_periodo(anos_atras=7, duracao_anos=5)],
|
||||
anos_consecutivos=5,
|
||||
retornos=0,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def consultoria_com_retorno():
|
||||
periodo1 = criar_periodo(anos_atras=10, duracao_anos=3)
|
||||
periodo2 = criar_periodo(anos_atras=4, ativo=True)
|
||||
return Consultoria(
|
||||
codigo="CONS_ATIVO",
|
||||
situacao="Atividade Contínua",
|
||||
periodo=periodo2,
|
||||
periodos=[periodo1, periodo2],
|
||||
anos_consecutivos=4,
|
||||
retornos=1,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def inscricao_autor():
|
||||
return Inscricao(
|
||||
codigo="INSC_AUTOR",
|
||||
tipo="Autor",
|
||||
premio="PCT",
|
||||
ano=2024,
|
||||
situacao="Aprovada",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def inscricao_institucional():
|
||||
return Inscricao(
|
||||
codigo="INSC_INST_AUTOR",
|
||||
tipo="Institucional",
|
||||
premio="PCT",
|
||||
ano=2024,
|
||||
situacao="Aprovada",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def avaliacao_comissao_premio():
|
||||
return AvaliacaoComissao(
|
||||
codigo="AVAL_COMIS_PREMIO",
|
||||
tipo="Membro de Comissão",
|
||||
premio="PCT",
|
||||
ano=2024,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def avaliacao_comissao_gp():
|
||||
return AvaliacaoComissao(
|
||||
codigo="AVAL_COMIS_GP",
|
||||
tipo="Membro de Comissão",
|
||||
premio="Grande Prêmio",
|
||||
ano=2024,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def coord_comissao_premio():
|
||||
return AvaliacaoComissao(
|
||||
codigo="COORD_COMIS_PREMIO",
|
||||
tipo="Coordenador/Presidente",
|
||||
premio="PCT",
|
||||
ano=2024,
|
||||
comissao_tipo="Coordenador",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def premiacao_gp_autor():
|
||||
return Premiacao(
|
||||
codigo="PREMIACAO_GP_AUTOR",
|
||||
tipo="Grande Prêmio",
|
||||
nome_premio="Grande Prêmio CAPES de Tese",
|
||||
ano=2024,
|
||||
papel="Autor",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def premiacao_autor():
|
||||
return Premiacao(
|
||||
codigo="PREMIACAO_AUTOR",
|
||||
tipo="Prêmio",
|
||||
nome_premio="Prêmio CAPES de Tese",
|
||||
ano=2024,
|
||||
papel="Autor",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mencao_autor():
|
||||
return Premiacao(
|
||||
codigo="MENCAO_AUTOR",
|
||||
tipo="Menção Honrosa",
|
||||
nome_premio="Prêmio CAPES de Tese",
|
||||
ano=2024,
|
||||
papel="Autor",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def bolsa_cnpq():
|
||||
return BolsaCNPQ(
|
||||
codigo="BOL_BPQ_NIVEL",
|
||||
nivel="1A",
|
||||
area="Ciências Exatas",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def participacao_evento():
|
||||
return Participacao(
|
||||
codigo="EVENTO",
|
||||
tipo="Evento",
|
||||
descricao="Seminário CAPES 2024",
|
||||
ano=2024,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def participacao_projeto():
|
||||
return Participacao(
|
||||
codigo="PROJ",
|
||||
tipo="Projeto",
|
||||
descricao="Projeto de Pesquisa",
|
||||
ano=2024,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def consultor_vazio():
|
||||
return Consultor(
|
||||
id_pessoa=1,
|
||||
nome="Consultor Vazio",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def consultor_coordenador_area(coordenacao_ca_ativa):
|
||||
return Consultor(
|
||||
id_pessoa=2,
|
||||
nome="Coordenador de Área Ativo",
|
||||
coordenacoes_capes=[coordenacao_ca_ativa],
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def consultor_completo(
|
||||
coordenacao_ca_ativa,
|
||||
consultoria_ativa_8_anos,
|
||||
inscricao_autor,
|
||||
avaliacao_comissao_premio,
|
||||
premiacao_autor,
|
||||
bolsa_cnpq,
|
||||
participacao_evento,
|
||||
):
|
||||
return Consultor(
|
||||
id_pessoa=3,
|
||||
nome="Consultor Completo",
|
||||
coordenacoes_capes=[coordenacao_ca_ativa],
|
||||
consultoria=consultoria_ativa_8_anos,
|
||||
inscricoes=[inscricao_autor],
|
||||
avaliacoes_comissao=[avaliacao_comissao_premio],
|
||||
premiacoes=[premiacao_autor],
|
||||
bolsas_cnpq=[bolsa_cnpq],
|
||||
participacoes=[participacao_evento],
|
||||
)
|
||||
Reference in New Issue
Block a user