diff --git a/backend/tests/application/jobs/test_processar_ranking.py b/backend/tests/application/jobs/test_processar_ranking.py index 606343b..74cd42c 100644 --- a/backend/tests/application/jobs/test_processar_ranking.py +++ b/backend/tests/application/jobs/test_processar_ranking.py @@ -90,9 +90,9 @@ class TestObterEstatisticas: def test_estatisticas_calculadas(self): entries = [ - RankingEntry(id_pessoa=1, nome="A", posicao=1, pontuacao_total=300, bloco_a=100, bloco_b=80, bloco_c=60, bloco_d=40, bloco_e=20, ativo=True, anos_atuacao=5, detalhes={}), - RankingEntry(id_pessoa=2, nome="B", posicao=2, pontuacao_total=200, bloco_a=80, bloco_b=50, bloco_c=40, bloco_d=20, bloco_e=10, ativo=True, anos_atuacao=3, detalhes={}), - RankingEntry(id_pessoa=3, nome="C", posicao=3, pontuacao_total=100, bloco_a=40, bloco_b=30, bloco_c=20, bloco_d=5, bloco_e=5, ativo=False, anos_atuacao=2, detalhes={}), + RankingEntry(id_pessoa=1, nome="A", posicao=1, pontuacao_total=300, bloco_a=100, bloco_b=80, bloco_c=60, bloco_d=40, bloco_e=20, ativo=True, e_consultor=True, anos_atuacao=5, detalhes={}), + RankingEntry(id_pessoa=2, nome="B", posicao=2, pontuacao_total=200, bloco_a=80, bloco_b=50, bloco_c=40, bloco_d=20, bloco_e=10, ativo=True, e_consultor=True, anos_atuacao=3, detalhes={}), + RankingEntry(id_pessoa=3, nome="C", posicao=3, pontuacao_total=100, bloco_a=40, bloco_b=30, bloco_c=20, bloco_d=5, bloco_e=5, ativo=False, e_consultor=True, anos_atuacao=2, detalhes={}), ] stats = ProcessarRankingJob._obter_estatisticas(entries) assert stats["total_consultores"] == 3 @@ -104,8 +104,8 @@ class TestObterEstatisticas: def test_media_componentes(self): entries = [ - RankingEntry(id_pessoa=1, nome="A", posicao=1, pontuacao_total=300, bloco_a=100, bloco_b=50, bloco_c=80, bloco_d=40, bloco_e=30, ativo=True, anos_atuacao=5, detalhes={}), - RankingEntry(id_pessoa=2, nome="B", posicao=2, pontuacao_total=200, bloco_a=80, bloco_b=30, bloco_c=60, bloco_d=20, bloco_e=10, ativo=True, anos_atuacao=3, detalhes={}), + RankingEntry(id_pessoa=1, nome="A", posicao=1, pontuacao_total=300, bloco_a=100, bloco_b=50, bloco_c=80, bloco_d=40, bloco_e=30, ativo=True, e_consultor=True, anos_atuacao=5, detalhes={}), + RankingEntry(id_pessoa=2, nome="B", posicao=2, pontuacao_total=200, bloco_a=80, bloco_b=30, bloco_c=60, bloco_d=20, bloco_e=10, ativo=True, e_consultor=True, anos_atuacao=3, detalhes={}), ] stats = ProcessarRankingJob._obter_estatisticas(entries) assert stats["media_componentes"]["a"] == 90.0 diff --git a/backend/tests/infrastructure/oracle/test_ranking_repository.py b/backend/tests/infrastructure/oracle/test_ranking_repository.py index f07f3e7..73a0a2e 100644 --- a/backend/tests/infrastructure/oracle/test_ranking_repository.py +++ b/backend/tests/infrastructure/oracle/test_ranking_repository.py @@ -182,3 +182,27 @@ def test_contar_para_exportacao_com_filtros(repo, oracle_client): assert params["ativo"] == "S" assert params["selo_0"] == "EVENTO" assert params["selo_1"] == "PROJ" + + +def test_filtro_ativo_filtra_apenas_consultores(repo, oracle_client): + oracle_client.executar_query.return_value = [{"TOTAL": 100}] + + repo.contar_total(filtro_ativo=True) + + call_args = oracle_client.executar_query.call_args + query = call_args[0][0] + assert "E_CONSULTOR = 'S'" in query + assert "ATIVO = :ativo" in query + + +def test_filtro_ativo_false_filtra_apenas_consultores(repo, oracle_client): + oracle_client.executar_query.return_value = [{"TOTAL": 100}] + + repo.contar_total(filtro_ativo=False) + + call_args = oracle_client.executar_query.call_args + query = call_args[0][0] + assert "E_CONSULTOR = 'S'" in query + assert "ATIVO = :ativo" in query + params = call_args[0][1] + assert params["ativo"] == "N" diff --git a/backend/tests/infrastructure/test_ranking_store.py b/backend/tests/infrastructure/test_ranking_store.py new file mode 100644 index 0000000..cac2980 --- /dev/null +++ b/backend/tests/infrastructure/test_ranking_store.py @@ -0,0 +1,120 @@ +import pytest +from src.infrastructure.ranking_store import RankingStore, RankingEntry + + +@pytest.fixture +def store(): + return RankingStore() + + +@pytest.fixture +def entries_com_consultores_e_nao_consultores(): + return [ + RankingEntry( + id_pessoa=1, + nome="Consultor Ativo", + posicao=1, + pontuacao_total=500, + bloco_a=200, + bloco_b=0, + bloco_c=150, + bloco_d=100, + bloco_e=50, + ativo=True, + e_consultor=True, + anos_atuacao=5.0, + detalhes={}, + ), + RankingEntry( + id_pessoa=2, + nome="Consultor Inativo", + posicao=2, + pontuacao_total=400, + bloco_a=200, + bloco_b=0, + bloco_c=100, + bloco_d=50, + bloco_e=50, + ativo=False, + e_consultor=True, + anos_atuacao=3.0, + detalhes={}, + ), + RankingEntry( + id_pessoa=3, + nome="Nao Consultor (Coordenador)", + posicao=3, + pontuacao_total=300, + bloco_a=250, + bloco_b=0, + bloco_c=0, + bloco_d=50, + bloco_e=0, + ativo=False, + e_consultor=False, + anos_atuacao=2.0, + detalhes={}, + ), + ] + + +@pytest.mark.asyncio +async def test_total_sem_filtro_traz_todos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + assert store.total() == 3 + + +@pytest.mark.asyncio +async def test_total_filtro_ativo_somente_consultores_ativos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + assert store.total(filtro_ativo=True) == 1 + + +@pytest.mark.asyncio +async def test_total_filtro_inativo_somente_consultores_inativos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + assert store.total(filtro_ativo=False) == 1 + + +@pytest.mark.asyncio +async def test_get_page_filtro_ativo_somente_consultores_ativos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + total, entries = store.get_page(page=1, size=10, filtro_ativo=True) + assert total == 1 + ids = [e.id_pessoa for e in entries] + assert 1 in ids + assert 2 not in ids + assert 3 not in ids + + +@pytest.mark.asyncio +async def test_get_page_filtro_inativo_somente_consultores_inativos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + total, entries = store.get_page(page=1, size=10, filtro_ativo=False) + assert total == 1 + ids = [e.id_pessoa for e in entries] + assert 2 in ids + assert 1 not in ids + assert 3 not in ids + + +@pytest.mark.asyncio +async def test_get_slice_filtro_ativo_somente_consultores_ativos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + total, entries = store.get_slice(offset=0, limit=10, filtro_ativo=True) + assert total == 1 + ids = [e.id_pessoa for e in entries] + assert 1 in ids + assert 2 not in ids + assert 3 not in ids + + +@pytest.mark.asyncio +async def test_get_page_sem_filtro_traz_todos(store, entries_com_consultores_e_nao_consultores): + await store.set_entries(entries_com_consultores_e_nao_consultores) + total, entries = store.get_page(page=1, size=10) + assert total == 3 + ids = [e.id_pessoa for e in entries] + assert 1 in ids + assert 2 in ids + assert 3 in ids