From 5e6db9e47a840687aad674eb3ba624372cc32ec8 Mon Sep 17 00:00:00 2001 From: camilleislasse Date: Thu, 1 May 2025 12:04:58 +0200 Subject: [PATCH 1/4] Add SlackPlainTextInputBlock for Slack message customization - Implemented SlackPlainTextInputBlock class to add a plain text input field to Slack messages. - Created tests for SlackPlainTextInputBlock to ensure proper functionality, including label, action ID, and placeholder validation. - Updated README with usage example for adding a plain text input to a Slack message. --- .../Slack/Block/SlackPlainTextInputBlock.php | 44 +++++++++++++ .../Component/Notifier/Bridge/Slack/README.md | 22 +++++++ .../Block/SlackPlainTextInputBlockTest.php | 66 +++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php create mode 100644 src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackPlainTextInputBlockTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php new file mode 100644 index 0000000000000..09266b6176ecd --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php @@ -0,0 +1,44 @@ + self::LABEL_LIMIT) { + throw new \LengthException(\sprintf('Maximum length for the label text is %d characters.', self::LABEL_LIMIT)); + } + + if (\strlen($actionId) > self::ACTION_ID_LIMIT) { + throw new \LengthException(\sprintf('Maximum length for the action ID is %d characters.', self::ACTION_ID_LIMIT)); + } + + if ($placeholderText && \strlen($placeholderText) > self::PLACEHOLDER_LIMIT) { + throw new \LengthException(\sprintf('Maximum length for the placeholder text is %d characters.', self::PLACEHOLDER_LIMIT)); + } + $this->options = [ + 'type' => 'input', + 'element' => [ + 'type' => 'plain_text_input', + 'action_id' => $actionId, + ], + 'label' => [ + 'type' => 'plain_text', + 'text' => $labelText, + ], + ]; + + if ($placeholderText) { + $this->options['element']['placeholder'] = [ + 'type' => 'plain_text', + 'text' => $placeholderText, + ]; + } + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/README.md b/src/Symfony/Component/Notifier/Bridge/Slack/README.md index 5e260b534e910..acf715804a7b5 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/README.md +++ b/src/Symfony/Component/Notifier/Bridge/Slack/README.md @@ -241,6 +241,28 @@ $chatMessage->options($options); $chatter->send($chatMessage); ``` +Adding a Plain Text Input to a Message +---------------------------- +To add a simple text input field to your Slack message, use the `SlackPlainTextInputBlock` class. +```php + +use Symfony\Component\Notifier\Bridge\Slack\Block\SlackPlainTextInputBlock; +use Symfony\Component\Notifier\Bridge\Slack\SlackOptions; +use Symfony\Component\Notifier\Message\ChatMessage; + +$chatMessage = new ChatMessage('Enter your feedback'); + +$options = (new SlackOptions()) +->block( +new SlackPlainTextInputBlock('Your Feedback', 'feedback_action_id', 'Type your feedback here...') +); + +// Add the custom options to the chat message and send the message +$chatMessage->options($options); + +$chatter->send($chatMessage); +``` + Sending a Message as a Reply ---------------------------- diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackPlainTextInputBlockTest.php b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackPlainTextInputBlockTest.php new file mode 100644 index 0000000000000..007a4640e9b56 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackPlainTextInputBlockTest.php @@ -0,0 +1,66 @@ +assertSame([ + 'type' => 'input', + 'element' => [ + 'type' => 'plain_text_input', + 'action_id' => 'time_spent_input', + 'placeholder' => [ + 'type' => 'plain_text', + 'text' => 'Enter some text here', + ], + ], + 'label' => [ + 'type' => 'plain_text', + 'text' => 'Time spent', + ], + ], $block->toArray()); + } + + public function testCanBeInstantiatedWithoutPlaceholder() + { + $block = new SlackPlainTextInputBlock('Time spent', 'time_spent_input'); + $this->assertSame([ + 'type' => 'input', + 'element' => [ + 'type' => 'plain_text_input', + 'action_id' => 'time_spent_input', + ], + 'label' => [ + 'type' => 'plain_text', + 'text' => 'Time spent', + ], + ], $block->toArray()); + } + + public function testThrowsWhenLabelExceedsCharacterLimit() + { + $this->expectException(\LengthException::class); + $this->expectExceptionMessage('Maximum length for the label text is 150 characters.'); + new SlackPlainTextInputBlock(str_repeat('a', 151), 'time_spent_input'); + } + + public function testThrowsWhenActionIdExceedsCharacterLimit() + { + $this->expectException(\LengthException::class); + $this->expectExceptionMessage('Maximum length for the action ID is 255 characters.'); + new SlackPlainTextInputBlock('Time spent', str_repeat('a', 256)); + } + + public function testThrowsWhenPlaceholderExceedsCharacterLimit() + { + $this->expectException(\LengthException::class); + $this->expectExceptionMessage('Maximum length for the placeholder text is 150 characters.'); + new SlackPlainTextInputBlock('Time spent', 'time_spent_input', str_repeat('a', 151)); + } +} From a4c68dfc9f8f80ab3dc9d4005bd55d676ef057cd Mon Sep 17 00:00:00 2001 From: camilleislasse Date: Thu, 1 May 2025 12:24:26 +0200 Subject: [PATCH 2/4] Fix README formatting by adjusting line breaks --- src/Symfony/Component/Notifier/Bridge/Slack/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/README.md b/src/Symfony/Component/Notifier/Bridge/Slack/README.md index acf715804a7b5..5c03b588ddea4 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/README.md +++ b/src/Symfony/Component/Notifier/Bridge/Slack/README.md @@ -241,11 +241,11 @@ $chatMessage->options($options); $chatter->send($chatMessage); ``` + Adding a Plain Text Input to a Message ---------------------------- To add a simple text input field to your Slack message, use the `SlackPlainTextInputBlock` class. ```php - use Symfony\Component\Notifier\Bridge\Slack\Block\SlackPlainTextInputBlock; use Symfony\Component\Notifier\Bridge\Slack\SlackOptions; use Symfony\Component\Notifier\Message\ChatMessage; From fd6340ef90e90b47af620cefd606cb75847deacd Mon Sep 17 00:00:00 2001 From: camilleislasse Date: Thu, 1 May 2025 12:36:17 +0200 Subject: [PATCH 3/4] License Headers --- .../Bridge/Slack/Block/SlackPlainTextInputBlock.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php index 09266b6176ecd..22fcdcd3545ae 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackPlainTextInputBlock.php @@ -1,7 +1,15 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Symfony\Component\Notifier\Bridge\Slack\Block; final class SlackPlainTextInputBlock extends AbstractSlackBlock { From 0af771d3d1b6be5c78d640d86b8335ac490ed934 Mon Sep 17 00:00:00 2001 From: camilleislasse Date: Fri, 2 May 2025 10:10:18 +0200 Subject: [PATCH 4/4] Add a testcase where this block is used in the transport --- .../Bridge/Slack/Tests/SlackTransportTest.php | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php index b0a54d5e0c611..9add78d0498eb 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php @@ -12,6 +12,8 @@ namespace Symfony\Component\Notifier\Bridge\Slack\Tests; use Symfony\Component\HttpClient\MockHttpClient; +use Symfony\Component\Notifier\Bridge\Slack\Block\SlackPlainTextInputBlock; +use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock; use Symfony\Component\Notifier\Bridge\Slack\SlackOptions; use Symfony\Component\Notifier\Bridge\Slack\SlackSentMessage; use Symfony\Component\Notifier\Bridge\Slack\SlackTransport; @@ -330,4 +332,44 @@ public function testUpdateMessage() $this->assertSame('1503435956.000247', $sentMessage->getMessageId()); } + + public function testSlackTransportSendsMessageWithInputBlock() + { + $channel = 'testChannel'; + $message = 'testMessage'; + + $response = $this->createMock(ResponseInterface::class); + + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $response->expects($this->once()) + ->method('getContent') + ->willReturn(json_encode(['ok' => true, 'ts' => '1503435956.000247', 'channel' => 'C123456'])); + + $options = new SlackOptions(); + + $options->block((new SlackSectionBlock())->text($message)); + + $options->block((new SlackPlainTextInputBlock('Time spent', 'time_spent_input', 'Enter some text here'))); + + $expectedBody = json_encode([ + 'blocks' => $options->toArray()['blocks'], + 'channel' => $channel, + 'text' => $message, + ]); + + $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response, $expectedBody): ResponseInterface { + $this->assertJsonStringEqualsJsonString($expectedBody, $options['body']); + + return $response; + }); + + $transport = self::createTransport($client, $channel); + + $sentMessage = $transport->send(new ChatMessage('testMessage', $options)); + + $this->assertSame('1503435956.000247', $sentMessage->getMessageId()); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy