# 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.