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

  1. Abrir dashboard
  2. Clicar em estrela vazia de uma licitação
  3. Verificar que estrela ficou preenchida
  4. Navegar para /orders
  5. Verificar que a mesma licitação está favoritada lá também

Cenário 2: Filtrar Favoritas

  1. Ir para /orders
  2. Favoritar 3 licitações diferentes
  3. Clicar no botão "Favoritas"
  4. Verificar que apenas as 3 aparecem
  5. Desfavoritar 1 delas
  6. Verificar que ela desaparece imediatamente (auto-reload)
  7. Verificar que restam apenas 2

Cenário 3: Limpar Filtros

  1. Ativar filtro "Favoritas"
  2. Aplicar outros filtros (categoria, raio, etc.)
  3. Clicar em "Limpar filtros"
  4. Verificar que filtro "Favoritas" foi desativado
  5. Verificar que todas as licitações aparecem novamente

Cenário 4: Persistência de Dados

  1. Favoritar uma licitação
  2. Atualizar página (F5)
  3. Verificar que continua favoritada
  4. Abrir em outra aba
  5. Verificar que está favoritada lá também

Cenário 5: Estados de Loading

  1. Abrir DevTools > Network
  2. Throttle: Fast 3G
  3. Clicar em favoritar
  4. Verificar que botão fica desabilitado
  5. Verificar que múltiplos cliques não funcionam
  6. 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 licitacoesUrgentes presente
  • Array com até 10 licitações
  • Ordenadas por deadline_date ASC
  • 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

Copyright © 2026