- 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
295 lines
6.4 KiB
Python
295 lines
6.4 KiB
Python
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],
|
|
)
|