- 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.
132 lines
5.0 KiB
YAML
132 lines
5.0 KiB
YAML
# 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.
|