diff --git a/.github/workflows/auto_merge.yml b/.github/workflows/auto_merge.yml index d009c07..8d1c313 100644 --- a/.github/workflows/auto_merge.yml +++ b/.github/workflows/auto_merge.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Automerge PR' - uses: "pascalgn/automerge-action@v0.12.0" + uses: "pascalgn/automerge-action@v0.16.4" env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" MERGE_METHOD: 'squash' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 535d494..af1a34d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: coverage: [true] experimental: [false] operating_system: [ubuntu-latest] - postgres: ['11', '12', '13', '14', '15'] + postgres: ['13', '14', '15'] laravel: ['^10'] php_versions: ['8.1', '8.2'] include: @@ -99,6 +99,18 @@ jobs: postgres: '15' php_versions: '8.4' laravel: '^12.0' + - operating_system: 'ubuntu-latest' + coverage: [true] + experimental: [false] + postgres: '17' + php_versions: '8.4' + laravel: '^13.0' + - operating_system: 'ubuntu-latest' + coverage: [true] + experimental: [false] + postgres: '17' + php_versions: '8.5' + laravel: '^13.0' runs-on: '${{ matrix.operating_system }}' services: postgres: diff --git a/composer.json b/composer.json index a38249b..bc7e321 100644 --- a/composer.json +++ b/composer.json @@ -17,16 +17,16 @@ "ext-json": "*", "ext-posix": "*", "php-amqplib/php-amqplib": "^3.0", - "laravel/framework": "^10.0|^11.0|^12.0", + "laravel/framework": "^10.0|^11.0|^12.0|^13.0", "thecodingmachine/safe": "^2.0", "umbrellio/laravel-heavy-jobs": "^3.5", "monolog/monolog": "^3.0", "influxdb/influxdb-php": "^1.15" }, "require-dev": { - "phpunit/phpunit": "^10.0|^11.0", + "phpunit/phpunit": "^10.0|^11.0|^12.0", "php-mock/php-mock": "^2.0", - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0", "mockery/mockery": "^1.0", "mikey179/vfsstream": "^1.6", "symplify/easy-coding-standard": "^11.0", diff --git a/src/Integration/Laravel/TableSyncable.php b/src/Integration/Laravel/TableSyncable.php index 816fd11..7e4bc70 100644 --- a/src/Integration/Laravel/TableSyncable.php +++ b/src/Integration/Laravel/TableSyncable.php @@ -11,7 +11,9 @@ trait TableSyncable public static function bootTableSyncable(): void { if (static::$isTableSyncEnabled) { - static::observe(TableSyncObserver::class); + foreach (['created', 'updated', 'deleted'] as $event) { + static::registerModelEvent($event, TableSyncObserver::class . '@' . $event); + } } } diff --git a/tests/functional/Laravel/Integration/Console/PidManagerTest.php b/tests/functional/Laravel/Integration/Console/PidManagerTest.php index 935e0d4..2ccf807 100644 --- a/tests/functional/Laravel/Integration/Console/PidManagerTest.php +++ b/tests/functional/Laravel/Integration/Console/PidManagerTest.php @@ -5,6 +5,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Console; use org\bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Console\PidManager; use Umbrellio\TableSync\Tests\functional\Laravel\LaravelTestCase; @@ -17,9 +18,7 @@ protected function setUp(): void vfsStream::setup('testDir'); } - /** - * @test - */ + #[Test] public function managing(): void { $manager = new PidManager(vfsStream::path('test_file')); diff --git a/tests/functional/Laravel/Integration/Publishers/EnsureConsistencyPublisherTest.php b/tests/functional/Laravel/Integration/Publishers/EnsureConsistencyPublisherTest.php index d9a13bd..6c0e022 100644 --- a/tests/functional/Laravel/Integration/Publishers/EnsureConsistencyPublisherTest.php +++ b/tests/functional/Laravel/Integration/Publishers/EnsureConsistencyPublisherTest.php @@ -4,6 +4,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Publishers; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Publishers\EnsureConsistencyPublisher; use Umbrellio\TableSync\Messages\PublishMessage; use Umbrellio\TableSync\Publisher; @@ -31,9 +32,7 @@ protected function setUp(): void }); } - /** - * @test - */ + #[Test] public function simplePublish(): void { $this->spyPublisher->shouldSkip = true; @@ -48,9 +47,7 @@ public function simplePublish(): void $this->assertNotEmpty($this->spyPublisher->messages); } - /** - * @test - */ + #[Test] public function notPublishIfRecordNotExistsAndNotDestroyed(): void { $publisher = new EnsureConsistencyPublisher($this->spyPublisher); diff --git a/tests/functional/Laravel/Integration/Receive/MessageDataRetrieverTest.php b/tests/functional/Laravel/Integration/Receive/MessageDataRetrieverTest.php index ad16b89..c25660e 100644 --- a/tests/functional/Laravel/Integration/Receive/MessageDataRetrieverTest.php +++ b/tests/functional/Laravel/Integration/Receive/MessageDataRetrieverTest.php @@ -5,6 +5,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Receive; use Illuminate\Database\Eloquent\Model; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Receive\MessageData\AdditionalDataHandlers\ProjectRetriever; use Umbrellio\TableSync\Integration\Laravel\Receive\MessageData\MessageDataRetriever; use Umbrellio\TableSync\Messages\ReceivedMessage; @@ -13,9 +14,7 @@ class MessageDataRetrieverTest extends LaravelTestCase { - /** - * @test - */ + #[Test] public function exceptionIfNoConfig(): void { $retriever = new MessageDataRetriever([]); @@ -26,9 +25,7 @@ public function exceptionIfNoConfig(): void $retriever->retrieve($message); } - /** - * @test - */ + #[Test] public function exceptionIfNoTableAndModel(): void { $retriever = new MessageDataRetriever([ @@ -41,9 +38,7 @@ public function exceptionIfNoTableAndModel(): void $retriever->retrieve($message); } - /** - * @test - */ + #[Test] public function exceptionIfHasBothTableAndModel(): void { $retriever = new MessageDataRetriever([ @@ -59,9 +54,7 @@ public function exceptionIfHasBothTableAndModel(): void $retriever->retrieve($message); } - /** - * @test - */ + #[Test] public function exceptionIfPassedModelIsNotModelSubclass(): void { $retriever = new MessageDataRetriever([ @@ -76,9 +69,7 @@ public function exceptionIfPassedModelIsNotModelSubclass(): void $retriever->retrieve($message); } - /** - * @test - */ + #[Test] public function exceptionIfNoTargetKeys(): void { $retriever = new MessageDataRetriever([ @@ -93,25 +84,19 @@ public function exceptionIfNoTargetKeys(): void $retriever->retrieve($message); } - /** - * @test - */ + #[Test] public function retrieveByTable(): void { $this->assertRetrieved('table', 'test_models'); } - /** - * @test - */ + #[Test] public function retrieveByModel(): void { $this->assertRetrieved('model', TestModel::class); } - /** - * @test - */ + #[Test] public function additionalDataHandler(): void { $retriever = new MessageDataRetriever([ @@ -141,9 +126,7 @@ public function additionalDataHandler(): void ], $data->getData()); } - /** - * @test - */ + #[Test] public function overrideData(): void { $retriever = new MessageDataRetriever([ diff --git a/tests/functional/Laravel/Integration/Receive/ReceiverTest.php b/tests/functional/Laravel/Integration/Receive/ReceiverTest.php index 2a1dfb7..2d4fda8 100644 --- a/tests/functional/Laravel/Integration/Receive/ReceiverTest.php +++ b/tests/functional/Laravel/Integration/Receive/ReceiverTest.php @@ -4,6 +4,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Receive; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Exceptions\UnknownMessageEvent; use Umbrellio\TableSync\Integration\Laravel\Receive\MessageData\MessageDataRetriever; use Umbrellio\TableSync\Integration\Laravel\Receive\Receiver; @@ -12,9 +13,7 @@ class ReceiverTest extends LaravelTestCase { - /** - * @test - */ + #[Test] public function exceptionIfUnknownMessageEvent(): void { $messageDataRetreiver = $this->createMock(MessageDataRetriever::class); diff --git a/tests/functional/Laravel/Integration/Receive/Savers/ConflictResolvers/ByTargetKeysResolverTest.php b/tests/functional/Laravel/Integration/Receive/Savers/ConflictResolvers/ByTargetKeysResolverTest.php index e240a79..96f2b10 100644 --- a/tests/functional/Laravel/Integration/Receive/Savers/ConflictResolvers/ByTargetKeysResolverTest.php +++ b/tests/functional/Laravel/Integration/Receive/Savers/ConflictResolvers/ByTargetKeysResolverTest.php @@ -5,6 +5,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Receive\Savers\ConflictResolvers; use Illuminate\Support\Facades\App; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Receive\MessageData\MessageData; use Umbrellio\TableSync\Integration\Laravel\Receive\Savers\ConflictResolvers\ByTargetKeysResolver; use Umbrellio\TableSync\Integration\Laravel\Receive\Savers\QuerySaver; @@ -12,9 +13,7 @@ class ByTargetKeysResolverTest extends LaravelTestCase { - /** - * @test - */ + #[Test] public function correctConditionResolved(): void { $resolver = new ByTargetKeysResolver(); diff --git a/tests/functional/Laravel/Integration/Receive/Savers/EloquentSaverTest.php b/tests/functional/Laravel/Integration/Receive/Savers/EloquentSaverTest.php index c49aebd..255b56b 100644 --- a/tests/functional/Laravel/Integration/Receive/Savers/EloquentSaverTest.php +++ b/tests/functional/Laravel/Integration/Receive/Savers/EloquentSaverTest.php @@ -5,6 +5,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration\Receive\Savers; use Illuminate\Support\Facades\Config; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Receive\Savers\EloquentSaver; use Umbrellio\TableSync\Tests\functional\Laravel\Models\TestModel; @@ -13,9 +14,7 @@ class EloquentSaverTest extends SaverTestCase protected const TARGET = TestModel::class; protected const SAVER = EloquentSaver::class; - /** - * @test - */ + #[Test] public function upsertByDuplicatedTargetKeys(): void { $this->dropPrimaryKeyConstraint(); @@ -44,9 +43,7 @@ public function upsertByDuplicatedTargetKeys(): void }); } - /** - * @test - */ + #[Test] public function testUpsertWithChunk(): void { $this->dropPrimaryKeyConstraint(); @@ -81,9 +78,7 @@ public function testUpsertWithChunk(): void $this->assertDatabaseMissing(static::TARGET, $item3); } - /** - * @test - */ + #[Test] public function testDestroyWithChunk(): void { $this->dropPrimaryKeyConstraint(); diff --git a/tests/functional/Laravel/Integration/Receive/Savers/SaverTestCase.php b/tests/functional/Laravel/Integration/Receive/Savers/SaverTestCase.php index 136793a..728a310 100644 --- a/tests/functional/Laravel/Integration/Receive/Savers/SaverTestCase.php +++ b/tests/functional/Laravel/Integration/Receive/Savers/SaverTestCase.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\DB; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Integration\Laravel\Receive\MessageData\MessageData; use Umbrellio\TableSync\Integration\Laravel\Receive\Savers\Saver; use Umbrellio\TableSync\Tests\functional\Laravel\LaravelTestCase; @@ -28,9 +29,7 @@ protected function setUp(): void $this->stubPublisher(); } - /** - * @test - */ + #[Test] public function upsert(): void { $data = $this->makeMessageData(['id'], [ @@ -91,9 +90,7 @@ public function upsert(): void $this->assertDatabaseHas(static::TARGET, $newRawData); } - /** - * @test - */ + #[Test] public function nothingIfUpsertWithEmptyData(): void { $data = $this->makeMessageData([], [], 'not_exist_table'); @@ -101,9 +98,7 @@ public function nothingIfUpsertWithEmptyData(): void $this->assertNull($data->upsert(10.1)); } - /** - * @test - */ + #[Test] public function destroy(): void { /** @var TestModel $testModel */ @@ -118,9 +113,7 @@ public function destroy(): void $this->assertNull($testModel->fresh()); } - /** - * @test - */ + #[Test] public function destroyBatch(): void { $models = factory(TestModel::class, 2)->create(); @@ -139,9 +132,7 @@ public function destroyBatch(): void } } - /** - * @test - */ + #[Test] public function destroyWithSomeAttributes(): void { /** @var TestModel $destroyedModel */ @@ -163,9 +154,7 @@ public function destroyWithSomeAttributes(): void $this->assertNotNull($model->fresh()); } - /** - * @test - */ + #[Test] public function nothingIfDestroyWithEmptyData(): void { $data = $this->makeMessageData([], [], 'not_exist_table'); @@ -173,9 +162,7 @@ public function nothingIfDestroyWithEmptyData(): void $this->assertNull($data->destroy()); } - /** - * @test - */ + #[Test] public function destroyByDuplicatedTargetKeys(): void { $this->dropPrimaryKeyConstraint(); diff --git a/tests/functional/Laravel/Integration/TableSyncObserverTest.php b/tests/functional/Laravel/Integration/TableSyncObserverTest.php index 0d6c1a2..305fd79 100644 --- a/tests/functional/Laravel/Integration/TableSyncObserverTest.php +++ b/tests/functional/Laravel/Integration/TableSyncObserverTest.php @@ -4,6 +4,7 @@ namespace Umbrellio\TableSync\Tests\functional\Laravel\Integration; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Messages\PublishMessage; use Umbrellio\TableSync\Publisher; use Umbrellio\TableSync\Tests\functional\Laravel\LaravelTestCase; @@ -29,9 +30,7 @@ protected function setUp(): void }); } - /** - * @test - */ + #[Test] public function createdMessagePublished(): void { /** @var TestModel $model */ @@ -50,9 +49,7 @@ public function createdMessagePublished(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function updatedMessagePublished(): void { /** @var TestModel $model */ @@ -74,9 +71,7 @@ public function updatedMessagePublished(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function deletedMessagePublished(): void { /** @var TestModel $model */ @@ -92,9 +87,7 @@ public function deletedMessagePublished(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function softDeletedMessagePublished(): void { /** @var SoftTestModel $model */ @@ -114,9 +107,7 @@ public function softDeletedMessagePublished(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function forceDeletedMessagePublished(): void { /** @var SoftTestModel $model */ @@ -132,9 +123,7 @@ public function forceDeletedMessagePublished(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function restoredMessagePublished(): void { /** @var SoftTestModel $model */ @@ -156,9 +145,7 @@ public function restoredMessagePublished(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function modifySyncableAttributes(): void { /** @var TestModelWithExceptedFields $model */ @@ -177,9 +164,7 @@ public function modifySyncableAttributes(): void ], $message->attributes()); } - /** - * @test - */ + #[Test] public function notPublishIfExistsButNotFresh(): void { $this->spyPublisher->shouldSkip = true; @@ -198,9 +183,7 @@ public function notPublishIfExistsButNotFresh(): void $this->assertEmpty($this->spyPublisher->messages); } - /** - * @test - */ + #[Test] public function mustNotObserveIfModelTableSyncDisabled(): void { TestModel::$isTableSyncEnabled = false; diff --git a/tests/unit/Logging/FormatterTest.php b/tests/unit/Logging/FormatterTest.php index eac7d0c..f1b7bda 100644 --- a/tests/unit/Logging/FormatterTest.php +++ b/tests/unit/Logging/FormatterTest.php @@ -8,6 +8,7 @@ use InfluxDB\Point; use Monolog\Level; use Monolog\LogRecord; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Messages\PublishMessage; use Umbrellio\TableSync\Monolog\Formatter\InfluxDBFormatter; use Umbrellio\TableSync\Monolog\Formatter\JsonTableSyncFormatter; @@ -29,9 +30,7 @@ protected function setUp(): void $this->mockMicrotime(); } - /** - * @test - */ + #[Test] public function tableSyncFormat(): void { $this->enableMockMicrotime(); @@ -57,9 +56,7 @@ public function tableSyncFormat(): void $this->disableMockMicrotime(); } - /** - * @test - */ + #[Test] public function lineTableSyncFormat(): void { $lineTableSyncFormatter = new LineTableSyncFormatter(); @@ -68,9 +65,7 @@ public function lineTableSyncFormat(): void $this->assertStringContainsString('message', $format); } - /** - * @test - */ + #[Test] public function influxDbFormatter(): void { $influxDBFormatter = new InfluxDBFormatter('measurement', 1); @@ -80,9 +75,7 @@ public function influxDbFormatter(): void $this->assertSame(['model', 'event', 'direction'], array_keys($format[0]->getTags())); } - /** - * @test - */ + #[Test] public function jsonTableSyncFormat(): void { $jsonTableSyncFormatter = new JsonTableSyncFormatter(); diff --git a/tests/unit/Messages/PublishMessageTest.php b/tests/unit/Messages/PublishMessageTest.php index 3645429..b08b2d4 100644 --- a/tests/unit/Messages/PublishMessageTest.php +++ b/tests/unit/Messages/PublishMessageTest.php @@ -4,14 +4,13 @@ namespace Umbrellio\TableSync\Tests\unit\Messages; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Messages\PublishMessage; use Umbrellio\TableSync\Tests\UnitTestCase; class PublishMessageTest extends UnitTestCase { - /** - * @test - */ + #[Test] public function parametersFromConstructor(): void { $message = new PublishMessage('class', 'event', 'test_key', [ @@ -24,9 +23,7 @@ public function parametersFromConstructor(): void $this->assertSame('test_key', $message->routingKey()); } - /** - * @test - */ + #[Test] public function detectIfDestroyed(): void { $message = new PublishMessage('class', 'event', 'test_key'); @@ -36,9 +33,7 @@ public function detectIfDestroyed(): void $this->assertTrue($message->isDestroyed()); } - /** - * @test - */ + #[Test] public function detectIfCreated(): void { $message = new PublishMessage('class', 'event', 'test_key'); diff --git a/tests/unit/Rabbit/Config/MessageTest.php b/tests/unit/Rabbit/Config/MessageTest.php index 3ec3033..d32ee9c 100644 --- a/tests/unit/Rabbit/Config/MessageTest.php +++ b/tests/unit/Rabbit/Config/MessageTest.php @@ -5,14 +5,13 @@ namespace Umbrellio\TableSync\Tests\unit\Rabbit\Config; use PhpAmqpLib\Wire\AMQPTable; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Rabbit\Config\PublishMessage as Config; use Umbrellio\TableSync\Tests\UnitTestCase; class MessageTest extends UnitTestCase { - /** - * @test - */ + #[Test] public function parametersFromConstructor(): void { $amqpTable = new AMQPTable([]); diff --git a/tests/unit/Rabbit/Config/PublishTest.php b/tests/unit/Rabbit/Config/PublishTest.php index 3e1e39d..2c1141c 100644 --- a/tests/unit/Rabbit/Config/PublishTest.php +++ b/tests/unit/Rabbit/Config/PublishTest.php @@ -4,14 +4,13 @@ namespace Umbrellio\TableSync\Tests\unit\Rabbit\Config; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Rabbit\Config\Publisher as Config; use Umbrellio\TableSync\Tests\UnitTestCase; class PublishTest extends UnitTestCase { - /** - * @test - */ + #[Test] public function parametersFromConstructor(): void { $config = new Config('exchange', false); diff --git a/tests/unit/Rabbit/Config/ReceiveTest.php b/tests/unit/Rabbit/Config/ReceiveTest.php index 5a3b314..1034c4b 100644 --- a/tests/unit/Rabbit/Config/ReceiveTest.php +++ b/tests/unit/Rabbit/Config/ReceiveTest.php @@ -4,15 +4,14 @@ namespace Umbrellio\TableSync\Tests\unit\Rabbit\Config; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Rabbit\Config\Consumer as Config; use Umbrellio\TableSync\ReceivedMessageHandler; use Umbrellio\TableSync\Tests\UnitTestCase; class ReceiveTest extends UnitTestCase { - /** - * @test - */ + #[Test] public function parametersFromConstructor(): void { $handler = $this->createMock(ReceivedMessageHandler::class); diff --git a/tests/unit/Rabbit/MessageBuilderTest.php b/tests/unit/Rabbit/MessageBuilderTest.php index 7f8f92f..57ea335 100644 --- a/tests/unit/Rabbit/MessageBuilderTest.php +++ b/tests/unit/Rabbit/MessageBuilderTest.php @@ -6,6 +6,7 @@ use PhpAmqpLib\Message\AMQPMessage; use PhpAmqpLib\Wire\AMQPTable; +use PHPUnit\Framework\Attributes\Test; use Umbrellio\TableSync\Messages\PublishMessage; use Umbrellio\TableSync\Rabbit\Config\PublishMessage as Config; use Umbrellio\TableSync\Rabbit\MessageBuilder; @@ -29,9 +30,7 @@ protected function setUp(): void $this->mockMicrotime(); } - /** - * @test - */ + #[Test] public function bodyVersionDependsByMicroTime(): void { $this->enableMockMicrotime(); @@ -44,9 +43,7 @@ public function bodyVersionDependsByMicroTime(): void $this->disableMockMicrotime(); } - /** - * @test - */ + #[Test] public function constantAttributes(): void { $amqpMessage = $this->builder->buildForPublishing(new PublishMessage('class', 'event', 'test_key')); @@ -64,9 +61,7 @@ public function constantAttributes(): void } } - /** - * @test - */ + #[Test] public function attributesDependsByConfig(): void { $table = new AMQPTable([]); @@ -85,9 +80,7 @@ public function attributesDependsByConfig(): void } } - /** - * @test - */ + #[Test] public function bodyEvent(): void { $amqpMessage = $this->builder->buildForPublishing(new PublishMessage('class', 'event', 'test_key')); @@ -103,9 +96,7 @@ public function bodyEvent(): void $this->assertSame('destroy', $body['event']); } - /** - * @test - */ + #[Test] public function bodyMeta(): void { $amqpMessage = $this->builder->buildForPublishing(new PublishMessage('class', 'event', 'test_key')); @@ -121,9 +112,7 @@ public function bodyMeta(): void $this->assertTrue($body['metadata']['created']); } - /** - * @test - */ + #[Test] public function bodyAttributesByMessage(): void { $amqpMessage = $this->builder->buildForPublishing( @@ -139,9 +128,7 @@ public function bodyAttributesByMessage(): void ], $body['attributes']); } - /** - * @test - */ + #[Test] public function bodyKeys(): void { $amqpMessage = $this->builder->buildForPublishing(