From 3d7555ca200f822368a51c1c3e65e8c6660c8bc9 Mon Sep 17 00:00:00 2001 From: Kedar Basutkar Date: Tue, 6 Oct 2026 11:40:32 +0530 Subject: [PATCH 1/3] Add expand to the section block Slack collapses long section text behind "Show more" unless the block sets expand: true. slack-integration needs this so the Breeze workflow plan card always shows every step, as the web app does. Co-Authored-By: Claude Opus 5.5 --- .../slack/client/models/blocks/SectionIF.java | 2 + .../models/blocks/SectionBlockTest.java | 55 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java index e882b1b2..1134a0a8 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java @@ -38,6 +38,8 @@ default Text getText() { Optional getAccessory(); + Optional getExpand(); + @Check default void check() { boolean hasNonEmptyTextField = diff --git a/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java b/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java new file mode 100644 index 00000000..8ba7794b --- /dev/null +++ b/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java @@ -0,0 +1,55 @@ +package com.hubspot.slack.client.models.blocks; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hubspot.slack.client.jackson.ObjectMapperUtils; +import com.hubspot.slack.client.models.blocks.objects.Text; +import com.hubspot.slack.client.models.blocks.objects.TextType; +import java.io.IOException; +import org.junit.Test; + +public class SectionBlockTest { + + private static final ObjectMapper MAPPER = ObjectMapperUtils.mapper(); + private static final String SECTION_TEXT = "A long section that should never collapse"; + + @Test + public void itSerializesExpandWhenSet() { + Section section = Section + .builder() + .setText(Text.of(TextType.MARKDOWN, SECTION_TEXT)) + .setExpand(true) + .build(); + + JsonNode json = MAPPER.valueToTree(section); + + assertThat(json.get("expand").asBoolean()).isTrue(); + } + + @Test + public void itOmitsExpandWhenNotSet() { + Section section = Section.of(Text.of(TextType.MARKDOWN, SECTION_TEXT)); + + JsonNode json = MAPPER.valueToTree(section); + + assertThat(json.has("expand")).isFalse(); + } + + @Test + public void itDeserializesExpand() throws IOException { + String rawJson = + "{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"" + + SECTION_TEXT + + "\"},\"expand\":true}"; + + Block block = MAPPER.readValue(rawJson, Block.class); + + assertThat(block) + .isInstanceOfSatisfying( + Section.class, + section -> assertThat(section.getExpand()).hasValue(true) + ); + } +} From 834446bca76771ff6e2c4bb1640ea231eb74babf Mon Sep 17 00:00:00 2001 From: Kedar Basutkar Date: Tue, 6 Oct 2026 12:26:43 +0530 Subject: [PATCH 2/3] Link the Slack section block docs from SectionIF Co-Authored-By: Claude Opus 5.5 --- .../com/hubspot/slack/client/models/blocks/SectionIF.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java index 1134a0a8..60008986 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/blocks/SectionIF.java @@ -15,6 +15,10 @@ import org.immutables.value.Value.Default; import org.immutables.value.Value.Immutable; +/** + * Slack's section block displays text, optionally alongside fields and an accessory element. + * @see Section block Docs + */ @Immutable @HubSpotStyle @JsonNaming(SnakeCaseStrategy.class) From 2d8d54aad0636ea42ffebde90e8de6fe6787a216 Mon Sep 17 00:00:00 2001 From: Kedar Basutkar Date: Tue, 6 Oct 2026 12:39:54 +0530 Subject: [PATCH 3/3] Assert that an explicit expand(false) is serialized Co-Authored-By: Claude Opus 5.5 --- .../client/models/blocks/SectionBlockTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java b/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java index 8ba7794b..f712b73d 100644 --- a/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java +++ b/slack-base/src/test/java/com/hubspot/slack/client/models/blocks/SectionBlockTest.java @@ -28,6 +28,21 @@ public void itSerializesExpandWhenSet() { assertThat(json.get("expand").asBoolean()).isTrue(); } + @Test + public void itSerializesExpandFalseWhenSet() { + Section section = Section + .builder() + .setText(Text.of(TextType.MARKDOWN, SECTION_TEXT)) + .setExpand(false) + .build(); + + JsonNode json = MAPPER.valueToTree(section); + + assertThat(json.has("expand")).isTrue(); + assertThat(json.get("expand").isBoolean()).isTrue(); + assertThat(json.get("expand").booleanValue()).isFalse(); + } + @Test public void itOmitsExpandWhenNotSet() { Section section = Section.of(Text.of(TextType.MARKDOWN, SECTION_TEXT));