From af9965dabc8a8db4e2a9093a2439dafdf5c0fe8c Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Sun, 14 Jul 2024 22:33:48 +0300 Subject: [PATCH 1/4] Add support for Google Pub/Sub driver --- src/Queue/Driver.php | 2 + src/Queue/PubSubCreateInfo.php | 44 +++++++++++ tests/Unit/Queue/PubSubCreateInfoTest.php | 92 +++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 src/Queue/PubSubCreateInfo.php create mode 100644 tests/Unit/Queue/PubSubCreateInfoTest.php diff --git a/src/Queue/Driver.php b/src/Queue/Driver.php index bdf25a9..163b948 100644 --- a/src/Queue/Driver.php +++ b/src/Queue/Driver.php @@ -40,6 +40,8 @@ enum Driver: string */ case NSQ = 'nsq'; + case PubSub = 'google_pub_sub'; + /** * @internal Used when the driver is not specified. */ diff --git a/src/Queue/PubSubCreateInfo.php b/src/Queue/PubSubCreateInfo.php new file mode 100644 index 0000000..9ee42c7 --- /dev/null +++ b/src/Queue/PubSubCreateInfo.php @@ -0,0 +1,44 @@ + $this->projectId, + 'topic' => $this->topic, + ]); + + if (!empty($this->deadLetterTopic)) { + $result['dead_letter_topic'] = $this->deadLetterTopic; + $result['max_delivery_attempts'] = $this->maxDeliveryAttempts; + } + + return $result; + } +} diff --git a/tests/Unit/Queue/PubSubCreateInfoTest.php b/tests/Unit/Queue/PubSubCreateInfoTest.php new file mode 100644 index 0000000..e263dd9 --- /dev/null +++ b/tests/Unit/Queue/PubSubCreateInfoTest.php @@ -0,0 +1,92 @@ +assertSame(Driver::PubSub, $pubSubCreateInfo->driver); + $this->assertSame('test_name', $pubSubCreateInfo->name); + $this->assertSame('test_project_id', $pubSubCreateInfo->projectId); + $this->assertSame('test_topic', $pubSubCreateInfo->topic); + $this->assertSame(3, $pubSubCreateInfo->priority); + $this->assertSame('test_dead_letter_topic', $pubSubCreateInfo->deadLetterTopic); + $this->assertSame(15, $pubSubCreateInfo->maxDeliveryAttempts); + } + + public function testCreatePubSubCreateInfoOnlyRequiredData(): void + { + $pubSubCreateInfo = new PubSubCreateInfo( + name: 'test_name', + projectId: 'test_project_id', + topic: 'test_topic', + ); + + $this->assertSame(Driver::PubSub, $pubSubCreateInfo->driver); + $this->assertSame('test_name', $pubSubCreateInfo->name); + $this->assertSame('test_project_id', $pubSubCreateInfo->projectId); + $this->assertSame('test_topic', $pubSubCreateInfo->topic); + $this->assertSame(10, $pubSubCreateInfo->priority); + $this->assertNull($pubSubCreateInfo->deadLetterTopic); + $this->assertSame(10, $pubSubCreateInfo->maxDeliveryAttempts); + } + + public function testToArray(): void + { + $pubSubCreateInfo = new PubSubCreateInfo( + name: 'test_name', + projectId: 'test_project_id', + topic: 'test_topic', + priority: 3, + deadLetterTopic: 'test_dead_letter_topic', + maxDeliveryAttempts: 15, + ); + + $expectedArray = [ + 'name' => 'test_name', + 'driver' => Driver::PubSub->value, + 'priority' => 3, + 'project_id' => 'test_project_id', + 'topic' => 'test_topic', + 'dead_letter_topic' => 'test_dead_letter_topic', + 'max_delivery_attempts' => 15, + ]; + + $this->assertSame($expectedArray, $pubSubCreateInfo->toArray()); + } + + public function testToArrayOnlyRequiredData(): void + { + $pubSubCreateInfo = new PubSubCreateInfo( + name: 'test_name', + projectId: 'test_project_id', + topic: 'test_topic', + ); + + $expectedArray = [ + 'name' => 'test_name', + 'driver' => Driver::PubSub->value, + 'priority' => 10, + 'project_id' => 'test_project_id', + 'topic' => 'test_topic', + ]; + + $this->assertSame($expectedArray, $pubSubCreateInfo->toArray()); + } +} From 16fdac97648883b0afd2f13e2080882346e0cf60 Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Sun, 14 Jul 2024 22:37:47 +0300 Subject: [PATCH 2/4] Fix Psalm issue --- src/Queue/PubSubCreateInfo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Queue/PubSubCreateInfo.php b/src/Queue/PubSubCreateInfo.php index 9ee42c7..55565a2 100644 --- a/src/Queue/PubSubCreateInfo.php +++ b/src/Queue/PubSubCreateInfo.php @@ -34,7 +34,7 @@ public function toArray(): array 'topic' => $this->topic, ]); - if (!empty($this->deadLetterTopic)) { + if ($this->deadLetterTopic !== null && $this->deadLetterTopic !== '') { $result['dead_letter_topic'] = $this->deadLetterTopic; $result['max_delivery_attempts'] = $this->maxDeliveryAttempts; } From f596233b63dc5902fcd24d0d04552d517f2395c1 Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Thu, 18 Jul 2024 13:26:01 +0300 Subject: [PATCH 3/4] Add assertions --- src/Queue/PubSubCreateInfo.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Queue/PubSubCreateInfo.php b/src/Queue/PubSubCreateInfo.php index 55565a2..87e23cc 100644 --- a/src/Queue/PubSubCreateInfo.php +++ b/src/Queue/PubSubCreateInfo.php @@ -25,6 +25,13 @@ public function __construct( public readonly int $maxDeliveryAttempts = self::MAX_DELIVERY_ATTEMPTS_DEFAULT_VALUE, ) { parent::__construct(Driver::PubSub, $name, $priority); + + \assert($this->projectId !== '', 'Precondition [projectId !== ""] failed'); + \assert($this->topic !== '', 'Precondition [topic !== ""] failed'); + \assert($this->maxDeliveryAttempts >= 5, 'Precondition [maxDeliveryAttempts >= 5] failed'); + if ($this->deadLetterTopic !== null) { + \assert($this->deadLetterTopic !== '', 'Precondition [deadLetterTopic !== ""] failed'); + } } public function toArray(): array From bf72e1abe7460560e004e5a1dbbdc19eedc00eca Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Thu, 18 Jul 2024 13:27:11 +0300 Subject: [PATCH 4/4] Fix StyleCI config --- .styleci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.styleci.yml b/.styleci.yml index 044e610..5cbce59 100644 --- a/.styleci.yml +++ b/.styleci.yml @@ -9,7 +9,6 @@ enabled: - linebreak_after_opening_tag - single_quote - no_blank_lines_after_phpdoc - - unary_operator_spaces - no_useless_else - no_useless_return - trailing_comma_in_multiline_array