mirror of
https://github.com/karatektus/pl_mail.git
synced 2026-10-25 10:04:18 +00:00
MERCURE 0.5.0 / symfony/mercure 0.8.0, kept out of the earlier sweep because it carries the live-update transport and should not ride along with eighteen patch bumps. It earned that: HubInterface gained getProtocolVersion() and getCookieName(), so the two hub doubles in CalendarSyncFinishedNotificationTest stopped satisfying it — a fatal error, not a failing test. Both implement them now, returning what a real hub would rather than pretending to configuration these tests do not have. Verified where it matters: the full browser suite, including the specs that stop and restart the hub to prove the stream recovers. A DATABASE OF ITS OWN for the unit suite. Both suites run APP_ENV=test, and doctrine.yaml's `dbname_suffix: '_test%env(default::TEST_TOKEN)%'` therefore pointed both at app_test. One database, two suites — and one test in here truncates real tables, because exercising a data reset is its whole purpose. Sequentially that is safe; Postgres rolls a TRUNCATE back like anything else. Concurrently it is not: TRUNCATE takes an ACCESS EXCLUSIVE lock, so live queries from the browser suite block until the unit test's transaction ends, and specs with no connection to any of this report timeouts. It fits the transaction abort seen here once and never reproduced. TEST_TOKEN is Symfony's own mechanism for exactly this, so the fix uses it rather than inventing a second DATABASE_URL. bin/test-unit.sh sets it and does the create/migrate/seed a fresh database needs. The seeding is the part worth guarding: PageRendersTest, ListFragmentTest and others SKIP THEMSELVES when the admin user is missing, so without it a green run would quietly be ~50 tests smaller than it looks — a worse failure than a red one. Checked rather than assumed: 4047 tests either way, no skipped or incomplete markers. The assertion count moved, 11540 → 11526, and settled there across runs. That is the point of the change showing up: the unit suite was reading rows the browser stack had left behind, and now it reads only its own. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
152 lines
5.0 KiB
JSON
152 lines
5.0 KiB
JSON
{
|
|
"type": "project",
|
|
"license": "AGPL-3.0-or-later",
|
|
"minimum-stability": "stable",
|
|
"prefer-stable": true,
|
|
"require": {
|
|
"php": ">=8.4",
|
|
"ext-ctype": "*",
|
|
"ext-iconv": "*",
|
|
"ext-pcntl": "*",
|
|
"doctrine/doctrine-bundle": "^3.3.1",
|
|
"doctrine/doctrine-migrations-bundle": "^4.0",
|
|
"doctrine/orm": "^3.6",
|
|
"dragonmantank/cron-expression": "^3.6",
|
|
"endroid/qr-code": "^6.1",
|
|
"knplabs/knp-paginator-bundle": "*",
|
|
"league/oauth2-client": "^2.9",
|
|
"league/oauth2-google": "^5.0",
|
|
"lexik/jwt-authentication-bundle": "^3.2",
|
|
"minishlink/web-push": "^11.0",
|
|
"phpdocumentor/reflection-docblock": "^6.0",
|
|
"phpstan/phpdoc-parser": "^2.3.3",
|
|
"sabre/vobject": "^4.6",
|
|
"scheb/2fa-backup-code": "^8.6",
|
|
"scheb/2fa-bundle": "^8.6",
|
|
"scheb/2fa-totp": "^8.6",
|
|
"scheb/2fa-trusted-device": "^8.6",
|
|
"symfony/asset": "8.1.*",
|
|
"symfony/asset-mapper": "8.1.*",
|
|
"symfony/console": "8.1.*",
|
|
"symfony/doctrine-messenger": "8.1.*",
|
|
"symfony/dotenv": "8.1.*",
|
|
"symfony/expression-language": "8.1.*",
|
|
"symfony/flex": "^2",
|
|
"symfony/form": "8.1.*",
|
|
"symfony/framework-bundle": "8.1.*",
|
|
"symfony/html-sanitizer": "8.1.*",
|
|
"symfony/http-client": "8.1.*",
|
|
"symfony/intl": "8.1.*",
|
|
"symfony/mailer": "8.1.*",
|
|
"symfony/mercure-bundle": "^0.5.0",
|
|
"symfony/mime": "8.1.*",
|
|
"symfony/monolog-bundle": "^3.0|^4.0",
|
|
"symfony/notifier": "8.1.*",
|
|
"symfony/process": "8.1.*",
|
|
"symfony/property-access": "8.1.*",
|
|
"symfony/property-info": "8.1.*",
|
|
"symfony/rate-limiter": "8.1.*",
|
|
"symfony/runtime": "8.1.*",
|
|
"symfony/scheduler": "8.1.*",
|
|
"symfony/security-bundle": "8.1.*",
|
|
"symfony/serializer": "8.1.*",
|
|
"symfony/stimulus-bundle": "^3.3",
|
|
"symfony/string": "8.1.*",
|
|
"symfony/translation": "8.1.*",
|
|
"symfony/twig-bundle": "8.1.*",
|
|
"symfony/uid": "8.1.*",
|
|
"symfony/ux-autocomplete": "^3.3",
|
|
"symfony/ux-turbo": "^3.3",
|
|
"symfony/validator": "8.1.*",
|
|
"symfony/web-link": "8.1.*",
|
|
"symfony/yaml": "8.1.*",
|
|
"symfonycasts/tailwind-bundle": "^1.0.0",
|
|
"thenetworg/oauth2-azure": "*",
|
|
"tijsverkoyen/css-to-inline-styles": "^2.4",
|
|
"twig/extra-bundle": "^2.12|^3.0",
|
|
"twig/twig": "^2.12|^3.28",
|
|
"webklex/php-imap": "^6.2"
|
|
},
|
|
"config": {
|
|
"allow-plugins": {
|
|
"php-http/discovery": true,
|
|
"symfony/flex": true,
|
|
"symfony/runtime": true
|
|
},
|
|
"bump-after-update": true,
|
|
"sort-packages": true
|
|
},
|
|
"autoload": {
|
|
"psr-4": {
|
|
"App\\": "src/"
|
|
},
|
|
"files": [
|
|
"config/bootstrap_generated_secrets.php"
|
|
]
|
|
},
|
|
"autoload-dev": {
|
|
"psr-4": {
|
|
"App\\Tests\\": "tests/"
|
|
}
|
|
},
|
|
"replace": {
|
|
"symfony/polyfill-ctype": "*",
|
|
"symfony/polyfill-iconv": "*",
|
|
"symfony/polyfill-php72": "*",
|
|
"symfony/polyfill-php73": "*",
|
|
"symfony/polyfill-php74": "*",
|
|
"symfony/polyfill-php80": "*",
|
|
"symfony/polyfill-php81": "*",
|
|
"symfony/polyfill-php82": "*",
|
|
"symfony/polyfill-php83": "*",
|
|
"symfony/polyfill-php84": "*"
|
|
},
|
|
"scripts": {
|
|
"site": "php bin/build-site.php",
|
|
"auto-scripts": {
|
|
"cache:clear": "symfony-cmd",
|
|
"assets:install %PUBLIC_DIR%": "symfony-cmd",
|
|
"importmap:install": "symfony-cmd"
|
|
},
|
|
"post-install-cmd": [
|
|
"@auto-scripts"
|
|
],
|
|
"post-update-cmd": [
|
|
"@auto-scripts"
|
|
],
|
|
"test": [
|
|
"vendor/bin/phpunit"
|
|
],
|
|
"stan": [
|
|
"vendor/bin/phpstan analyse --configuration=phpstan.dist.neon"
|
|
]
|
|
},
|
|
"scripts-descriptions": {
|
|
"test": "Run the PHPUnit suite (unit tests). Browser end-to-end tests live in tests/e2e and run via `npm run test:e2e`.",
|
|
"site": "Build the landing page and handbook into build/site — the same command GitHub Pages runs. Open build/site/index.html or serve it with `php -S 127.0.0.1:8080 -t build/site`.",
|
|
"stan": "Run PHPStan at level 5 against src/ and tests/, ignoring what phpstan-baseline.neon already records."
|
|
},
|
|
"conflict": {
|
|
"symfony/symfony": "*"
|
|
},
|
|
"extra": {
|
|
"symfony": {
|
|
"allow-contrib": false,
|
|
"require": "8.1.*"
|
|
}
|
|
},
|
|
"require-dev": {
|
|
"league/commonmark": "^2.9",
|
|
"phpstan/phpstan": "^2.2",
|
|
"phpstan/phpstan-doctrine": "^2.0",
|
|
"phpstan/phpstan-symfony": "^2.0",
|
|
"phpunit/phpunit": "^13.2.5",
|
|
"symfony/browser-kit": "8.1.*",
|
|
"symfony/css-selector": "8.1.*",
|
|
"symfony/debug-bundle": "8.1.*",
|
|
"symfony/maker-bundle": "^1.0",
|
|
"symfony/stopwatch": "8.1.*",
|
|
"symfony/web-profiler-bundle": "8.1.*"
|
|
}
|
|
}
|