Guias
Checklist de Testes - Sistema de Favoritos
Checklist de Testes - Sistema de Favoritos
✅ SETUP INICIAL
- API Laravel rodando em
http://localhost:8000 - Frontend Nuxt rodando em
http://localhost:3000 - Banco de dados PostgreSQL ativo
- Usuário fornecedor criado e autenticado
📋 TESTES FUNCIONAIS
1. DASHBOARD - Licitações Urgentes
URL: http://localhost:3000/dashboard
Visualização:
- Seção "Últimas Licitações" aparece no dashboard
- Exibe até 10 licitações ordenadas por prazo (mais urgentes primeiro)
- Cada card mostra:
- Número da licitação
- Descrição (max 2 linhas)
- Badge de urgência colorido (dias restantes)
- Quantidade de itens
- Botão "Ver detalhes"
- Ícone de estrela (favoritar)
Badges de Urgência:
- Expirada (< 0 dias): fundo vermelho, texto vermelho
- Urgente (≤ 3 dias): fundo vermelho, texto vermelho
- Atenção (≤ 7 dias): fundo amarelo, texto amarelo
- Normal (> 7 dias): fundo verde, texto verde
Estados:
- Loading: Exibe 3 skeletons animados
- Vazio: Mostra mensagem "Nenhuma licitação disponível"
- Com dados: Renderiza cards corretamente
Funcionalidade de Favoritar:
- Clicar em estrela vazia adiciona aos favoritos
- Estrela fica preenchida e amarela
- Toast de sucesso aparece
- Botão fica desabilitado durante requisição
- Clicar em estrela preenchida remove dos favoritos
- Estrela fica vazia e cinza
- Toast de sucesso aparece
- Botão fica desabilitado durante requisição
- Não permite múltiplos cliques (loading state)
2. PÁGINA DE LICITAÇÕES
URL: http://localhost:3000/orders
Visualização Geral:
- Toolbar com filtros aparece no topo
- Botão "Favoritas" visível no toolbar
- Lista de licitações carrega corretamente
- Cada card possui ícone de estrela no canto superior direito
Botão de Filtro "Favoritas":
- Estado Normal:
- Fundo branco
- Borda cinza
- Ícone de estrela outline
- Estado Ativo:
- Fundo amarelo claro
- Borda amarela mais escura
- Ícone de estrela preenchido
- Checkmark (✓) aparece
Funcionalidade do Filtro:
- Clicar no botão ativa o filtro
- Botão muda para estado ativo
- Página volta para página 1
- Lista recarrega mostrando apenas favoritas
- Clicar novamente desativa o filtro
- Botão volta ao estado normal
- Lista recarrega mostrando todas as licitações
- URL não muda (filtro apenas via state)
Ícone de Favoritar nos Cards:
- Posição: Canto superior direito (absolute)
- Visual: Botão circular com hover
- Estados:
- Não favoritado: estrela outline cinza
- Favoritado: estrela preenchida amarela
- Loading: botão desabilitado com opacity 50%
Funcionalidade de Favoritar:
- Clicar em estrela vazia:
- Adiciona aos favoritos
- Estrela fica preenchida e amarela
- Toast de sucesso
- Botão desabilitado durante requisição
- Clicar em estrela preenchida:
- Remove dos favoritos
- Estrela fica vazia e cinza
- Toast de sucesso
- Se filtro "Favoritas" está ativo, card desaparece da lista
- Lista recarrega automaticamente
- Clicar no card não aciona favoritar (event.stopPropagation)
- Título do card tem padding-right para não sobrepor estrela
3. PÁGINA DE DETALHES
URL: http://localhost:3000/orders/[uuid]
- Página carrega corretamente
- Botão "Voltar" funciona
- Informações da licitação aparecem
- Botão "Enviar Proposta" está presente
🔄 TESTES DE INTEGRAÇÃO
Cenário 1: Favoritar no Dashboard
- Abrir dashboard
- Clicar em estrela vazia de uma licitação
- Verificar que estrela ficou preenchida
- Navegar para
/orders - Verificar que a mesma licitação está favoritada lá também
Cenário 2: Filtrar Favoritas
- Ir para
/orders - Favoritar 3 licitações diferentes
- Clicar no botão "Favoritas"
- Verificar que apenas as 3 aparecem
- Desfavoritar 1 delas
- Verificar que ela desaparece imediatamente (auto-reload)
- Verificar que restam apenas 2
Cenário 3: Limpar Filtros
- Ativar filtro "Favoritas"
- Aplicar outros filtros (categoria, raio, etc.)
- Clicar em "Limpar filtros"
- Verificar que filtro "Favoritas" foi desativado
- Verificar que todas as licitações aparecem novamente
Cenário 4: Persistência de Dados
- Favoritar uma licitação
- Atualizar página (F5)
- Verificar que continua favoritada
- Abrir em outra aba
- Verificar que está favoritada lá também
Cenário 5: Estados de Loading
- Abrir DevTools > Network
- Throttle: Fast 3G
- Clicar em favoritar
- Verificar que botão fica desabilitado
- Verificar que múltiplos cliques não funcionam
- Verificar que toast aparece só após resposta da API
🔌 TESTES DE API (Backend)
Pré-requisito:
# Obter token de autenticação
# 1. Fazer login no frontend como fornecedor
# 2. Inspecionar localStorage e copiar o token
# OU usar o script de teste fornecido
Endpoint 1: GET /api/v1/supplier/dashboard
curl -X GET "http://localhost:8000/api/v1/supplier/dashboard" \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json"
Verificar:
- Status 200
- Campo
licitacoesUrgentespresente - Array com até 10 licitações
- Ordenadas por
deadline_dateASC - Cada item tem campo
favorited(boolean) - Não inclui licitações declinadas
Endpoint 2: GET /api/v1/supplier/orders
# Sem filtro
curl -X GET "http://localhost:8000/api/v1/supplier/orders?status=published" \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json"
# Com filtro de favoritas
curl -X GET "http://localhost:8000/api/v1/supplier/orders?status=published&favorites=true" \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json"
Verificar:
- Status 200
- Paginação funciona
- Com
favorites=true: retorna apenas favoritas - Sem filtro: retorna todas (exceto declinadas)
- Cada item tem campo
favorited(boolean)
Endpoint 3: POST /api/v1/supplier/orders/{uuid}/favorite
# Toggle favorito
curl -X POST "http://localhost:8000/api/v1/supplier/orders/{UUID}/favorite" \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json"
Verificar:
- Status 200
- Resposta tem
is_favorited(boolean) - Resposta tem
message - Primeira chamada:
is_favorited: true - Segunda chamada:
is_favorited: false(toggle) - Persiste no banco (tabela
favorite_orders)
🐛 TESTES DE EDGE CASES
1. Sem Licitações:
- Dashboard vazio mostra mensagem apropriada
- Página /orders vazia mostra estado vazio
- Filtro "Favoritas" sem favoritos mostra estado vazio
2. Muitas Licitações:
- Dashboard mostra apenas 10 mais urgentes
- Paginação funciona em /orders
- Performance OK com 50+ licitações
3. Licitações Expiradas:
- Badge mostra "Expirada" para dias < 0
- Cor vermelha aplicada corretamente
- Ainda pode favoritar/desfavoritar
4. Erros de Rede:
- API offline: toast de erro aparece
- Timeout: loading state é limpo
- Erro 401: redireciona para login
- Erro 500: mostra mensagem amigável
5. Múltiplas Abas:
- Favoritar em aba 1
- Atualizar aba 2
- Verificar que favorito aparece (após reload)
6. Mobile/Responsivo:
- Cards ficam empilhados (1 coluna)
- Botões acessíveis em telas pequenas
- Estrelas não sobrepõem texto
- Touch funciona corretamente
✅ CRITÉRIOS DE SUCESSO
Funcionalidade:
- Todos os botões de favoritar funcionam
- Filtro de favoritas funciona corretamente
- Auto-reload ao remover favorito (com filtro ativo)
- Sincronização entre dashboard e /orders
- Loading states impedem double-clicks
- Toasts aparecem para todas as ações
Performance:
- Requests < 500ms (desenvolvimento)
- Sem race conditions
- Sem memory leaks
- Cache funciona (5 minutos)
UX:
- Feedback visual imediato
- Cores e ícones intuitivos
- Nenhum termo "Urgente" na interface (apenas em badges)
- Responsivo em todas as telas
- Acessibilidade OK (aria-labels)
Backend:
- Migrations aplicadas sem erro
- Models com relacionamentos corretos
- Endpoints retornam dados corretos
- Licitações declinadas são excluídas
- Ordenação por urgência funciona
📝 RELATÓRIO DE BUGS
Se encontrar problemas, documente:
### Bug: [Título]
**Prioridade:** Alta / Média / Baixa
**Página:** Dashboard / Orders / Detalhes
**Passos para reproduzir:**
1. ...
2. ...
3. ...
**Resultado esperado:** ...
**Resultado obtido:** ...
**Screenshots:** (se aplicável)
**Console errors:** (se houver)
🚀 PRÓXIMOS PASSOS
Após conclusão destes testes:
- Revisar e refatorar código se necessário
- Documentar API endpoints no Postman/Swagger
- Criar testes automatizados (PHPUnit + Vitest)
- ⚠️ PENDENTE: Renomear métodos PT → EN no backend
- Deploy para ambiente de staging
- Testes de aceitação do usuário (UAT)
Data de criação: 2025-01-11 Última atualização: 2025-01-11 Responsável: Equipe de desenvolvimento