diff --git a/.env b/.env index 726c7e5..ce77eb6 100644 --- a/.env +++ b/.env @@ -18,3 +18,7 @@ MAILER_DSN=null://null ###> symfony/notifier ### NOTIFIER_DSN=null://null ###< symfony/notifier ### + +###> symfony/messenger ### +MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 +###< symfony/messenger ### diff --git a/composer.json b/composer.json index 4f28215..1c91067 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "symfony/framework-bundle": "7.4.*", "symfony/http-client": "7.4.*", "symfony/mailer": "7.4.*", + "symfony/messenger": "7.4.*", "symfony/notifier": "7.4.*", "symfony/runtime": "7.4.*", "symfony/security-bundle": "7.4.*", diff --git a/composer.lock b/composer.lock index 110b7a2..b4d577b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1cbac46690609d534af42bd046cdafaf", + "content-hash": "8e3e78e97a4b5e245f35e38c532d6f5f", "packages": [ { "name": "doctrine/dbal", @@ -2914,6 +2914,100 @@ ], "time": "2026-05-20T07:20:23+00:00" }, + { + "name": "symfony/messenger", + "version": "v7.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "906387986caecc10b2ad2e85f715d834e5133a04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/906387986caecc10b2ad2e85f715d834e5133a04", + "reference": "906387986caecc10b2ad2e85f715d834e5133a04", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<7.2", + "symfony/event-dispatcher": "<6.4", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<7.3", + "symfony/lock": "<7.4", + "symfony/serializer": "<6.4.32|>=7.3,<7.3.10|>=7.4,<7.4.4|>=8.0,<8.0.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^7.2|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^7.3|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.32|~7.3.10|^7.4.4|^8.0.4", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v7.4.12" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-19T07:02:47+00:00" + }, { "name": "symfony/mime", "version": "v7.4.13", @@ -5886,12 +5980,12 @@ "source": { "type": "git", "url": "https://github.com/Codeception/module-symfony.git", - "reference": "7d9317fe13da9e8521558f79b0fa3bd0a5c197da" + "reference": "7f0cd5d5ef89658ed1a56185bf33047477686fc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-symfony/zipball/7d9317fe13da9e8521558f79b0fa3bd0a5c197da", - "reference": "7d9317fe13da9e8521558f79b0fa3bd0a5c197da", + "url": "https://api.github.com/repos/Codeception/module-symfony/zipball/7f0cd5d5ef89658ed1a56185bf33047477686fc5", + "reference": "7f0cd5d5ef89658ed1a56185bf33047477686fc5", "shasum": "" }, "require": { @@ -5925,6 +6019,7 @@ "symfony/http-foundation": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/http-kernel": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/mailer": "^5.4 | ^6.4 | ^7.4 | ^8.0", + "symfony/messenger": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/mime": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/notifier": "^5.4 | ^6.4 | ^7.4 | ^8.0", "symfony/options-resolver": "^5.4 | ^6.4 | ^7.4 | ^8.0", @@ -5984,7 +6079,7 @@ "issues": "https://github.com/Codeception/module-symfony/issues", "source": "https://github.com/Codeception/module-symfony/tree/main" }, - "time": "2026-06-23T20:14:24+00:00" + "time": "2026-06-25T19:43:59+00:00" }, { "name": "codeception/stub", diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 0000000..6dc4cfa --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,7 @@ +framework: + mailer: + message_bus: false + messenger: + default_bus: messenger.bus.default + buses: + messenger.bus.default: ~ diff --git a/config/routes.php b/config/routes.php index 32532ff..0e941cd 100644 --- a/config/routes.php +++ b/config/routes.php @@ -100,4 +100,8 @@ $routes->add('app_create_user_with_confirmation', '/create-user-with-confirmation') ->controller(App\Controller\CreateUserWithConfirmationController::class) ->methods(['GET']); + + $routes->add('dispatch_message', '/dispatch-message') + ->controller(App\Controller\DispatchMessageController::class) + ->methods(['GET']); }; diff --git a/src/Controller/DispatchMessageController.php b/src/Controller/DispatchMessageController.php new file mode 100644 index 0000000..c8ef4c7 --- /dev/null +++ b/src/Controller/DispatchMessageController.php @@ -0,0 +1,25 @@ +bus->dispatch(new SendWelcomeMessage('jane_doe@example.com')); + + return $this->json(['message' => 'Message dispatched']); + } +} diff --git a/src/Message/SendWelcomeMessage.php b/src/Message/SendWelcomeMessage.php new file mode 100644 index 0000000..bfbb856 --- /dev/null +++ b/src/Message/SendWelcomeMessage.php @@ -0,0 +1,18 @@ +email; + } +} diff --git a/src/MessageHandler/SendWelcomeMessageHandler.php b/src/MessageHandler/SendWelcomeMessageHandler.php new file mode 100644 index 0000000..db4a12d --- /dev/null +++ b/src/MessageHandler/SendWelcomeMessageHandler.php @@ -0,0 +1,16 @@ +amOnPage('/dispatch-message'); + $I->seeDispatchedMessageCount(1); + $I->seeDispatchedMessageCount(1, 'messenger.bus.default'); + } + + public function seeMessageDispatched(FunctionalTester $I): void + { + $I->amOnPage('/dispatch-message'); + $I->seeMessageDispatched(SendWelcomeMessage::class); + $I->seeMessageDispatched(SendWelcomeMessage::class, 'messenger.bus.default'); + } + + public function dontSeeMessageDispatched(FunctionalTester $I): void + { + $I->amOnPage('/dispatch-message'); + $I->dontSeeMessageDispatched(stdClass::class); + } + + public function grabDispatchedMessageClasses(FunctionalTester $I): void + { + $I->amOnPage('/dispatch-message'); + $messages = $I->grabDispatchedMessageClasses(); + $I->assertSame([SendWelcomeMessage::class], $messages); + } + + public function noMessagesDispatched(FunctionalTester $I): void + { + $I->amOnPage('/'); + $I->seeDispatchedMessageCount(0); + $I->assertSame([], $I->grabDispatchedMessageClasses()); + } +}