Contributions
Shaping the tools I use every day, one pull request at a time
A hand-picked selection: only the contributions worth reading about, not every merged pull request. Articles about Magento and Adobe Commerce are on the blog.
Repair test names so silently skipped Page Builder tests run again — on GitHub
Test class names did not match their file names, so MFTF never collected them — a green suite that was quietly running less than it claimed. Renaming across 71 files put the tests back, along with the failures they had been hiding.
Replace manual reindex steps in functional tests with magentoCron — on GitHub
95 test files triggered full reindexes and blanket cache:flush calls, and the functional suite paid for all of it. Switched to <magentoCron groups="index"> with cache flushes narrowed to cache:flush config where that was enough.
Fail loudly when a page URL cannot be resolved — on GitHub
Write {{AdminLoginPage}} instead of {{AdminLoginPage.url}} and MFTF navigated to the literal placeholder string, failing several steps later with an error that pointed nowhere. Now it throws where the mistake actually is.
Eliminate the need for inheritance in action controllers — on GitHub
Every frontend controller had to extend AbstractAction, which made the class hierarchy the only extension point. Dispatching of controller_predispatch moved into a plugin, so a controller now only has to implement ActionInterface. 44 files, and the start of the whole controller decomposition effort with Vinai Kopp and Lena Orobei.
Stop a fatal error when a product image has no configured size — on GitHub
With image_width and image_height missing from the image parameters, getRatio produced a fatal error rather than a missing thumbnail. Values now fall back to zero, covered by a unit test.
Group the Ordered Products report by SKU — on GitHub
Every variation of a configurable product collapsed into one row, so a merchant could see the product sold but never which size or colour. Grouping by SKU, with an index added to keep the query in check.
Get rid of array_merge inside loops — on GitHub
foreach () { $x = array_merge($x, ...); } reallocates the whole array on every iteration — quadratic by construction. Rewritten across 42 files.
Fix the random autoloader failure in integration tests — on GitHub
Integration runs failed intermittently with Call to a member function findFile() on array whenever the autoloader had not been registered as expected. The kind of flake that gets rerun for months instead of read.
Add the <magentoCron> test action — on GitHub
Functional tests waited on real cron or faked it with CLI calls. A first-class action that runs cron groups and respects the 60-second interval between runs of the same group.
Only merged work is listed here, and only the parts worth a comment — the full history, including everything still in review, lives on GitHub.
Test reports lived inside the test container and disappeared with it. Allure moved to its own service, with the directory permissions fixed and docs for wiring up PHPUnit and Codeception.