diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackHeaderBlock.php b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackHeaderBlock.php new file mode 100644 index 0000000000000..c958962f1b6a4 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackHeaderBlock.php @@ -0,0 +1,51 @@ + + * + * 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; + +use Symfony\Component\Notifier\Exception\LogicException; + +/** + * @author Tomas Norkūnas + * + * @experimental in 5.3 + */ +final class SlackHeaderBlock extends AbstractSlackBlock +{ + private const TEXT_LIMIT = 150; + private const ID_LIMIT = 255; + + public function __construct(string $text) + { + if (\strlen($text) > self::TEXT_LIMIT) { + throw new LogicException(sprintf('Maximum length for the text is %d characters.', self::TEXT_LIMIT)); + } + + $this->options = [ + 'type' => 'header', + 'text' => [ + 'type' => 'plain_text', + 'text' => $text, + ], + ]; + } + + public function id(string $id): self + { + if (\strlen($id) > self::ID_LIMIT) { + throw new LogicException(sprintf('Maximum length for the block id is %d characters.', self::ID_LIMIT)); + } + + $this->options['block_id'] = $id; + + return $this; + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/CHANGELOG.md b/src/Symfony/Component/Notifier/Bridge/Slack/CHANGELOG.md index b860fa08db7f4..650a09bc1eec8 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/Bridge/Slack/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG ----- * Check for maximum number of buttons in Slack action block + * Add HeaderBlock 5.2.0 ----- diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackHeaderBlockTest.php b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackHeaderBlockTest.php new file mode 100644 index 0000000000000..c899b1822c091 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackHeaderBlockTest.php @@ -0,0 +1,51 @@ + + * + * 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\Tests\Block; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Notifier\Bridge\Slack\Block\SlackHeaderBlock; +use Symfony\Component\Notifier\Exception\LogicException; + +final class SlackHeaderBlockTest extends TestCase +{ + public function testCanBeInstantiated(): void + { + $header = new SlackHeaderBlock('header text'); + $header->id('header_id'); + + $this->assertSame([ + 'type' => 'header', + 'text' => [ + 'type' => 'plain_text', + 'text' => 'header text', + ], + 'block_id' => 'header_id', + ], $header->toArray()); + } + + public function testThrowsWhenTextExceedsCharacterLimit(): void + { + $this->expectException(LogicException::class); + $this->expectExceptionMessage('Maximum length for the text is 150 characters.'); + + new SlackHeaderBlock(str_repeat('h', 151)); + } + + public function testThrowsWhenBlockIdExceedsCharacterLimit(): void + { + $this->expectException(LogicException::class); + $this->expectExceptionMessage('Maximum length for the block id is 255 characters.'); + + $header = new SlackHeaderBlock('header'); + $header->id(str_repeat('h', 256)); + } +} 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