Skip to main content
The installation ships its own quality tooling, configured at the root. You can point all of it at plugin or theme code too.

Composer scripts

Configuration lives in phpstan.neon.dist, phpcs.xml.dist, phpmd.xml and phpunit.xml.

Checking your own code

Static analysis is particularly valuable for plugins: it catches a renamed core method or a changed signature before your users do, which is the most common way a plugin breaks on a new release.

Writing tests

The PHPUnit configuration bootstraps the application’s autoloader and runs the suite in tests/, with coverage measured over src/. For a plugin, test what you can isolate: Keep tests in your own package, with their own composer.json scripts, so they run without an Aikeedo installation.
tests/Unit/ContactMapperTest.php

What automated tests won’t cover

Routes, settings pages, webhooks and payment flows need a running installation. Check them manually against a local install with DEBUG=true:
Install the extension into an installation that never had it.
Exercise every page and endpoint it adds.
Behave as a fresh installation would: no settings saved yet.
Deactivate and uninstall, and confirm nothing is left behind.
Read var/log afterwards.

Continuous integration

A minimal pipeline for a plugin repository:
.github/workflows/ci.yml
Pin the PHP version to the one Aikeedo requires, so incompatibilities surface in CI rather than on a customer’s server.