Dashboard-Automatizase/docs/qa/gates/3.4-gerenciar-credenciais-n8n.yml
Luis Erlacher 0152a2fda0 feat: add n8n API testing script for Google OAuth2 schema and existing credentials
- Implemented a bash script to test n8n API and retrieve credential schemas.
- Added types for API responses, Google Calendar, and WhatsApp instances.
- Configured Vitest for testing with React and added setup for testing-library.
2025-10-10 14:29:02 -03:00

132 lines
5.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Quality Gate: Story 3.4 - Gerenciar Credenciais Google OAuth via API do n8n
# Generated by Quinn (Test Architect)
schema: 1
story: "3.4"
story_title: "Gerenciar Credenciais Google OAuth via API do n8n"
gate: CONCERNS
status_reason: "Correção crítica de schema implementada com sucesso, mas testes de integração estão ausentes e há discrepância entre spec e implementação"
reviewer: "Quinn (Test Architect)"
updated: "2025-10-09T15:20:00Z"
waiver: { active: false }
top_issues:
- id: "IMPL-001"
severity: high
finding: "Função checkCredentialExists() mencionada na story (ACs e Technical Notes) não foi implementada. Código usa env var N8N_GOOGLE_CREDENTIAL_ID ao invés de verificar dinamicamente por userId"
suggested_action: "Alinhar implementação com spec OU atualizar story para refletir abordagem de credencial única compartilhada"
refs:
- "docs/stories/story-3-4-gerenciar-credenciais-n8n.md:286-308"
- "lib/n8n-api.ts:71-72"
- id: "TEST-001"
severity: high
finding: "Ausência de testes de integração para API Routes (/api/google-calendar/manage-credential e /api/google-calendar/callback)"
suggested_action: "Criar testes de integração para validar fluxo completo OAuth → callback → manage-credential → n8n"
refs:
- "app/api/google-calendar/callback/route.ts"
- "app/api/google-calendar/manage-credential/route.ts"
- id: "TEST-002"
severity: medium
finding: "Testes unitários não cobrem cenários de erro (validação 400 do n8n, falhas de rede, tokens inválidos)"
suggested_action: "Adicionar casos de teste para error paths em lib/__tests__/n8n-api.test.ts"
refs:
- "lib/__tests__/n8n-api.test.ts"
- id: "SEC-001"
severity: medium
finding: "Tokens OAuth trafegam via fetch interno sem criptografia em trânsito entre callback e manage-credential"
suggested_action: "Considerar refatorar para passar tokens via variável server-side ao invés de HTTP interno, OU validar que ambiente usa HTTPS"
refs:
- "app/api/google-calendar/callback/route.ts:104-118"
quality_score: 60
# Cálculo: 100 - (20 × 0 FAILs) - (10 × 4 CONCERNS) = 60
expires: "2025-10-23T00:00:00Z"
evidence:
tests_reviewed: 4
risks_identified: 4
trace:
ac_covered: [2, 3, 4, 5, 7] # ACs com alguma cobertura
ac_gaps: [1, 6] # AC1 (checkCredentialExists não implementada), AC6 (erro 400 não testado)
nfr_validation:
security:
status: CONCERNS
notes: |
⚠️ Client secret armazenado corretamente server-side (✓)
⚠️ API key n8n em env var (✓)
⚠️ Tokens OAuth trafegam via fetch interno (necessita revisão)
✓ Validação de autenticação Supabase em todas as routes
❌ Falta validação de origem/CSRF em callback
performance:
status: PASS
notes: |
✓ Chamadas HTTP assíncronas
✓ Sem bloqueios desnecessários
⚠️ Considerar timeout nos fetches para n8n API (resiliência)
reliability:
status: CONCERNS
notes: |
✓ Try/catch em todas as API routes
✓ Logs detalhados para debug
⚠️ Fallback de PUT→POST implementado (bom!)
❌ Sem retry logic para falhas transientes de rede
❌ Sem validação de response schema do n8n
maintainability:
status: PASS
notes: |
✓ Código bem documentado com JSDoc
✓ Separação de concerns (lib/n8n-api.ts)
✓ Refatoração para testabilidade (getApiConfig())
✓ Nomenclatura clara de funções
recommendations:
immediate: # Deve ser resolvido antes de produção
- action: "Adicionar testes de integração para fluxo completo OAuth"
refs:
- "app/api/google-calendar/callback/route.ts"
- "app/api/google-calendar/manage-credential/route.ts"
- action: "Resolver discrepância spec vs implementação: checkCredentialExists() ou documentar abordagem de credencial única"
refs:
- "docs/stories/story-3-4-gerenciar-credenciais-n8n.md"
- "lib/n8n-api.ts"
- action: "Adicionar validação de state/CSRF no callback OAuth para prevenir ataques"
refs:
- "app/api/google-calendar/callback/route.ts:19-20"
future: # Pode ser endereçado posteriormente
- action: "Implementar retry logic para chamadas n8n API (exponential backoff)"
refs:
- "lib/n8n-api.ts"
- action: "Adicionar timeout configurável nos fetches"
refs:
- "lib/n8n-api.ts"
- action: "Criar testes de erro para cenários de falha (400, 401, 403, 404, 500)"
refs:
- "lib/__tests__/n8n-api.test.ts"
- action: "Considerar uso de biblioteca de validação de schema (zod) para responses do n8n"
refs:
- "lib/n8n-api.ts"
history:
- at: "2025-10-09T15:20:00Z"
gate: CONCERNS
note: |
Revisão inicial após correção do erro de validação de schema n8n.
Bug crítico corrigido (campos sendAdditionalBodyProperties/additionalBodyProperties).
Testes unitários passando (4/4).
Identificadas lacunas em testes de integração e discrepância spec vs implementação.