diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7765f46..a521c4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,25 +8,34 @@ on: jobs: php-tests: - name: Tests - PHP ${{ matrix.php }} ${{ matrix.dependency-version }} + name: Tests - PHP ${{ matrix.php }} with Symfony ${{ matrix.sf_version }} runs-on: ubuntu-latest timeout-minutes: 15 strategy: + max-parallel: 10 + fail-fast: false matrix: - php: ['8.2', '8.1', '8.0', '7.4'] - dependency-version: [''] + php: ['8.2', '8.3'] + sf_version: ['7.0.*'] + include: + - php: '8.0' + sf_version: '5.4.*' + - php: '8.1' + sf_version: '6.4.*' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - tools: composer:v2 + tools: composer:v2, flex coverage: none ini-values: expose_php=1 - name: Install dependencies - run: 'composer update ${{ matrix.dependency-version }} --no-interaction --prefer-dist --no-progress' + run: 'composer update --no-interaction --prefer-dist --no-progress' + env: + SYMFONY_REQUIRE: ${{ matrix.sf_version }} - name: Execute Unit Tests run: 'vendor/bin/phpunit' diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index 9877d68..c8d0e5b 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4 - name: Composer run: composer install --prefer-dist --no-progress --no-suggest diff --git a/composer.json b/composer.json index 5eb9c62..b8e1b85 100644 --- a/composer.json +++ b/composer.json @@ -15,27 +15,26 @@ } }, "require": { - "php": ">=7.4", + "php": ">=8.0", "ext-json": "*", - "symfony/messenger": "^4.3 || ^5.0 || ^6.0", - "symfony/config": "^4.3 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.3 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.3 || ^5.0 || ^6.0", - "symfony/yaml": "^4.3 || ^5.0 || ^6.0", - "bref/bref": "^1.5 || ^2.0", "async-aws/sns": "^1.0", "async-aws/sqs": "^1.2", "async-aws/event-bridge": "^1.0", - "symfony/amazon-sqs-messenger": "^5.2 || ^6.0", - "symfony/polyfill-php80": "^1.26" + "bref/bref": "^1.5 || ^2.0", + "symfony/amazon-sqs-messenger": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/messenger": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^9.4", "mnapoli/hard-mode": "^0.3.0", "phpstan/phpstan": "^1.7.10", - "symfony/framework-bundle": "^4.3 || ^5.0 || ^6.0", - "nyholm/symfony-bundle-test": "1.x-dev", - "matthiasnoback/symfony-dependency-injection-test": "^4.1", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "nyholm/symfony-bundle-test": "^3.0", + "matthiasnoback/symfony-dependency-injection-test": "^4.3 || ^5.0", "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0" }, diff --git a/tests/Functional/BaseFunctionalTest.php b/tests/Functional/BaseFunctionalTest.php index f0f1f08..8357e4d 100644 --- a/tests/Functional/BaseFunctionalTest.php +++ b/tests/Functional/BaseFunctionalTest.php @@ -3,36 +3,26 @@ namespace Bref\Symfony\Messenger\Test\Functional; use Bref\Symfony\Messenger\BrefMessengerBundle; -use Nyholm\BundleTest\BaseBundleTestCase; -use Symfony\Component\DependencyInjection\Container; +use Nyholm\BundleTest\TestKernel; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; +use Symfony\Component\HttpKernel\KernelInterface; -abstract class BaseFunctionalTest extends BaseBundleTestCase +abstract class BaseFunctionalTest extends KernelTestCase { - /** @var Container */ - protected $container; - - protected function getBundleClass() - { - return BrefMessengerBundle::class; - } - - protected function setUp(): void + protected static function getKernelClass(): string { - parent::setUp(); - $kernel = $this->createKernel(); - - // Add some configuration - $configDir = dirname(__DIR__) . '/Resources/config/'; - foreach ($this->getDefaultConfig() as $file) { - $kernel->addConfigFile($configDir . $file); - } - - $this->bootKernel(); - $this->container = $this->getContainer()->get('test.service_container'); + return TestKernel::class; } - protected function getDefaultConfig(): array + protected static function createKernel(array $options = []): KernelInterface { - return []; + /** + * @var TestKernel $kernel + */ + $kernel = parent::createKernel($options); + $kernel->addTestBundle(BrefMessengerBundle::class); + $kernel->handleOptions($options); + + return $kernel; } } diff --git a/tests/Functional/Service/EventBridge/EventBridgeTransportTest.php b/tests/Functional/Service/EventBridge/EventBridgeTransportTest.php index 8da880c..3c30306 100644 --- a/tests/Functional/Service/EventBridge/EventBridgeTransportTest.php +++ b/tests/Functional/Service/EventBridge/EventBridgeTransportTest.php @@ -10,20 +10,27 @@ use Bref\Symfony\Messenger\Test\Functional\BaseFunctionalTest; use Bref\Symfony\Messenger\Test\Resources\TestMessage\TestMessage; use Bref\Symfony\Messenger\Test\Resources\TestMessage\TestMessage2; +use Nyholm\BundleTest\TestKernel; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; class EventBridgeTransportTest extends BaseFunctionalTest { - protected function getDefaultConfig(): array + protected function setUp(): void { - return ['eventbridge.yaml']; + parent::setUp(); + + self::bootKernel([ + 'config' => static function (TestKernel $kernel) { + $kernel->addTestConfig(dirname(__DIR__, 3).'/Resources/config/eventbridge.yaml'); + }, + ]); } public function test factory(): void { /** @var EventBridgeTransportFactory $factory */ - $factory = $this->container->get(EventBridgeTransportFactory::class); + $factory = self::getContainer()->get(EventBridgeTransportFactory::class); $this->assertInstanceOf(EventBridgeTransportFactory::class, $factory); $this->assertTrue($factory->supports('eventbridge://', [])); @@ -55,10 +62,10 @@ public function test send message(): void return true; })) ->willReturn(ResultMockFactory::create(PutEventsResponse::class, ['FailedEntryCount' => 0])); - $this->container->set('bref.messenger.eventbridge_client', $eventBridgeClient); + self::getContainer()->set('bref.messenger.eventbridge_client', $eventBridgeClient); /** @var MessageBusInterface $bus */ - $bus = $this->container->get(MessageBusInterface::class); + $bus = self::getContainer()->get(MessageBusInterface::class); $bus->dispatch(new TestMessage('hello')); } @@ -79,10 +86,10 @@ public function test send message with event bus name(): void return true; })) ->willReturn(ResultMockFactory::create(PutEventsResponse::class, ['FailedEntryCount' => 0])); - $this->container->set('bref.messenger.eventbridge_client', $eventBridgeClient); + self::getContainer()->set('bref.messenger.eventbridge_client', $eventBridgeClient); /** @var MessageBusInterface $bus */ - $bus = $this->container->get(MessageBusInterface::class); + $bus = self::getContainer()->get(MessageBusInterface::class); $bus->dispatch(new TestMessage2('hello')); } } diff --git a/tests/Functional/Service/Sns/SnsTransportTest.php b/tests/Functional/Service/Sns/SnsTransportTest.php index c3d1538..a02498e 100644 --- a/tests/Functional/Service/Sns/SnsTransportTest.php +++ b/tests/Functional/Service/Sns/SnsTransportTest.php @@ -10,6 +10,7 @@ use Bref\Symfony\Messenger\Service\Sns\SnsTransportFactory; use Bref\Symfony\Messenger\Test\Functional\BaseFunctionalTest; use Bref\Symfony\Messenger\Test\Resources\TestMessage\TestMessage; +use Nyholm\BundleTest\TestKernel; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; @@ -17,15 +18,21 @@ class SnsTransportTest extends BaseFunctionalTest { - protected function getDefaultConfig(): array + protected function setUp(): void { - return ['sns.yaml']; + parent::setUp(); + + self::bootKernel([ + 'config' => static function (TestKernel $kernel) { + $kernel->addTestConfig(dirname(__DIR__, 3).'/Resources/config/sns.yaml'); + }, + ]); } public function test factory(): void { /** @var SnsTransportFactory $factory */ - $factory = $this->container->get(SnsTransportFactory::class); + $factory = self::getContainer()->get(SnsTransportFactory::class); $this->assertInstanceOf(SnsTransportFactory::class, $factory); $this->assertTrue($factory->supports('sns://arn:aws:sns:us-east-1:1234567890:test', [])); @@ -50,17 +57,17 @@ public function test send message(): void return true; })) ->willReturn(ResultMockFactory::create(PublishResponse::class, ['MessageId' => 4711])); - $this->container->set('bref.messenger.sns_client', $sns); + self::getContainer()->set('bref.messenger.sns_client', $sns); /** @var MessageBusInterface $bus */ - $bus = $this->container->get(MessageBusInterface::class); + $bus = self::getContainer()->get(MessageBusInterface::class); $bus->dispatch(new TestMessage('hello')); } public function testRejectsMessageWhenQueueIsFifoWithoutStamp() { $snsClient = $this->getMockBuilder(SnsClient::class)->disableOriginalConstructor()->getMock(); - $serializer = $this->container->get(SerializerInterface::class); + $serializer = self::getContainer()->get(SerializerInterface::class); $snsTransport = new SnsTransport($snsClient, $serializer, "arn:aws:sns:us-east-1:1234567890:test.fifo'"); // fifo suffix designates fifo queue $msg = new TestMessage("hello"); $envelope = new Envelope($msg); @@ -70,7 +77,7 @@ public function testRejectsMessageWhenQueueIsFifoWithoutStamp() public function testAcceptsMessageWhenQueueIsFifoWithStamp(){ $snsClient = $this->getMockBuilder(SnsClient::class)->disableOriginalConstructor()->getMock(); $snsClient->expects($this->once())->method("publish")->willReturn(ResultMockFactory::create(PublishResponse::class, ['MessageId' => 4711])); - $serializer = $this->container->get(SerializerInterface::class); + $serializer = self::getContainer()->get(SerializerInterface::class); $snsTransport = new SnsTransport($snsClient, $serializer, "arn:aws:sns:us-east-1:1234567890:test.fifo'"); // fifo suffix designates fifo queue $msg = new TestMessage("hello"); $envelope = new Envelope($msg, [new SnsFifoStamp("123","456")]); @@ -85,7 +92,7 @@ public function testAttachingSnsFifoStampToMessageAppliesMessageGroupId(){ return true; })) ->willReturn(ResultMockFactory::create(PublishResponse::class, ['MessageId' => 4711])); - $serializer = $this->container->get(SerializerInterface::class); + $serializer = self::getContainer()->get(SerializerInterface::class); $snsTransport = new SnsTransport($snsClient, $serializer, "arn:aws:sns:us-east-1:1234567890:test.fifo'"); // fifo suffix designates fifo queue $msg = new TestMessage("hello"); $envelope = new Envelope($msg, [new SnsFifoStamp("123","456")]); @@ -100,7 +107,7 @@ public function testAttachingSnsFifoStampToMessageAppliesMessageDeDeuplicatId(){ return true; })) ->willReturn(ResultMockFactory::create(PublishResponse::class, ['MessageId' => 4711])); - $serializer = $this->container->get(SerializerInterface::class); + $serializer = self::getContainer()->get(SerializerInterface::class); $snsTransport = new SnsTransport($snsClient, $serializer, "arn:aws:sns:us-east-1:1234567890:test.fifo'"); // fifo suffix designates fifo queue $msg = new TestMessage("hello"); $envelope = new Envelope($msg, [new SnsFifoStamp("123","456")]); @@ -112,7 +119,7 @@ public function testAttachingSnsFifoStampToMessageAllowsNullMessageGroupId(){ $snsClient = $this->getMockBuilder(SnsClient::class)->disableOriginalConstructor()->getMock(); $snsClient->expects($this->once())->method("publish") ->willReturn(ResultMockFactory::create(PublishResponse::class, ['MessageId' => 4711])); - $serializer = $this->container->get(SerializerInterface::class); + $serializer = self::getContainer()->get(SerializerInterface::class); $snsTransport = new SnsTransport($snsClient, $serializer, "arn:aws:sns:us-east-1:1234567890:test.fifo'"); // fifo suffix designates fifo queue $msg = new TestMessage("hello"); $envelope = new Envelope($msg, [new SnsFifoStamp(null,"456")]); diff --git a/tests/Functional/TestKernel.php b/tests/Functional/TestKernel.php deleted file mode 100644 index a06111c..0000000 --- a/tests/Functional/TestKernel.php +++ /dev/null @@ -1,34 +0,0 @@ -configFile = $configFile; - parent::__construct('test', true); - } - - public function registerBundles(): array - { - return [ - new FrameworkBundle, - new BrefMessengerBundle, - ]; - } - - public function registerContainerConfiguration(LoaderInterface $loader): void - { - $loader->load(dirname(__DIR__) . '/Resources/config/default.yaml'); - $loader->load(dirname(__DIR__) . '/Resources/config/' . $this->configFile); - } -}