# Plano de testes — `PP-6` Reabertura automática do palpite quando o horário muda

**Story:** `docs/stories/PP-6-reabertura-jogo-adiado.md`

Por que esta story concentra risco: a reabertura ser **automática** é o que
impede o admin de ser acusado de favorecer alguém. E como a decisão de 03/08 é
que **todo jogo não realizado é adiado**, este é o único tratamento de jogo que
não aconteceu — se falhar, não há plano B no produto.

Todos os casos abaixo são de **borda de tempo** ou **estado**, que é onde a
cobertura tem falhado nas outras stories.

| ID | Título | Tipo | Prioridade |
| -- | ------ | ---- | ---------- |
| PP-6-01 | Adiamento para o futuro reabre o palpite | caminho feliz | alta |
| PP-6-02 | O palpite anterior continua valendo | caminho feliz | alta |
| PP-6-03 | Reabertura não revela palpite de ninguém | segurança | alta |
| PP-6-04 | Não existe reabertura manual pelo admin | autorização | alta |
| PP-6-05 | Antecipação do horário fecha mais cedo | borda | alta |
| PP-6-06 | Adiamento para o passado não reabre | borda | alta |
| PP-6-07 | Jogo já apurado que é adiado | borda | alta |
| PP-6-08 | Mesmo horário na fonte não conta como adiamento | borda | média |
| PP-6-09 | Adiamento e placar novo na mesma sincronização | borda | alta |
| PP-6-10 | Adiamento sem nova data | borda | alta |

---

### PP-6-01 — Adiamento para o futuro reabre o palpite
**Tipo:** caminho feliz · **Prioridade:** alta
**Pré-condições:** jogo com prazo **vencido**; participante com palpite salvo.
**Passos:**
1. A fonte passa a informar `kickoffAt` daqui a 3 dias.
2. Rodar a sincronização.
3. Ler a rodada.
**Resultado esperado:** `deadlineOpen: true` para aquele jogo, com a contagem
refletindo a nova data; o envio de palpite volta a ser aceito.

### PP-6-02 — O palpite anterior continua valendo
**Tipo:** caminho feliz · **Prioridade:** alta
**Resultado esperado:** depois da reabertura, o palpite antigo continua no
banco e aparece preenchido na tela. Reabrir **não é** apagar: quem não quiser
mexer não perde o que tinha.

### PP-6-03 — Reabertura não revela palpite de ninguém
**Tipo:** segurança · **Prioridade:** alta
**Passos:**
1. Com o jogo fechado (e não terminado), reabrir por adiamento.
2. Consultar os palpites do jogo.
**Resultado esperado:** `revealed: false`. O sigilo depende de o jogo ter
**terminado**, e um jogo adiado não terminou — se a reabertura revelasse, quem
repalpita saberia o palpite dos outros.

### PP-6-04 — Não existe reabertura manual pelo admin
**Tipo:** autorização · **Prioridade:** alta
**Passos:**
1. Procurar qualquer endpoint ou ação que reabra palpite sem mudança de horário.
**Resultado esperado:** não existe. A ausência é o requisito: com reabertura
manual, todo adiamento viraria suspeita sobre o admin.

### PP-6-05 — Antecipação do horário fecha mais cedo
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** jogo com prazo aberto, kickoff daqui a 3 dias.
**Passos:**
1. A fonte antecipa o kickoff para 1 hora **atrás**.
2. Sincronizar.
**Resultado esperado:** o prazo fecha, e palpite novo é recusado. Mudança de
horário vale nas duas direções — só tratar adiamento deixaria o participante
palpitando num jogo já em andamento.

### PP-6-06 — Adiamento para o passado não reabre
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** jogo com prazo vencido.
**Passos:**
1. A fonte muda o kickoff para outro momento, também no passado.
2. Sincronizar.
**Resultado esperado:** o horário é atualizado, mas **nenhum** palpite é
reaberto. Só reabre quando o novo horário está no futuro.

### PP-6-07 — Jogo já apurado que é adiado
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** jogo `FINISHED`, apurado, com pontos distribuídos.
**Passos:**
1. A fonte passa a informar o jogo como adiado para o futuro, sem placar.
2. Sincronizar.
**Resultado esperado:** comportamento **definido e consistente** — ou os pontos
são revertidos junto com a reabertura, ou o jogo apurado não reabre. O que não
pode acontecer é o palpite reabrir com o ponto antigo mantido: aí o participante
repalpita já sabendo o resultado e o ponto dele fica sem relação com o palpite.
_Este caso existe para forçar a decisão; o resultado observado vai para o
relatório de execução._

### PP-6-08 — Mesmo horário na fonte não conta como adiamento
**Tipo:** borda · **Prioridade:** média
**Passos:**
1. Sincronizar duas vezes seguidas sem nada mudar.
**Resultado esperado:** nenhuma reabertura contada, nenhum aviso. Job que roda a
cada hora não pode gerar evento a cada volta.

### PP-6-09 — Adiamento e placar novo na mesma sincronização
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** jogo que na fonte mudou **de horário e de placar** ao mesmo
tempo.
**Resultado esperado:** as duas coisas são aplicadas — o placar pelo caminho de
correção (com trilha e aviso) e o horário no mesmo passo. Aplicar só uma delas
deixa o jogo num estado que nenhuma tela sabe descrever.

### PP-6-10 — Adiamento sem nova data
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** fonte informa `POSTPONED` mantendo o horário antigo (é o que
ela faz quando a data nova ainda não existe).
**Resultado esperado:** o jogo fica pendente sem reabrir palpite, e o bolão
**não** fica preso: o encerramento antecipado (`CV-3`) continua disponível como
saída, e a correção manual (`PR-10`) permite informar o placar de um W.O.
