# Plano de testes — `CC-5` Entrar no bolão pelo link, com o mínimo de passos

**Story:** `docs/stories/CC-5-entrar-pelo-convite.md`

Por que esta story concentra risco: é o funil de entrada. Cada passo a mais é
participante que não entra, e cada recusa sem motivo claro é convidado que
desiste e volta para o WhatsApp.

| ID | Título | Tipo | Prioridade |
| -- | ------ | ---- | ---------- |
| CC-5-01 | Convidado com conta entra e chega ao bolão | caminho feliz | alta |
| CC-5-02 | Convidado sem conta cadastra e entra na sequência | caminho feliz | alta |
| CC-5-03 | Convite inválido | negativo | alta |
| CC-5-04 | Convite expirado responde 410, distinto de inválido | negativo | alta |
| CC-5-05 | Convite revogado por regeração | negativo | alta |
| CC-5-06 | Bolão já começado recusa entrada | borda | alta |
| CC-5-07 | Bolão encerrado recusa entrada | borda | alta |
| CC-5-08 | Quem já participa reusa o convite sem erro | borda | alta |
| CC-5-09 | Quem saiu não volta | borda | alta |
| CC-5-10 | Entrada exige autenticação | autorização | alta |
| CC-5-11 | Cada recusa tem texto próprio na tela | caminho feliz | alta |
| CC-5-12 | Regras e próximo prazo logo após entrar | caminho feliz | média |

---

### CC-5-01 — Convidado com conta entra e chega ao bolão
**Tipo:** caminho feliz · **Prioridade:** alta
**Pré-condições:** conta existente; convite válido de bolão que ainda não
começou.
**Passos:**
1. Colar o código na tela inicial.
2. Confirmar.
**Resultado esperado:** HTTP 200 com `poolId`/`poolName`, aviso "Você entrou em
<nome>", e o bolão aparece na lista. Nenhum passo além de colar e confirmar.

### CC-5-02 — Convidado sem conta cadastra e entra na sequência
**Tipo:** caminho feliz · **Prioridade:** alta
**Resultado esperado:** cadastro (3 campos) → sessão criada → entrada no bolão,
sem pedir login de novo entre as etapas.

### CC-5-03 — Convite inválido
**Tipo:** negativo · **Prioridade:** alta
**Dados de teste:** `token-que-nunca-existiu`, string vazia, token com 1
caractere alterado.
**Resultado esperado:** 404 "convite inválido ou já substituído".

### CC-5-04 — Convite expirado responde 410, distinto de inválido
**Tipo:** negativo · **Prioridade:** alta
**Pré-condições:** convite com `expiresAt` no passado (validade decidida: 1 dia).
**Resultado esperado:** 410 com "este convite expirou. Peça um novo ao
administrador". Status **diferente** de 404 — expirado é acionável ("peça
outro"), inválido não é.

### CC-5-05 — Convite revogado por regeração
**Tipo:** negativo · **Prioridade:** alta
**Passos:**
1. Gerar convite A.
2. Gerar convite B (o que revoga A).
3. Tentar entrar com A.
**Resultado esperado:** A recusado; B funciona. É a consequência que o admin
precisa conhecer **antes** de gerar outro.

### CC-5-06 — Bolão já começado recusa entrada
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** convite gravado antes do início; primeiro jogo já começou.
**Resultado esperado:** 409 "este bolão já começou e não aceita mais
participantes". Entrar atrasado seria pontuar em jogo já conhecido.

### CC-5-07 — Bolão encerrado recusa entrada
**Tipo:** borda · **Prioridade:** alta
**Resultado esperado:** 410 "este bolão já foi encerrado".

### CC-5-08 — Quem já participa reusa o convite sem erro
**Tipo:** borda · **Prioridade:** alta
**Resultado esperado:** HTTP 200 com `jaParticipava: true` e mensagem "Você já
participa de <nome>". Tratar como erro faria o participante achar que perdeu o
acesso.

### CC-5-09 — Quem saiu não volta
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** participante que usou a saída definitiva.
**Resultado esperado:** recusa com motivo próprio. A saída é definitiva por
decisão de produto — reentrada apagaria o sentido do aviso dado na saída.

### CC-5-10 — Entrada exige autenticação
**Tipo:** autorização · **Prioridade:** alta
**Resultado esperado:** 401 sem token. O convite dá acesso ao **bolão**, não ao
sistema.

### CC-5-11 — Cada recusa tem texto próprio na tela
**Tipo:** caminho feliz · **Prioridade:** alta
**Passos:**
1. Reproduzir CC-5-03 a CC-5-09 pelo app.
**Resultado esperado:** quatro mensagens **distintas** (inválido, expirado, já
começou, encerrado). "Erro" genérico aqui é o que faz o convidado desistir — e
ele desiste calado.

### CC-5-12 — Regras e próximo prazo logo após entrar
**Tipo:** caminho feliz · **Prioridade:** média
**Resultado esperado:** depois de entrar, o participante alcança a tabela de
pontos e o próximo prazo **no fuso local**, sem procurar. Quem entra sem saber a
regra palpita achando que placar exato vale a mesma coisa que acertar o vencedor.
