Rodando a Suíte de Testes
O Chinaski distribui seu próprio harness de testes: t/ mais o bootstrap compartilhado t/helper.pl. Cerca de 120 arquivos de teste, todos executáveis com um comando.
Em uma linha
CHINASKI_SECRET=ci-test-secret prove -lr t/ Essa é a mesma invocação que o CI do projeto usa (prove -lr t/ a cada push e a cada PR para main), com o secret definido no ambiente do CI. Arquivos individuais rodam sob demanda: perl t/pages.t ou prove -l t/pages.t.
O que o helper.pl fornece
Os arquivos de teste fazem o bootstrap sem boilerplate:
setup_test_envdefine o secret de sessão eMOJO_MODE=test, constrói um banco SQLite temporário novo a partir doschema.sqlreal, apontaCHINASKI_DBpara ele e define um diretório de documentos por execução, para que arquivos temporários nunca colidam entre usuários ou execuções. Ele também pré-cria o diretório de saída do build (ignorado pelo git) para que a verificação de saída gravável do /health não falhe como falso positivo em um checkout novo.- A limpeza é registrada: um bloco END remove os sidecars WAL do banco temporário e o diretório de documentos por execução. Ambos se acumulavam entre execuções na própria máquina do projeto antes dessa correção, então a limpeza é essencial.
- Dados de seed: duas contas (
admin/admin123com o papel admin,editor/editor123com o papel editor) em um site de dois idiomas (en, es), com hash bcrypt na hora do setup. - Helpers de login executam todo o fluxo de entrada: buscam a página de login, extraem o token CSRF, enviam as credenciais e chegam em /admin.
- O app sob teste é o próprio
cms.plde produção carregado em um harnessTest::Mojo(com a flag Secure do cookie de sessão desativada para o loop de teste sem HTTPS); a suíte sempre testa o código distribuído, nunca um stub.
Obtendo acesso nos testes
login_admin e login_editor cuidam dos detalhes, incluindo a extração do token CSRF da página de login renderizada. Testes que precisam de controle mais fino podem acessar as rotas diretamente com os helpers de token.
Pré-requisitos de ambiente
- O mesmo conjunto de dependências do app (Perl 5.26+, Mojolicious, DBI/DBD::SQLite, Template, Imager, DateTime, módulos Crypt, sqlite3 para o setup do banco).
- O workflow de CI serve também como documentação da receita de provisionamento no host (bibliotecas de sistema mais uma lista de instalação do cpanm), e roda em um runner self-hosted colocalizado com o host de deployment; as dependências são provisionadas uma vez em todo o sistema, não a cada execução.
O servidor MCP, testado separadamente
chinaski-mcp/mcp.t é a suíte própria do servidor MCP. Ela define o obrigatório CHINASKI_API_URL/CHINASKI_API_KEY por teste (o servidor se recusa a iniciar sem ambos) e testa o comportamento do protocolo voltado à API isoladamente.
Convenções que vale conhecer
- Arquivos de teste que chamam o builder por shell definem
CHINASKI_TEST=1, porque o builder, caso contrário, se recusa a rodar como root. - Arquivos com prefixo numérico (
00-compile.t,01-schema.t,02-media-sniff.t,03-util.t,04-webhook.t) atuam como verificações preliminares; um build quebrado ou uma mudança de schema aparece ali primeiro em uma passada deprove -lr t/, antes de qualquer teste de funcionalidade. - A suíte é desenvolvida para Linux (o runner de CI é Linux; o CI roda a mesma toolchain dos deployments de produção).