# Plano de testes — `PR-3` Ranking geral do bolão

**Story:** `docs/stories/PR-3-ranking-geral.md`

O ranking é a tela que a pessoa abre dez vezes por rodada. Os riscos: participante
que **não aparece** (paginação), posição própria difícil de achar, e ranking vazio
sendo lido como "o bolão não funciona".

| ID | Título | Tipo | Prioridade |
| -- | ------ | ---- | ---------- |
| PR-3-01 | Ordena pela soma dos pontos, com posição | caminho feliz | alta |
| PR-3-02 | Minha linha é identificável sem rolar | UI | alta |
| PR-3-03 | Empate compartilha posição e ajusta a seguinte | regra de negócio | alta |
| PR-3-04 | Critério do desempate é exibido | UI | alta |
| PR-3-05 | Quem não palpitou aparece com zero | regra de negócio | alta |
| PR-3-06 | Paginação: nada de participante invisível | borda | alta |
| PR-3-07 | Faixa de paginação inválida é recusada | borda | média |
| PR-3-08 | Quem saiu fica fora do ranking ativo | regra de negócio | alta |
| PR-3-09 | Quem não participa não vê o ranking | autorização | alta |
| PR-3-10 | Bolão sem rodada apurada tem mensagem útil | UI | alta |
| PR-3-11 | Sem N+1 ao montar a lista | eficiência | média |
| PR-3-12 | Layout aguenta 2 dígitos, empate e fonte grande | UI | média |

---

### PR-3-01 — Ordena pela soma dos pontos, com posição
**Tipo:** caminho feliz · **Prioridade:** alta

### PR-3-02 — Minha linha é identificável sem rolar
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** a própria linha marcada. Em bolão de 30 pessoas, procurar
o próprio nome é o atrito que faz a pessoa fechar o app.

### PR-3-03 — Empate compartilha posição e ajusta a seguinte
**Tipo:** regra de negócio · **Prioridade:** alta
**Resultado esperado:** 1º, 1º, 3º.

### PR-3-04 — Critério do desempate é exibido
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** o motivo aparece **inclusive para quem lidera**. Defeito
real corrigido (`PR-5 BE-4`): o líder empatado via "PONTOS" e não sabia por que
estava na frente.

### PR-3-05 — Quem não palpitou aparece com zero
**Tipo:** regra de negócio · **Prioridade:** alta
**Resultado esperado:** presente com 0. Desaparecer sugeriria expulsão.

### PR-3-06 — Paginação: nada de participante invisível
**Tipo:** borda · **Prioridade:** alta
**Resultado esperado:** `total` completo, páginas seguintes acessíveis, e o app
buscando a próxima ao rolar. Defeito real corrigido em 06/08: além de 50, o
participante simplesmente não aparecia.

### PR-3-07 — Faixa de paginação inválida é recusada
**Tipo:** borda · **Prioridade:** média
**Resultado esperado:** 400 para `limit=0` e `offset` negativo; teto aplicado a
`limit` grande. Defeito real corrigido em 06/08: `limit=0` devolvia **200 com
lista vazia**, que a tela lê como "ninguém pontuou".

### PR-3-08 — Quem saiu fica fora do ranking ativo
**Tipo:** regra de negócio · **Prioridade:** alta
**Resultado esperado:** ausente da lista, com o histórico dele preservado.

### PR-3-09 — Quem não participa não vê o ranking
**Tipo:** autorização · **Prioridade:** alta
**Resultado esperado:** 403.

### PR-3-10 — Bolão sem rodada apurada tem mensagem útil
**Tipo:** UI · **Prioridade:** alta
**Resultado esperado:** todos com zero e um texto explicando que a apuração ainda
não começou — não tela vazia, que parece defeito.

### PR-3-11 — Sem N+1 ao montar a lista
**Tipo:** eficiência · **Prioridade:** média
**Resultado esperado:** o nome do participante vem junto da agregação, não numa
consulta por linha. É a `BE-4`.

### PR-3-12 — Layout aguenta 2 dígitos, empate e fonte grande
**Tipo:** UI · **Prioridade:** média
**Resultado esperado:** sem overflow com posição de dois dígitos + ícone de
posição dividida, e com fonte ampliada (acessibilidade). Defeito real corrigido.
