Appearance
Login via QR Code (App) - Plano de testes
Escopo
Testes do fluxo de login via QR Code, incluindo geracao do QR Code a partir do dashboard, leitura pelo aplicativo movel, troca de token, conexao WebSocket, expiracao de 2 minutos com refresh e desconexao tanto pelo dashboard quanto pelo aplicativo.
Pre-condicoes
- Usuario autenticado no dashboard web
- Aplicativo movel instalado com usuario logado
- MSW configurado com handlers de QR login e WebSocket
- Conexao de rede estavel em ambos os dispositivos
Cenarios de teste
Geracao do QR Code
| # | Cenario | Passos | Resultado esperado | Prioridade |
|---|---|---|---|---|
| 1 | Gerar QR Code no dashboard | 1. Acessar dashboard 2. Clicar em "Login via App" ou botao de QR Code 3. Aguardar geracao | QR Code exibido na tela com instrucoes para escanear pelo aplicativo | Alta |
| 2 | QR Code contem dados corretos | 1. Gerar QR Code 2. Inspecionar dados codificados (via ferramenta de leitura) | QR Code contem token unico e URL de autenticacao | Alta |
| 3 | QR Code unico por geracao | 1. Gerar QR Code 2. Fechar modal 3. Gerar novamente | Novo QR Code gerado com token diferente do anterior | Media |
Expiracao e refresh
| # | Cenario | Passos | Resultado esperado | Prioridade |
|---|---|---|---|---|
| 4 | QR Code expira apos 2 minutos | 1. Gerar QR Code 2. Aguardar 2 minutos sem escanear | QR Code marcado como expirado. Mensagem informando expiracao | Alta |
| 5 | Refresh do QR Code apos expiracao | 1. QR Code expirado 2. Clicar em "Gerar novo" ou "Atualizar" | Novo QR Code gerado com novo token e timer reiniciado | Alta |
| 6 | Timer de expiracao visivel | 1. Gerar QR Code 2. Verificar timer/countdown | Contador regressivo exibe tempo restante (ex: "Expira em 1:45") | Media |
| 7 | Refresh antes da expiracao | 1. QR Code ativo com 30 segundos restantes 2. Clicar em "Atualizar" | Novo QR Code gerado. Timer reiniciado para 2 minutos | Media |
Leitura pelo aplicativo movel
| # | Cenario | Passos | Resultado esperado | Prioridade |
|---|---|---|---|---|
| 8 | Escanear QR Code valido | 1. Abrir camera do app movel 2. Apontar para QR Code no dashboard 3. App reconhece o codigo | App processa o QR Code. Solicitacao de troca de token enviada ao backend | Alta |
| 9 | Troca de token bem-sucedida | 1. Apos escaneamento 2. Backend valida e retorna token | App recebe token de sessao. Dashboard notificado via WebSocket | Alta |
| 10 | Escanear QR Code expirado | 1. Abrir camera do app 2. Escanear QR Code que ja expirou | App exibe mensagem informando que o QR Code expirou. Solicitar geracao de novo | Alta |
Conexao WebSocket
| # | Cenario | Passos | Resultado esperado | Prioridade |
|---|---|---|---|---|
| 11 | Conexao WebSocket estabelecida | 1. Gerar QR Code no dashboard 2. Escanear com app 3. Troca de token concluida | Dashboard recebe evento WebSocket de "conectado". Interface atualiza para mostrar dispositivo movel conectado | Alta |
| 12 | Evento de dispositivo conectado | 1. Apos conexao WebSocket 2. Verificar dashboard | Dashboard exibe informacao do dispositivo movel conectado (nome, horario) | Alta |
| 13 | Evento de desconexao | 1. Dispositivo movel desconecta 2. Verificar dashboard | Dashboard recebe evento "desconectado". Interface atualiza para remover dispositivo | Alta |
Desconexao
| # | Cenario | Passos | Resultado esperado | Prioridade |
|---|---|---|---|---|
| 14 | Desconectar pelo dashboard | 1. Dispositivo movel conectado 2. No dashboard, clicar em "Desconectar" 3. Confirmar | Sessao do app encerrada. Dashboard volta ao estado inicial. App notificado | Alta |
| 15 | Desconectar pelo aplicativo movel | 1. Dispositivo conectado 2. No app, clicar em "Desconectar" | Sessao encerrada. Dashboard recebe evento de desconexao e atualiza interface | Alta |
| 16 | Desconexao automatica por inatividade | 1. Dispositivo conectado 2. Aguardar tempo de inatividade | Sessao encerrada automaticamente. Ambos os lados notificados | Media |
Cenarios negativos
| # | Cenario | Passos | Resultado esperado |
|---|---|---|---|
| 1 | Escanear QR Code de outro usuario | App de usuario A escaneia QR Code de usuario B | Autenticacao falha. Mensagem de erro adequada |
| 2 | Duplo escaneamento do mesmo QR | Dois dispositivos escaneiam o mesmo QR Code | Apenas o primeiro aceito. Segundo recebe erro de token ja utilizado |
| 3 | Perda de conexao WebSocket | Conexao de rede do dashboard cai apos pareamento | Reconexao automatica ou mensagem informando desconexao |
| 4 | Backend fora do ar durante troca de token | Escanear QR Code com backend indisponivel | Mensagem de erro no app. QR Code pode ser regenerado |
| 5 | App nao conectado a internet | Escanear QR Code sem conexao no celular | Mensagem de erro de conexao no app |
Casos extremos
| # | Cenario | Resultado esperado |
|---|---|---|
| 1 | QR Code escaneado no ultimo segundo antes de expirar | Sistema processa ou informa expiracao, sem estado inconsistente |
| 2 | Gerar 10 QR Codes consecutivos sem escanear | Apenas o ultimo QR Code gerado e valido. Anteriores invalidos |
| 3 | WebSocket reconecta apos queda temporaria | Conexao restabelecida automaticamente. Estado sincronizado |
| 4 | Dashboard fechado apos pareamento | App permanece conectado. Ao reabrir dashboard, estado e recuperado |
| 5 | Multiplas abas do dashboard abertas | QR Code e exibido em apenas uma. Estado consistente |
| 6 | App em segundo plano durante pareamento | Pareamento funciona ou e retomado ao reabrir o app |
Criterios de aceite
- [ ] QR Code gerado corretamente no dashboard
- [ ] QR Code expira apos 2 minutos
- [ ] Timer de contagem regressiva exibido
- [ ] Refresh gera novo QR Code com timer reiniciado
- [ ] Escaneamento pelo app processa troca de token
- [ ] Conexao WebSocket estabelecida apos pareamento
- [ ] Dashboard exibe status de dispositivo conectado
- [ ] Desconexao funciona pelo dashboard
- [ ] Desconexao funciona pelo aplicativo movel
- [ ] QR Codes expirados e duplicados sao rejeitados
- [ ] Estados de erro tratados com mensagens claras