CAFÉ AURORA — WEB II — CHECKPOINT DO CAPÍTULO 10

Este checkpoint serve para conferência ou retomada depois da construção prática.
Ele inclui os capítulos anteriores e acrescenta testes automatizados da exclusão controlada.

COMO EXECUTAR A APLICAÇÃO
1. Abra a pasta cafe-aurora-web2 no VS Code.
2. Confira o PHP, o driver SQLite e a sintaxe:
   php -v
   php -m | findstr /I "PDO sqlite"
   php -l src/repositorio-mensagens.php
   php -l public/admin/excluir-mensagem.php
   php -l tests/exclusao-mensagem-test.php
3. Execute novamente o inicializador, mesmo que o banco já exista:
   php src/inicializar-banco.php
4. Se ainda não houver credencial, crie uma:
   php src/criar-administrador.php
5. Inicie o servidor:
   php -S localhost:8000 -t public
6. Envie mensagens em http://localhost:8000/contato.php.
7. Entre em http://localhost:8000/admin/entrar.php e confirme que atualização e exclusão continuam funcionando.

COMO EXECUTAR OS TESTES
1. Pare o servidor com Ctrl+C ou abra outro terminal na raiz do projeto.
2. Execute:
   php tests/exclusao-mensagem-test.php
3. Confira quatro linhas [OK] e o resumo:
   4 teste(s), 0 falha(s).
4. Confira o código de saída logo após a execução:
   PowerShell: $LASTEXITCODE
   Prompt de Comando: echo %ERRORLEVEL%
   Linux ou macOS: echo $?
5. O resultado esperado quando tudo passa é 0.

O QUE FOI ACRESCENTADO
- arquivo src/repositorio-mensagens.php;
- função excluirMensagemRespondida() com PDO e ID explícitos;
- rota de exclusão chamando a mesma função usada nos testes;
- pasta tests separada do código público;
- banco SQLite em memória, sem alterar o banco da aplicação;
- fixture nova e conhecida para cada caso;
- funções didáticas verificar() e testar();
- quatro casos automatizados de sucesso e recusa;
- mensagens de falha relacionadas ao comportamento;
- resumo da suíte e código de saída 0 ou 1.

CASOS AUTOMATIZADOS
- exclui uma mensagem respondida;
- não exclui uma mensagem nova;
- não exclui uma mensagem em atendimento;
- exclui somente o ID informado e preserva outra mensagem respondida.

CONFIRA
- aplicação e teste chamam excluirMensagemRespondida();
- o SQL não foi copiado para dentro do teste;
- cada caso recebe um banco em memória independente;
- o arquivo cafe-aurora.sqlite não é criado nem alterado pelos testes;
- retirar temporariamente a condição do estado faz casos proibidos falharem;
- restaurar a condição faz a suíte voltar a passar;
- uma falha não impede a execução dos casos seguintes;
- o processo retorna 1 quando existe falha e 0 quando todos passam.

IMPORTANTE
- este capítulo cria testes de integração, não testes unitários;
- automatizado e unitário não são sinônimos;
- quatro casos não garantem que o sistema inteiro está correto;
- autenticação, CSRF, HTTP, acessibilidade e interface ainda exigem outros níveis de teste;
- o executor é didático e não deve crescer até virar um framework caseiro;
- o próximo capítulo migrará os comportamentos para PHPUnit e uma rotina padronizada.
