Skip to content

[Tests] Adiciona testes para getCityByName#721

Open
GustOki wants to merge 3 commits intoBrasilAPI:mainfrom
GustOki:main
Open

[Tests] Adiciona testes para getCityByName#721
GustOki wants to merge 3 commits intoBrasilAPI:mainfrom
GustOki:main

Conversation

@GustOki
Copy link
Copy Markdown

@GustOki GustOki commented Oct 31, 2025

Resumo


Este PR adiciona testes unitários para o método getCityByName() (pages/api/cptec/v1/cidade/[name].js) utilizando a cobertura de decisões/condições modificada (MD/DC).

Casos de Teste


  • CT1: Nome de cidade válido com sucesso;
  • CT2: Nome vazio após remoção de caracteres especiais;
  • CT3: getCityData retorna null;
  • CT4: getCityData retorna array vazio;
  • CT5: Erro interno não-BaseError no getCityData;
  • CT6: Nome válido mas getCityData lança BaseError.

@vercel
Copy link
Copy Markdown

vercel bot commented Oct 31, 2025

@GustOki is attempting to deploy a commit to the BrasilAPI Team on Vercel.

A member of the Team first needs to authorize it.

@sonarqubecloud
Copy link
Copy Markdown

@lucianopf
Copy link
Copy Markdown
Member

Olá @GustOki! Obrigado pela contribuição!

Percebi um anti-padrão no teste: o arquivo copia a implementação do handler diretamente dentro do teste:

// dentro do test file
const handler = async (req, res) => { ... } // cópia do handler real

Isso significa que o teste valida a cópia, não o handler de produção. Se o handler real em pages/api/cptec/v1/cidade/[name].js mudar, o teste continua passando sem detectar a regressão.

Para testes unitários de handlers Next.js, o correto é importar o handler real:

import handler from '@/pages/api/cptec/v1/cidade/[name]';

Porém, o projeto já tem testes E2E que cobrem esses endpoints em tests/cptec-v1.test.js. Você poderia detalhar o que esses testes unitários adicionam além da cobertura já existente? Isso ajudaria a entender se a abordagem faz sentido ou se seria melhor contribuir com o arquivo de testes E2E existente.

@lucianopf
Copy link
Copy Markdown
Member

Olá @GustOki! Obrigado pela contribuição nos testes do CPTEC.

No entanto, o projeto utiliza testes E2E (end-to-end) que fazem chamadas HTTP reais ao servidor local, não testes unitários com mocks. Veja o padrão nos outros arquivos de teste, como tests/cpetc/previsao-v1.test.js.

Algumas observações:

  • O caminho do arquivo (tests/pages/api/...) não segue o padrão do projeto (tests/{domínio}-v{n}.test.js)
  • O teste copia o código do handler diretamente, o que significa que não testaria mudanças no handler real
  • vi.mock é evitado — testes com mocks não detectam problemas de integração reais

Para contribuir com testes, reescreva usando E2E conforme o padrão do projeto. Qualquer dúvida, consulte o arquivo tests/cpetc/previsao-v1.test.js como referência.

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.

2 participants