Guia de Testes — AgenciaPsi
Testes Automatizados
Pré-requisito
Vitest já instalado (npm install resolve). Não precisa de banco, Supabase ou variáveis de ambiente.
Comandos
| Comando |
Descrição |
npm test |
Roda todos os testes uma vez e exibe resultado |
npm run test:watch |
Modo watch — re-roda ao salvar arquivos |
npm run test:ui |
Abre UI visual no browser (http://localhost:51204) |
Arquivos de teste
| Arquivo |
O que cobre |
src/features/agenda/composables/__tests__/useRecurrence.spec.js |
Geração de datas por tipo de regra, max_occurrences global, exceções, remarcação cross-range |
src/features/agenda/services/__tests__/agendaMappers.spec.js |
Mapeamento para FullCalendar, ícones de status, cores, buildNextSessions, minutesToDuration, buildWeeklyBreakBackgroundEvents |
Quando rodar
- Antes de commitar qualquer mudança em
useRecurrence.js ou agendaMappers.js
- Ao adicionar novo tipo de frequência (mensal, quinzenal, etc.)
- Ao mexer em exceções de recorrência
- Em CI/CD antes do deploy
Testes Manuais
Preparação
- Limpar dados de teste no banco:
- Fazer login com seu usuário real
- Selecionar a clínica/tenant correto
1. Evento Avulso
| Passo |
Esperado |
| Clicar em um horário livre na agenda |
Dialog de criação abre |
| Preencher paciente, horário, modalidade → Salvar |
Evento aparece no calendário |
| Clicar no evento → Editar horário → Salvar |
Horário atualiza |
| Clicar no evento → Marcar como "Faltou" |
Cor muda para vermelho, ícone ✗ |
| Clicar no evento → Marcar como "Realizado" |
Cor muda para cinza, ícone ✓ |
| Clicar no evento → Cancelar sessão |
Cor muda para laranja, ícone ∅ |
| Clicar no evento → Excluir |
Evento some do calendário |
2. Recorrência Semanal
| Passo |
Esperado |
| Criar evento com frequência "Semanal" |
Ocorrências aparecem em todas as semanas seguintes com ícone ↻ |
| Navegar para a semana seguinte |
Ocorrências continuam aparecendo |
| Navegar para além do end_date |
Não aparecem ocorrências após a data final |
| Criar série com "4 sessões" (max_occurrences) |
Exatamente 4 ocorrências visíveis no calendário |
3. Recorrência Quinzenal e Dias Específicos
| Passo |
Esperado |
| Criar série "Quinzenal" |
Ocorrências aparecem a cada 2 semanas |
| Criar série "Dias específicos" (ex: seg + qua) |
Ambos os dias aparecem toda semana |
| Navegar para semanas futuras |
Padrão se mantém |
4. Edição de Série
| Passo |
Esperado |
| Clicar em ocorrência → Editar → "Somente este" → mudar horário |
Só aquela data muda; as outras continuam iguais |
| Clicar em ocorrência → Cancelar → "Somente este" |
Só aquela data some (ou aparece cancelada) |
| Clicar em ocorrência → Cancelar → "Este e os seguintes" |
A partir daquela data, sem mais ocorrências |
| Clicar em ocorrência → Cancelar → "Todos" |
Série inteira some |
5. Remarcação Cross-Range ⭐
Este é o caso mais importante a testar.
| Passo |
Esperado |
| Criar série semanal (ex: toda segunda) |
Ocorrências nas segundas |
| Clicar na sessão da semana 1 → Remarcar para terça da semana 2 |
— |
| Navegar para a semana 1 |
Segunda da semana 1 aparece vazia ou como "remarcado" |
| Navegar para a semana 2 |
Terça aparece com ícone ↺ e status "remarcado" |
6. Bloqueio de Agenda
| Passo |
Esperado |
| Criar bloqueio de horário |
Aparece no calendário com visual diferente (ícone ⊘) |
| Tentar agendar no horário bloqueado |
Aviso de conflito |
7. Agendamento Online (Agendador Público)
| Passo |
Esperado |
| Acessar URL pública do agendador |
Página pública abre sem login |
| Selecionar data/horário disponível → Enviar solicitação |
Confirmação exibida |
| No painel do terapeuta → "Agendamentos Recebidos" |
Solicitação aparece na lista |
| Clicar em "Confirmar" |
Evento criado na agenda |
| Clicar em "Recusar" |
Solicitação removida, sem evento na agenda |
8. Suporte Técnico SaaS
| Passo |
Esperado |
Logar como saas_admin → Menu "Suporte Técnico" |
Página de suporte abre |
| Selecionar um tenant → "Criar Sessão de Suporte" |
URL com token é gerada |
| Copiar URL e abrir em outra aba |
Agenda do terapeuta abre com banner de debug no rodapé |
| No banner → filtrar logs por categoria |
Logs filtram corretamente |
| No banner → "Desativar suporte" |
Banner some |
| No painel SaaS → "Revogar" na sessão ativa |
Token invalidado |
9. Multi-Tenancy (se você tem 2 clínicas cadastradas)
| Passo |
Esperado |
| Criar evento na clínica A |
Evento aparece na agenda da clínica A |
| Trocar para clínica B |
Evento da clínica A não aparece |
| Criar evento na clínica B |
Aparece apenas na clínica B |
Pedindo ao Claude para Executar os Testes
Como usar o Claude Code para rodar e corrigir testes
O Claude Code (este agente) consegue rodar os testes, ler os erros e corrigir os problemas automaticamente. Basta iniciar a conversa com o contexto certo.
Prompt de retomada recomendado
Cole isso no início de uma nova sessão com o Claude:
Estou desenvolvendo o AgenciaPsi. Temos testes automatizados com Vitest.
Arquivos de teste:
src/features/agenda/composables/__tests__/useRecurrence.spec.js — testa generateDates, expandRules, mergeWithStoredSessions
src/features/agenda/services/__tests__/agendaMappers.spec.js — testa mapeamento para FullCalendar
Rodar os testes: npm test
Por favor, rode os testes agora e me informe o resultado. Se houver falhas, analise a causa e corrija.
O que o Claude consegue fazer automaticamente
| Pedido |
O Claude faz |
| "Rode os testes" |
Executa npm test e exibe o resultado |
| "Tem algum teste falhando?" |
Roda e diagnóstica a causa raiz |
| "Corrija os testes que falham" |
Analisa erro, ajusta o código ou o teste e re-roda |
| "Adicionei a funcionalidade X, crie testes para ela" |
Lê o código e escreve novos casos no spec |
| "O teste Y está errado, o comportamento correto é Z" |
Atualiza a asserção e confirma que passa |
Boas práticas ao pedir testes ao Claude
- Forneça o
AUDITORIA.md no início da sessão — dá contexto sobre a arquitetura e decisões já tomadas
- Descreva o comportamento esperado em português, não o código — o Claude escreve o código do teste
- Se um teste falhar e você achar que o código está certo, diga isso explicitamente: "o teste está errado, não o código" — o Claude vai ajustar a asserção
- Se um teste falhar e você achar que o código está errado, diga: "o comportamento esperado é X" — o Claude vai corrigir a implementação
Exemplo de sessão típica
Adicionando Novos Testes
Para useRecurrence.spec.js