Skip to content

PAV-128 — Correção do coverage do sistema - #259

Merged
hltav merged 4 commits into
developfrom
PAV-128-get-jobs-search
Oct 1, 2026
Merged

hltav merged 4 commits into
developfrom
PAV-128-get-jobs-search

Conversation

@Benevanio

Copy link
Copy Markdown
Collaborator

Linear

Issue: PAV-128

Branch flow

  • Este PR é uma feature/fix/chore destinada a develop.
  • Este PR não contém alteração direta ou fluxo indevido para master.
  • A branch foi criada a partir da base prevista pelo fluxo do projeto.

Objetivo

Corrigir e ampliar o coverage do sistema após as alterações no catálogo de vagas, filtros e cache, adicionando testes para fluxos críticos de backend, painel admin e frontend, e estabilizando a execução da suíte do front_admin.

Escopo

O que faz parte desta entrega:

  • Ampliação/adição de testes unitários e de integração no backend (SavedJobs/Application Notes, busca de vagas, match de perfil, scripts de backfill de PII e seed).
  • Adição de testes no front_admin para layouts, dashboard, observabilidade, permissões, scrapers e usuários.
  • Adição de testes no frontend para schemas do novo dashboard, utils, HelpTab e ajuste de mocks de login.
  • Ajuste de configuração do Vitest no front_admin (maxWorkers: 2).

O que está fora do escopo:

  • Alterações de comportamento funcional em produção.
  • Alterações de schema, migrations ou contratos de API.
  • Refatorações estruturais não relacionadas a coverage.

Resumo das alterações

  • Backend / SavedJobs: testes de integração para notas de candidatura (list, create, update, delete) e testes unitários do ApplicationNotesService com validação de ownership e escopo por usuário/vaga/nota.
  • Backend / Jobs: novo teste de integração de GET /jobs/search cobrindo filtros, cache, fallback legacy, paginação e match score; ampliação do teste do searchJobs.service; novo teste do JobProfileMatchService.
  • Backend / Scripts: testes para backfillUserPii (dry-run e --write) e para seed.
  • Front Admin: cobertura de NotificationButton, SidebarFooter, TimeFilter, DashboardPage, PlatformChart, hooks do dashboard, ObservabilityPage/ObservabilityPanelCard, PermissionsPage, ScrapersPage/useScrapers, UsersPage e UserList.
  • Frontend: cobertura de schemas runtime do new_dashboard, utils (jobModelFilters, locationFilters, searchKeywords), HelpTab e ajuste de testes de loading do login.
  • Config: front_admin/vite.config.ts com maxWorkers: 2.

Arquivos e módulos afetados

  • backend/tests/integration/routes/savedJobs.routes.test.ts
  • backend/tests/integration/routes/searchJobs.routes.test.ts
  • backend/tests/unit/modules/jobs/jobProfileMatch.service.test.ts
  • backend/tests/unit/modules/jobs/searchJobs.service.test.ts
  • backend/tests/unit/modules/savedJobs/applicationNotes.service.test.ts
  • backend/tests/unit/scripts/backfillUserPii.test.ts
  • backend/tests/unit/scripts/seed.test.ts
  • front_admin/tests/app/layouts/**
  • front_admin/tests/modules/**
  • front_admin/vite.config.ts
  • frontend/tests/unit/components/login/RigthSide.test.tsx
  • frontend/tests/unit/new_dashboard/**

Como testar

# backend
cd backend
npm test
npm run test:coverage

# front_admin
cd front_admin
npm test
npm run test:coverage

# frontend
cd frontend
npm test
npm run test:coverage

Validation

  • Lint executado
  • Testes relevantes executados
  • Coverage permanece dentro do mínimo do projeto
  • Build executado quando aplicável
  • Validação manual realizada quando aplicável
  • Documentação atualizada quando necessária

Impacto de banco / migration

  • Não altera schema nem migrations
  • Altera schema ou migrations

Detalhes: N/A

Impacto em contratos/API

  • Não altera contratos
  • Altera endpoint, payload, schema ou comportamento de API

Detalhes: N/A — os testes apenas validam contratos existentes.

Impacto de configuração / infraestrutura

  • Não altera configuração
  • Altera env, Docker, filas, cache, serviços ou infraestrutura

Detalhes: ajuste em front_admin/vite.config.ts adicionando maxWorkers: 2 para estabilizar a execução paralela dos testes. Sem impacto em runtime de produção.

Impacto de segurança

  • Sem impacto relevante
  • Impacto de segurança avaliado

Detalhes: os testes de backfillUserPii apenas exercitam a criptografia/hash de PII já existente; nenhuma mudança em lógica de segurança.

Impacto de dados pessoais / privacidade

  • Sem tratamento novo ou alteração de dados pessoais
  • Impacto avaliado

Detalhes: os testes utilizam dados fictícios (fixtures) para validar o pipeline de PII já existente.

Compatibilidade / dependências

  • Não depende de outra task/PR
  • Existe dependência ou ordem de deploy/merge

Detalhes: N/A

Evidências

  • Saída de npm run test:coverage (backend, front_admin, frontend) anexada na thread do card/PR.
  • Commits relacionados: Develop - Alterações no catálogo de vagas, filtros e cache, Develop (#258), feat(PAV-128): correção do coverage do sistema.

Riscos

  • Baixo: alterações restritas a testes e configuração de execução do Vitest.
  • Possível aumento do tempo total da suíte por conta do maxWorkers: 2 no front_admin (trade-off para estabilidade).

Rollback

Reverter o merge deste PR restaura o estado anterior dos testes e da configuração do Vitest. Como não há alterações de produção, o rollback é seguro e não impacta dados, contratos ou infraestrutura.

Checklist final

  • Escopo limitado ao card
  • Não inclui segredos, .env, certificados ou tokens
  • Não inclui arquivos temporários, builds, caches ou artefatos desnecessários
  • Não executa deploy como efeito desta PR
  • Critérios de aceite do card foram conferidos individualmente
  • Alterações de contrato possuem testes e documentação correspondentes
  • Alterações em banco/migrations foram validadas quando aplicável

Consulte o guia de contribuição do projeto para as regras completas.# PAV-128 — Correção do coverage do sistema

Linear

Issue: PAV-128

Branch flow

  • Este PR é uma feature/fix/chore destinada a develop.
  • Este PR não contém alteração direta ou fluxo indevido para master.
  • A branch foi criada a partir da base prevista pelo fluxo do projeto.

Objetivo

Corrigir e ampliar o coverage do sistema após as alterações no catálogo de vagas, filtros e cache, adicionando testes para fluxos críticos de backend, painel admin e frontend, e estabilizando a execução da suíte do front_admin.

Escopo

O que faz parte desta entrega:

  • Ampliação/adição de testes unitários e de integração no backend (SavedJobs/Application Notes, busca de vagas, match de perfil, scripts de backfill de PII e seed).
  • Adição de testes no front_admin para layouts, dashboard, observabilidade, permissões, scrapers e usuários.
  • Adição de testes no frontend para schemas do novo dashboard, utils, HelpTab e ajuste de mocks de login.
  • Ajuste de configuração do Vitest no front_admin (maxWorkers: 2).

O que está fora do escopo:

  • Alterações de comportamento funcional em produção.
  • Alterações de schema, migrations ou contratos de API.
  • Refatorações estruturais não relacionadas a coverage.

Resumo das alterações

  • Backend / SavedJobs: testes de integração para notas de candidatura (list, create, update, delete) e testes unitários do ApplicationNotesService com validação de ownership e escopo por usuário/vaga/nota.
  • Backend / Jobs: novo teste de integração de GET /jobs/search cobrindo filtros, cache, fallback legacy, paginação e match score; ampliação do teste do searchJobs.service; novo teste do JobProfileMatchService.
  • Backend / Scripts: testes para backfillUserPii (dry-run e --write) e para seed.
  • Front Admin: cobertura de NotificationButton, SidebarFooter, TimeFilter, DashboardPage, PlatformChart, hooks do dashboard, ObservabilityPage/ObservabilityPanelCard, PermissionsPage, ScrapersPage/useScrapers, UsersPage e UserList.
  • Frontend: cobertura de schemas runtime do new_dashboard, utils (jobModelFilters, locationFilters, searchKeywords), HelpTab e ajuste de testes de loading do login.
  • Config: front_admin/vite.config.ts com maxWorkers: 2.

Arquivos e módulos afetados

  • backend/tests/integration/routes/savedJobs.routes.test.ts
  • backend/tests/integration/routes/searchJobs.routes.test.ts
  • backend/tests/unit/modules/jobs/jobProfileMatch.service.test.ts
  • backend/tests/unit/modules/jobs/searchJobs.service.test.ts
  • backend/tests/unit/modules/savedJobs/applicationNotes.service.test.ts
  • backend/tests/unit/scripts/backfillUserPii.test.ts
  • backend/tests/unit/scripts/seed.test.ts
  • front_admin/tests/app/layouts/**
  • front_admin/tests/modules/**
  • front_admin/vite.config.ts
  • frontend/tests/unit/components/login/RigthSide.test.tsx
  • frontend/tests/unit/new_dashboard/**

Como testar

# backend
cd backend
npm test
npm run test:coverage

# front_admin
cd front_admin
npm test
npm run test:coverage

# frontend
cd frontend
npm test
npm run test:coverage

Validation

  • Lint executado
  • Testes relevantes executados
  • Coverage permanece dentro do mínimo do projeto
  • Build executado quando aplicável
  • Validação manual realizada quando aplicável
  • Documentação atualizada quando necessária

Impacto de banco / migration

  • Não altera schema nem migrations
  • Altera schema ou migrations

Detalhes: N/A

Impacto em contratos/API

  • Não altera contratos
  • Altera endpoint, payload, schema ou comportamento de API

Detalhes: N/A — os testes apenas validam contratos existentes.

Impacto de configuração / infraestrutura

  • Não altera configuração
  • Altera env, Docker, filas, cache, serviços ou infraestrutura

Detalhes: ajuste em front_admin/vite.config.ts adicionando maxWorkers: 2 para estabilizar a execução paralela dos testes. Sem impacto em runtime de produção.

Impacto de segurança

  • Sem impacto relevante
  • Impacto de segurança avaliado

Detalhes: os testes de backfillUserPii apenas exercitam a criptografia/hash de PII já existente; nenhuma mudança em lógica de segurança.

Impacto de dados pessoais / privacidade

  • Sem tratamento novo ou alteração de dados pessoais
  • Impacto avaliado

Detalhes: os testes utilizam dados fictícios (fixtures) para validar o pipeline de PII já existente.

Compatibilidade / dependências

  • Não depende de outra task/PR
  • Existe dependência ou ordem de deploy/merge

Detalhes: N/A

Evidências

  • Saída de npm run test:coverage (backend, front_admin, frontend) anexada na thread do card/PR.
  • Commits relacionados: Develop - Alterações no catálogo de vagas, filtros e cache, Develop (#258), feat(PAV-128): correção do coverage do sistema.

Riscos

  • Baixo: alterações restritas a testes e configuração de execução do Vitest.
  • Possível aumento do tempo total da suíte por conta do maxWorkers: 2 no front_admin (trade-off para estabilidade).

Rollback

Reverter o merge deste PR restaura o estado anterior dos testes e da configuração do Vitest. Como não há alterações de produção, o rollback é seguro e não impacta dados, contratos ou infraestrutura.

Checklist final

  • Escopo limitado ao card
  • Não inclui segredos, .env, certificados ou tokens
  • Não inclui arquivos temporários, builds, caches ou artefatos desnecessários
  • Não executa deploy como efeito desta PR
  • Critérios de aceite do card foram conferidos individualmente
  • Alterações de contrato possuem testes e documentação correspondentes
  • Alterações em banco/migrations foram validadas quando aplicável

…o catálogo de vagas, filtros e cache (#257)

## Visão geral

Este conjunto de mudanças amplia o suporte ao catálogo de vagas no
Valkey, melhora a paginação e hidratação de documentos, adiciona filtros
mais granulares no backend e torna o frontend mais resiliente a
respostas obsoletas. Também atualiza o seed local para criar vagas de
catálogo e preencher o perfil técnico do usuário `dev`.

## Backend

### Cache — `backend/src/lib/cache.ts`

- Adicionado o tipo `CacheJobsByIdsResult`:
  - `jobs`: vagas encontradas no Valkey.
- `missingIds`: IDs do índice sem documento `scraper:job:<id>` (órfãos).
- Criada a função `cacheGetJobsByIdsDetailed(ids)`:
  - Hidrata os documentos das vagas.
  - Informa quais IDs estão órfãos.
  - Retorna `{ jobs: [], missingIds: [] }` quando não há IDs.
- `cacheGetJobsByIds` agora delega para `cacheGetJobsByIdsDetailed`.
- Criada `cacheRemoveJobIndexIds(ids)`:
  - Remove IDs órfãos do índice global `scraper:jobs:index`.
  - Usa `sRem` e registra a operação.
  - Espelha o auto-reparo já feito pelo scraper Go.

### Filtros — `backend/src/modules/jobs/filters/jobSearch.filter.ts`

- Inferência de localização refatorada para `inferJobLocationParts`,
retornando:
  - `country`
  - `continent`
  - `location`
  - `state`
  - `city`
- Adicionadas regras de localização para diversos países e continentes:
- Brasil, EUA, Canadá, México, Argentina, Chile, Colômbia, Portugal,
Espanha, Reino Unido, França, Alemanha, Países Baixos, Índia, Singapura,
Austrália, Nova Zelândia e África do Sul.
- Adicionados estados brasileiros e cidades conhecidas.
- Criado `inferJobContract` para detectar:
  - `cooperado`
  - `pj`
  - `clt`
- `filterJobs` agora aceita e combina:
  - `continent`
  - `state`
  - `city`
  - `contract`
  - `company`
- Mantido o comportamento de combinação com `AND` e retorno antecipado
quando não há filtros.

### Parser — `backend/src/modules/jobs/parsers/jobSearchQuery.parser.ts`

- Adicionado suporte ao filtro `company`.
- Criado `hasPostOnlyFilters`, que indica quando a busca depende de
pós-filtragem.

### Serviço de busca —
`backend/src/modules/jobs/services/searchJobs.service.ts`

- Adicionado `MAX_HYDRATION_WINDOWS = 10`.
- Criada `hydrateIndexPage`:
  - Preenche a página avançando no índice quando há IDs órfãos.
  - Coleta `missingIds`.
  - Remove órfãos do índice global.
  - Calcula total real descontando órfãos.
- Criada `removeOrphanIds`:
  - Chama `cacheRemoveJobIndexIds`.
  - Registra aviso em caso de falha sem quebrar a requisição.
- Criada `orderIdsByProfileRelevance`:
  - Usa as tecnologias do perfil do candidato.
  - Prioriza vagas compatíveis com o perfil.
- A busca com filtro apenas de empresa usa pós-filtro.
- A busca normal usa hidratação paginada e ranking por perfil quando há
match.

### Tipos — `backend/src/modules/jobs/types/jobSearch.types.ts`

- `SearchJob` ganhou `company?: string | null`.
- `ParsedJobSearchQuery` ganhou `company: string[]`.

### Seed

- `backend/src/scripts/seed.ts`:
  - Usuário `dev` agora recebe perfil técnico:
    - React, TypeScript, Node.js, PostgreSQL, Docker e AWS.
  - Nível definido como `Pleno`.
  - Adicionada criptografia de tecnologias, experiências e nível.
  - Usuário existente tem o perfil técnico atualizado.
  - Executa `seedCatalogJobs()` no final.
- Novo arquivo `backend/src/scripts/seedCatalogJobs.ts`:
  - Cria 12 vagas de catálogo no Valkey.
  - Gera índices invertidos equivalentes aos do scraper.
  - Ordena as vagas por match com o perfil `dev`, de 99% a 45%.
  - Ignorado com aviso quando `VALKEY_URL` não está definida.

### Docker

- `docker-compose.migrate.yml`:
  - Adicionada a variável `VALKEY_URL: redis://valkey:6379/0`.

## Frontend

### `frontend/src/domains/jobs/application/useJobsData.ts`

- Adicionado `requestIdRef` para sequenciar requisições.
- Respostas antigas não sobrescrevem mais a lista exibida.
- `setLoading(false)` só ocorre se a requisição ainda for a mais
recente.

### `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`

- Removido o filtro local de modelo (`modelFilterMatchesJob`).
- O backend já aplica o filtro de modelo.
- Evita esconder vagas já filtradas e quebrar a contagem da página.
- O match só é recalculado localmente quando a API não devolveu score.

### `frontend/src/domains/new_dashboard/hooks/useDashboardJobs.ts`

- Adicionado `recommendationRequestIdRef`.
- Garante que apenas a resposta mais recente escreva nos estados de
recomendação.
- Erros e estados de carregamento ignoram respostas obsoletas.

###
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`

- `SearchJobFilters` expandido com:
  - `seniority`
  - `state`
  - `city`
  - `family`
  - `technology`
  - `company`
- Criado `buildFilterParams`:
  - Remove filtros vazios ou nulos.
  - Evita enviar parâmetros desnecessários.
- `toRecommendedJob` não inventa mais `matchScore`:
  - Usa o valor do backend quando disponível.
  - Caso contrário, usa `0`.

## Testes

- `backend/tests/unit/app.test.ts`:
  - Mocks para `cacheGetJobsByIdsDetailed` e `cacheRemoveJobIndexIds`.
  - Ajustes no teste de paginação.
- `backend/tests/unit/libs/cache.test.ts`:
  - Testes para `cacheGetJobsByIdsDetailed` e `cacheRemoveJobIndexIds`.
- `backend/tests/unit/modules/jobs/jobSearch.filter.test.ts`:
- Novos testes para localização, contrato, empresa, continente, estado,
cidade, tecnologia, família, senioridade, modalidade e ordenação.
- `backend/tests/unit/modules/jobs/searchJobs.service.test.ts`:
- Testes de hidratação do índice, remoção de órfãos, limite de janelas,
paginação, pós-filtro e priorização por perfil.
- `backend/tests/unit/scripts/seedCatalogJobs.test.ts`:
- Valida match esperado, ordenação, índices invertidos e unicidade de
IDs/URLs.

## Documentação e dicionário

- `LOCAL_DEVELOPMENT.md`:
- Atualizado para descrever o novo seed, as 12 vagas de catálogo e o
comportamento da aba `/vagas`.
- `.cspell/custom-dictionary-workspace.txt`:
- Adicionadas palavras como `orfao`, `indice`, `hidratacao`, `scraper`,
`srem`, `estagio`, `compativel`, `paginacao`, `senioridade`,
`modalidade`, `localizacao`.

## Impacto esperado

- Listagem de vagas mais consistente mesmo com IDs órfãos no Valkey.
- Paginação e total alinhados com os documentos realmente disponíveis.
- Filtros mais granulares sem depender exclusivamente dos índices do
scraper.
- Frontend sem condições de corrida ao trocar filtros ou páginas.
- Seed local mais realista para desenvolvimento e testes.
## Linear

Issue: PAV-___

## Branch flow

- [x] Este PR é uma feature/fix/chore destinada a `develop`.
- [ ] Este PR não contém alteração direta ou fluxo indevido para
`master`.
- [ ] A branch foi criada a partir da base prevista pelo fluxo do
projeto.

## Objetivo

Descreva objetivamente o problema resolvido por esta PR.

## Escopo

O que faz parte desta entrega:

-

O que está fora do escopo:

-

## Resumo das alterações

-

## Arquivos e módulos afetados

-

## Como testar

```bash
# comandos de validação
```

## Validation

- [ ] Lint executado
- [ ] Testes relevantes executados
- [ ] Coverage permanece dentro do mínimo do projeto
- [ ] Build executado quando aplicável
- [ ] Validação manual realizada quando aplicável
- [ ] Documentação atualizada quando necessária

## Impacto de banco / migration

- [ ] Não altera schema nem migrations
- [ ] Altera schema ou migrations

Detalhes:

## Impacto em contratos/API

- [ ] Não altera contratos
- [ ] Altera endpoint, payload, schema ou comportamento de API

Detalhes:

## Impacto de configuração / infraestrutura

- [ ] Não altera configuração
- [ ] Altera env, Docker, filas, cache, serviços ou infraestrutura

Detalhes:

## Impacto de segurança

- [ ] Sem impacto relevante
- [ ] Impacto de segurança avaliado

Detalhes:

## Impacto de dados pessoais / privacidade

- [ ] Sem tratamento novo ou alteração de dados pessoais
- [ ] Impacto avaliado

Detalhes:

## Compatibilidade / dependências

- [ ] Não depende de outra task/PR
- [ ] Existe dependência ou ordem de deploy/merge

Detalhes:

## Evidências

Adicione logs, screenshots, links de execução ou outra evidência
relevante.

## Riscos

-

## Rollback

Descreva como a alteração pode ser revertida com segurança.

## Checklist final

- [ ] Escopo limitado ao card
- [ ] Não inclui segredos, `.env`, certificados ou tokens
- [ ] Não inclui arquivos temporários, builds, caches ou artefatos
desnecessários
- [ ] Não executa deploy como efeito desta PR
- [ ] Critérios de aceite do card foram conferidos individualmente
- [ ] Alterações de contrato possuem testes e documentação
correspondentes
- [ ] Alterações em banco/migrations foram validadas quando aplicável

> Consulte o guia de contribuição do projeto para as regras completas.
Copilot AI lite review requested due to automatic review settings October 1, 2026 01:27
@Benevanio
Benevanio removed the request for review from Copilot October 1, 2026 01:28
Copilot AI lite review requested due to automatic review settings October 1, 2026 01:32

This comment was marked as spam.

@hltav
hltav merged commit ec75454 into develop Oct 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants