diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackSectionBlock.php b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackSectionBlock.php index 8d37da429ed14..b14bb271064df 100644 --- a/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackSectionBlock.php +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Block/SlackSectionBlock.php @@ -39,7 +39,7 @@ public function text(string $text, bool $markdown = true): self */ public function field(string $text, bool $markdown = true): self { - if (10 === \count($this->options['fields'])) { + if (10 === \count($this->options['fields'] ?? [])) { throw new \LogicException('Maximum number of fields should not exceed 10.'); } diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackSectionBlockTest.php b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackSectionBlockTest.php new file mode 100644 index 0000000000000..7e1e98981d19d --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/Block/SlackSectionBlockTest.php @@ -0,0 +1,59 @@ + + * + * 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\SlackImageBlockElement; +use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock; + +final class SlackSectionBlockTest extends TestCase +{ + public function testCanBeInstantiated(): void + { + $section = new SlackSectionBlock(); + $section->text('section text'); + $section->field('section field'); + $section->accessory(new SlackImageBlockElement('https://example.com/image.jpg', 'an image')); + + $this->assertSame([ + 'type' => 'section', + 'text' => [ + 'type' => 'mrkdwn', + 'text' => 'section text', + ], + 'fields' => [ + [ + 'type' => 'mrkdwn', + 'text' => 'section field', + ], + ], + 'accessory' => [ + 'type' => 'image', + 'image_url' => 'https://example.com/image.jpg', + 'alt_text' => 'an image', + ], + ], $section->toArray()); + } + + public function testThrowsWhenFieldsLimitReached(): void + { + $section = new SlackSectionBlock(); + for ($i = 0; $i < 10; ++$i) { + $section->field($i); + } + + $this->expectException(\LogicException::class); + $this->expectExceptionMessage('Maximum number of fields should not exceed 10.'); + + $section->field('fail'); + } +}