12 KiB
🧪 Teste Completo: Upload de Avatar e Imagem Personalizada
✅ Status da Implementação
- ✅ 30 avatares 3D realistas adicionados (15 masculinos + 15 femininos)
- ✅ Grid responsivo ajustado (3/5/6 colunas)
- ✅ Scroll automático na galeria (máx 500px)
- ✅ Sistema de upload de imagem personalizada mantido
- ✅ Atualização instantânea com estado local
📋 Teste 1: Galeria de 30 Avatares
Objetivo:
Verificar se todos os 30 avatares 3D realistas estão carregando corretamente.
Passos:
- Faça login no sistema
- Clique no ícone de perfil (canto superior direito)
- Clique em "Perfil"
- Clique na área do avatar/foto (ícone de edição deve aparecer)
- O modal "Alterar Foto de Perfil" deve abrir
- Verifique que a aba "Escolher Avatar" está ativa
- Verifique a mensagem: "Escolha um dos 30 avatares profissionais para seu perfil"
Verificações:
- Modal abriu corretamente
- Texto mostra "30 avatares profissionais"
- Grid está exibindo avatares em:
- 3 colunas (mobile)
- 5 colunas (tablet)
- 6 colunas (desktop)
- Galeria tem scroll vertical quando necessário
- Total de 30 avatares visíveis (conte-os!)
- Todos os avatares são fotos reais 3D profissionais
- Mistura balanceada de masculinos e femininos
Lista dos 30 Avatares (Para Conferência):
MASCULINOS (15):
- Carlos Silva (ID 12)
- João Santos (ID 68)
- Rafael Costa (ID 15)
- Bruno Oliveira (ID 59)
- Lucas Ferreira (ID 51)
- Pedro Almeida (ID 7)
- Ricardo Pinto (ID 13)
- Thiago Rocha (ID 52)
- Marcelo Dias (ID 58)
- André Castro (ID 70)
- Fernando Lima (ID 6)
- Gabriel Santos (ID 14)
- Rodrigo Souza (ID 53)
- Paulo Martins (ID 60)
- Diego Oliveira (ID 33)
FEMININOS (15):
- Ana Souza (ID 47)
- Juliana Lima (ID 32)
- Maria Rodrigues (ID 20)
- Beatriz Alves (ID 38)
- Fernanda Martins (ID 44)
- Camila Costa (ID 1)
- Patricia Santos (ID 5)
- Amanda Silva (ID 9)
- Larissa Pinto (ID 10)
- Vanessa Rocha (ID 16)
- Mariana Dias (ID 23)
- Carolina Castro (ID 24)
- Renata Oliveira (ID 25)
- Aline Ferreira (ID 27)
- Gabriela Almeida (ID 29)
Resultado Esperado:
✅ Galeria com 30 avatares profissionais 3D realistas funcionando perfeitamente.
📋 Teste 2: Seleção de Avatar
Objetivo:
Testar a seleção e aplicação de um avatar da galeria.
Passos:
- Na galeria de avatares (já aberta do Teste 1)
- Clique em um avatar qualquer
- Observe que o avatar selecionado recebe um anel azul (ring-4 ring-primary)
- Observe que o preview no topo do modal atualiza instantaneamente
- Clique no botão "Confirmar"
- Aguarde a confirmação
- Observe que o avatar atualiza instantaneamente na tela de perfil
Verificações:
- Clique no avatar adiciona anel azul de seleção
- Preview no topo do modal atualiza imediatamente
- Botão "Confirmar" fica habilitado
- Ao confirmar, modal fecha
- Avatar na página de perfil atualiza instantaneamente
- Avatar persiste após recarregar a página (F5)
- Avatar aparece no header (canto superior direito)
Resultado Esperado:
✅ Avatar selecionado, aplicado e persistido com sucesso.
📋 Teste 3: Upload de Imagem Personalizada
Objetivo:
Testar o upload de uma imagem personalizada do usuário.
Passos:
3.1. Preparar Imagem de Teste:
- Prepare uma foto de perfil (JPG ou PNG)
- Tamanho recomendado: 300x300px a 1000x1000px
- Tamanho máximo: 10MB
- Formato: JPG, PNG, ou WEBP
3.2. Fazer Upload:
- Abra o modal de avatar (clique na foto de perfil)
- Clique na aba "Enviar Foto"
- Verifique que aparece:
- Área de arrastar e soltar
- Ou botão "Selecionar Foto"
- Clique em "Selecionar Foto" (ou arraste a imagem)
- Selecione sua imagem de teste
- Aguarde o upload (barra de progresso deve aparecer)
- Observe o preview atualizar com sua foto
- Clique em "Confirmar"
Verificações:
- Aba "Enviar Foto" funciona
- Área de upload aparece corretamente
- Botão "Selecionar Foto" abre seletor de arquivos
- Upload inicia após selecionar arquivo
- Barra de progresso é exibida
- Preview atualiza com a imagem enviada
- Botão "Confirmar" fica habilitado
- Ao confirmar, modal fecha
- Foto personalizada aparece na página de perfil
- Foto aparece no header
- Foto persiste após recarregar (F5)
Possíveis Erros e Soluções:
Erro 1: "Arquivo muito grande"
- Causa: Imagem maior que 10MB
- Solução: Comprimir a imagem ou usar uma menor
Erro 2: "Formato não suportado"
- Causa: Arquivo não é JPG/PNG/WEBP
- Solução: Converter para formato suportado
Erro 3: Upload trava ou não completa
- Causa: Conexão lenta ou problema no Convex
- Solução:
- Verifique console do navegador (F12)
- Tente novamente
- Use imagem menor
Erro 4: Foto não atualiza instantaneamente
- Causa: Estado local não sincronizado
- Solução:
- Recarregue a página (F5)
- Se persistir, limpe cache do navegador
Resultado Esperado:
✅ Foto personalizada enviada, aplicada e persistida com sucesso.
📋 Teste 4: Alternar Entre Avatar e Foto
Objetivo:
Testar a troca entre avatar da galeria e foto personalizada.
Passos:
Cenário 1: Avatar → Foto Personalizada
- Selecione um avatar da galeria
- Confirme e verifique que aplicou
- Abra o modal novamente
- Vá na aba "Enviar Foto"
- Faça upload de uma foto personalizada
- Confirme
- Verifique que a foto personalizada substituiu o avatar
Cenário 2: Foto Personalizada → Avatar
- Com foto personalizada aplicada
- Abra o modal
- Vá na aba "Escolher Avatar"
- Selecione um avatar diferente
- Confirme
- Verifique que o avatar substituiu a foto personalizada
Verificações:
- Avatar → Foto funciona perfeitamente
- Foto → Avatar funciona perfeitamente
- Apenas um tipo (avatar OU foto) está ativo por vez
- Preview sempre mostra a opção mais recente
- Atualização é instantânea em ambos os casos
- Persistência funciona em ambos os casos
Resultado Esperado:
✅ Troca entre avatar e foto funciona perfeitamente em ambas direções.
📋 Teste 5: Performance e UX
Objetivo:
Verificar performance e experiência do usuário.
Verificações:
5.1. Performance:
- Galeria de 30 avatares carrega rapidamente (< 2s)
- Scroll na galeria é suave
- Seleção de avatar é instantânea (sem lag)
- Upload de foto mostra progresso claro
- Atualização da foto/avatar é instantânea
5.2. Responsividade:
- Modal funciona bem em mobile (3 colunas)
- Modal funciona bem em tablet (5 colunas)
- Modal funciona bem em desktop (6 colunas)
- Avatares têm tamanho adequado em todas telas
- Upload funciona em todas as resoluções
5.3. Acessibilidade:
- Modal pode ser fechado com ESC
- Botões têm labels adequados
- Navegação por teclado funciona
- Foco visual é claro
- Textos são legíveis
5.4. Feedback Visual:
- Avatar selecionado tem anel azul claro
- Hover nos avatares mostra feedback
- Botões desabilitados durante upload
- Loading spinner durante processamento
- Mensagens de erro são claras
Resultado Esperado:
✅ Sistema responsivo, performático e com excelente UX.
📸 Capturas de Tela Requeridas
Por favor, tire prints das seguintes situações:
Print 1: Galeria de 30 Avatares
- Modal aberto
- Aba "Escolher Avatar" ativa
- Todos os 30 avatares visíveis (com scroll)
- Demonstração do grid responsivo
Print 2: Avatar Selecionado
- Avatar com anel azul de seleção
- Preview no topo do modal atualizado
Print 3: Após Confirmar Avatar
- Modal fechado
- Página de perfil com novo avatar
- Avatar no header atualizado
Print 4: Aba "Enviar Foto"
- Modal aberto na aba de upload
- Área de upload visível
- Instruções claras
Print 5: Upload em Progresso
- Barra de progresso durante upload
- Botões desabilitados
Print 6: Foto Personalizada Aplicada
- Modal fechado
- Página de perfil com foto personalizada
- Foto no header atualizada
Print 7: Console do Navegador (F12)
- Sem erros no console
- Requisições bem-sucedidas
- Logs de confirmação (se houver)
🔧 Informações Técnicas para Debug
Arquivos Envolvidos:
apps/web/src/lib/utils/avatars.ts- Galeria de avataresapps/web/src/routes/(dashboard)/perfil/+page.svelte- Página de perfilpackages/backend/convex/usuarios.ts- Backend (upload/atualização)apps/web/src/lib/stores/auth.svelte.ts- Estado de autenticação
Convex Functions:
api.usuarios.uploadFotoPerfil- Gera URL de uploadapi.usuarios.atualizarPerfil- Atualiza avatar/fotoapi.usuarios.obterPerfil- Busca dados do usuário
Estados Importantes:
// Estado local (atualização instantânea)
let fotoPerfilLocal = $state<string | null>(null);
let avatarLocal = $state<string | null>(null);
// AuthStore (persistência)
authStore.usuario?.avatar // ID do avatar (ex: "avatar-male-1")
authStore.usuario?.fotoPerfilUrl // URL da foto personalizada
Fluxo de Upload:
- Usuário seleciona arquivo
- Frontend chama
api.usuarios.uploadFotoPerfil() - Convex retorna URL temporária de upload
- Frontend envia arquivo via POST para URL
- Frontend recebe
storageId - Frontend chama
api.usuarios.atualizarPerfil({ fotoPerfil: storageId }) - Backend atualiza banco de dados
- Frontend chama
authStore.refresh() - Estado local atualiza para feedback instantâneo
Verificar no Console:
// Verificar usuário atual
console.log(authStore.usuario);
// Verificar avatar
console.log(authStore.usuario?.avatar);
// Verificar foto de perfil
console.log(authStore.usuario?.fotoPerfilUrl);
✅ Checklist Final
Antes de finalizar o teste, confirme:
- ✅ 30 avatares carregando corretamente
- ✅ Seleção de avatar funciona
- ✅ Upload de foto funciona
- ✅ Alternância entre avatar/foto funciona
- ✅ Atualização instantânea funciona
- ✅ Persistência funciona (após F5)
- ✅ Avatar aparece no header
- ✅ Responsividade (mobile/tablet/desktop)
- ✅ Sem erros no console
- ✅ Performance adequada
- ✅ UX intuitiva e agradável
📊 Resultado Final
| Teste | Status | Observações |
|---|---|---|
| 1. Galeria de 30 Avatares | ⬜ | |
| 2. Seleção de Avatar | ⬜ | |
| 3. Upload de Imagem | ⬜ | |
| 4. Alternar Avatar/Foto | ⬜ | |
| 5. Performance e UX | ⬜ |
Legenda:
- ✅ = Passou
- ❌ = Falhou
- ⚠️ = Parcial
- ⬜ = Não testado
🐛 Problemas Encontrados
Liste aqui qualquer problema encontrado durante os testes:
Problema 1:
- Descrição:
- Passos para reproduzir:
- Esperado:
- Observado:
- Print:
Problema 2:
- Descrição:
- Passos para reproduzir:
- Esperado:
- Observado:
- Print:
🎉 Conclusão
Após completar todos os testes acima:
- ✅ Marque os checkboxes
- 📸 Anexe os 7 prints solicitados
- 📝 Documente qualquer problema
- ✉️ Envie o relatório para revisão
Data do Teste: _________________
Testador: _________________
Navegador: _________________
Sistema Operacional: _________________
Versão da Aplicação: 1.0.0
Status Geral: ⬜ APROVADO | ⬜ APROVADO COM RESSALVAS | ⬜ REPROVADO