Skip to content

Testing & tooling

Package ini punya test suite sendiri (terpisah dari test app konsumen), pakai SQLite in-memory untuk test yang butuh Model ActiveRecord (tidak perlu SQL Server sungguhan untuk test package ini):

bash
composer install
composer test    # phpunit
composer cs       # PHP_CodeSniffer (PSR-12), phpcs.xml
composer cs-fix   # auto-fix sebagian besar temuan phpcs (phpcbf)
composer psalm    # analisis statis, psalm.xml — errorLevel 4, backlog lama di psalm-baseline.xml

psalm-baseline.xml berisi temuan Psalm yang sudah ada sebelum tool ini dipasang (bukan disembunyikan permanen) — kode BARU tetap wajib lolos level 4 tanpa masuk baseline. Kalau sengaja membereskan salah satu temuan lama, hapus entrinya dari baseline di commit yang sama, jangan biarkan menumpuk.

Pre-commit hook

composer install/composer update otomatis menjalankan git config core.hooksPath .githooks, jadi .githooks/pre-commit langsung aktif di clone lokal Anda — tidak perlu setup manual. Hook ini:

  • Skip total kalau commit tidak menyentuh file .php (commit docs-only tetap cepat).
  • Kalau ada file .php di-stage, jalankan composer cs, composer psalm, lalu composer test berurutan — commit ditolak kalau salah satu gagal.

Perbaiki lewat composer cs-fix (auto-fixable) atau perbaikan manual, lalu git add ulang. Kalau benar-benar perlu bypass (mis. WIP commit di branch pribadi), pakai git commit --no-verify — tapi jangan sampai kebiasaan.

Commit message

.githooks/commit-msg (aktif otomatis bareng pre-commit di atas) menolak commit yang tidak ikut format Conventional Commits:

<type>(<scope>): <description>
  • type: feat, fix, docs, style, refactor, perf, test, build, ci, chore, atau revert.
  • scope: opsional, sebutkan area yang disentuh (iam, db, route, middleware, auth, docs, dst) — bukan lagi blanket system seperti di histori commit lama (peninggalan era nested di monorepo).
  • description: minimal 8 karakter, dan tidak boleh cuma kata generik (update, wip, fix, misc, changes, dst) — jelaskan APA yang berubah, bukan sekadar "update".

Contoh yang lolos: feat(iam): lean RBAC variant without taxonomy, fix(db): Sqlsrv/Dblib execute() never returns, breaking every write query. Merge commit dan git revert bawaan git tidak kena aturan ini.