# Plano de testes — `AC-2` Login com e-mail e senha

**Story:** `docs/stories/AC-2-login-com-email.md`

Login é onde a superfície de ataque encontra a superfície de erro humano. O
critério mais delicado é a **resposta genérica**: distinguir "e-mail não existe" de
"senha errada" entrega uma lista de quem tem conta. E como não há recuperação de
senha, a tela não pode prometer o que não existe.

| ID | Título | Tipo | Prioridade |
| -- | ------ | ---- | ---------- |
| AC-2-01 | Login válido devolve os dois tokens | caminho feliz | alta |
| AC-2-02 | Senha errada e e-mail inexistente: mesma resposta | segurança | alta |
| AC-2-03 | Tentativas erradas são limitadas | segurança | alta |
| AC-2-04 | O bloqueio vale também para a senha correta | segurança | alta |
| AC-2-05 | Login em outro device não derruba a sessão | regra de negócio | alta |
| AC-2-06 | E-mail em maiúsculas entra na mesma conta | borda | alta |
| AC-2-07 | Erro do servidor aparece na tela | UI | alta |
| AC-2-08 | Estado de submissão bloqueia envio duplo | UI | alta |
| AC-2-09 | A tela não oferece "esqueci minha senha" | UI | alta |
| AC-2-10 | Vindo de convite, o login leva ao bolão | UI | alta |

---

### AC-2-01 — Login válido devolve os dois tokens
**Tipo:** caminho feliz · **Prioridade:** alta

### AC-2-02 — Senha errada e e-mail inexistente: mesma resposta
**Tipo:** segurança · **Prioridade:** alta
**Resultado esperado:** status e corpo **idênticos**. Diferença aqui transforma o
login em oráculo: dá para descobrir quem tem conta testando e-mails.

### AC-2-03 — Tentativas erradas são limitadas
**Tipo:** segurança · **Prioridade:** alta
**Resultado esperado:** 429 depois do limite.

### AC-2-04 — O bloqueio vale também para a senha correta
**Tipo:** segurança · **Prioridade:** alta
**Resultado esperado:** durante o bloqueio, nem a senha correta passa. Se passasse,
o próprio bloqueio viraria o oráculo que ele existe para fechar.

### AC-2-05 — Login em outro device não derruba a sessão
**Tipo:** regra de negócio · **Prioridade:** alta
**Resultado esperado:** as duas sessões seguem válidas e independentes. Derrubar a
anterior faria o participante perder o rascunho no meio da rodada.

### AC-2-06 — E-mail em maiúsculas entra na mesma conta
**Tipo:** borda · **Prioridade:** alta
**Resultado esperado:** login aceito. Teclado de celular capitaliza a primeira
letra sozinho — sem normalizar, a pessoa não entra na própria conta.

### AC-2-07 — Erro do servidor aparece na tela
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** o texto do servidor, não "erro ao entrar".

### AC-2-08 — Estado de submissão bloqueia envio duplo
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** durante o envio o botão não dispara de novo — dois logins
em sequência criariam duas sessões e consumiriam o rate limit.

### AC-2-09 — A tela não oferece "esqueci minha senha"
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** nenhum link de recuperação (`FE-3` cancelada em 03/08).
Oferecer o que não existe é pior que não oferecer: a pessoa tenta, não recebe nada
e conclui que o app está quebrado.

### AC-2-10 — Vindo de convite, o login leva ao bolão
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** a tela avisa que o convite continua valendo, e depois de
autenticar a pessoa entra no bolão do convite.
