PHP 8.4/8.5 support, DBAL 4, 70% test coverage & OSS release prep - #1
Merged
Conversation
- php constraint ^8.2 -> >=8.4 - doctrine/dbal ^3.6 -> ^4.2, doctrine/migrations ^3.8 - phpunit ^10 -> ^11.5, phpstan ^1.10 -> ^2.1, phpcs ^3.11, drop psalm - fix llicense typo -> license: GPL-3.0-or-later; add keywords/support/autoload-dev Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- ArrayParameterType::STRING instead of removed 'array' string type - delete() uses executeStatement() (writes must not go through executeQuery) - tighten $types PHPDoc to ParameterType|Type|string Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- move src/test/phpunit -> tests/ (namespace Xakki\\Emailer\\Tests, autoload-dev) - rewrite phpunit.xml to 11.x schema with <source> coverage scope - DBAL 4 mocks, #[DataProvider], drop getMockForAbstractClass/enableProxyingToOriginalMethods Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Static analysis (phpstan paths src+tests, level 7 -> 0 errors) and PSR-12: - typed PHPDoc, parse_url offset guards, class-string<> generics, secret_key sniff - phpcs <file>src</file> + ignores for intentional override hooks Runtime bugs surfaced by integration tests: - Controller\\Mail::initQueue: guard keys without '-' separator - AbstractController::renderImage: mime_content_type on path, not file bytes - Campaign $params/$replacers nullable + counter defaults; QueueData/Stats nullable props Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- in-memory SQLite integration harness (tests/Support/IntegrationCase.php) - cover Emailer, Mail, Tools, exceptions, models, repositories, CQRS, controllers, Smtp::validate - 95 tests; line coverage 70.11%, method coverage 70.00% on PHP 8.4 & 8.5 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…OG, CI - GPLv3 LICENSE; comprehensive English README; CONTRIBUTING + CHANGELOG - GitHub Actions matrix (PHP 8.4/8.5): validate, cs-check, phpstan, phpunit, coverage gate >=70% - reusable docker/ci/Dockerfile; ignore build/ and .phpunit.cache/ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Xakki
added a commit
that referenced
this pull request
May 24, 2026
* docs: simplify install (package is on Packagist) * refactor(routing): replace unmaintained phroute with built-in Router phroute/phroute (last release 2018) emitted implicit-nullable deprecations that become fatal on PHP 9. It was used only by Emailer::dispatchRoute and a handler resolver — both replaced by a ~70-line Helper\Router that keeps the exact same route DSL (filters :i/:a/:c/:h), so ConfigService::$route is unchanged. - add src/Helper/Router.php (+ RouterTest); fold handler resolution into dispatchRoute - remove src/Helper/HandlerResolverRoute.php and the phroute dependency - dispatchRoute now sets the response code from the exception's httpCode - 101 tests green on PHP 8.4 & 8.5, 0 deprecations, line coverage 70.26%
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Prepares the project for an open-source release: full PHP 8.4 / 8.5 support, migration to doctrine/dbal 4, a unit + integration test suite at 70% line coverage, a green static-analysis/style tool-chain, and the standard OSS project files (GPL-3.0).
Tool-chain status (PHP 8.4 & 8.5)
composer validate --strictphpcs(PSR-12 strict)phpstanlevel 7 (src + tests)phpunitWhat changed
php >=8.4, DBAL^4.2, migrations^3.8, PHPUnit^11.5, PHPStan^2.1, PHPCS^3.11; dropped Psalm; fixed the misspelledllicense: proprietary→license: GPL-3.0-or-later.ArrayParameterType,executeStatementfor writes, tightened$types).src/test/phpunit→tests/(Xakki\Emailer\Tests,autoload-dev), modernizedphpunit.xml; added unit + in-memory-SQLite integration suites.LICENSE, EnglishREADME,CONTRIBUTING,CHANGELOG, GitHub Actions CI matrix with a ≥70% coverage gate, reusabledocker/ci/Dockerfile.Latent bugs found & fixed (via integration tests)
Controller\Mail::initQueuewarned / mis-parsed keys without a-separator.AbstractController::renderImagecalledmime_content_type()on file bytes →TypeErroron null bytes.campaign.params/replacers,queue_data.last_error/transport_id,stats.uri_ref/domain_id) mapped to non-nullable typed properties; campaign counters lacked defaults → "accessed before initialization".Notes
phroute/phroute2.2 (implicit-nullable params) — vendor-only, CI stays green.composer require xakki/emailerworks once published to Packagist; README documents a VCS fallback until then.