diff --git a/slack-api-model/src/main/java/com/slack/api/model/block/Blocks.java b/slack-api-model/src/main/java/com/slack/api/model/block/Blocks.java index d218d1808..1b890629a 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/block/Blocks.java +++ b/slack-api-model/src/main/java/com/slack/api/model/block/Blocks.java @@ -87,6 +87,12 @@ public static InputBlock input(ModelConfigurator c return configurator.configure(InputBlock.builder()).build(); } + // MarkdownBlock + + public static MarkdownBlock markdown(ModelConfigurator configurator) { + return configurator.configure(MarkdownBlock.builder()).build(); + } + // RichTextBlock public static RichTextBlock richText(ModelConfigurator configurator) { diff --git a/slack-api-model/src/main/java/com/slack/api/model/block/MarkdownBlock.java b/slack-api-model/src/main/java/com/slack/api/model/block/MarkdownBlock.java new file mode 100644 index 000000000..5ed158f75 --- /dev/null +++ b/slack-api-model/src/main/java/com/slack/api/model/block/MarkdownBlock.java @@ -0,0 +1,30 @@ +package com.slack.api.model.block; + +import com.slack.api.model.File; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * https://docs.slack.dev/reference/block-kit/blocks/markdown-block + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MarkdownBlock implements LayoutBlock { + public static final String TYPE = "markdown"; + /** + * The type of block. For a markdown block, type is always markdown. + */ + private final String type = TYPE; + /** + * The standard markdown-formatted text. Limit 12,000 characters max. + */ + private String text; + /** + * The block_id is ignored in markdown blocks and will not be retained. + */ + private String blockId; +} diff --git a/slack-api-model/src/main/java/com/slack/api/util/json/GsonLayoutBlockFactory.java b/slack-api-model/src/main/java/com/slack/api/util/json/GsonLayoutBlockFactory.java index 601fdf149..9460e7223 100644 --- a/slack-api-model/src/main/java/com/slack/api/util/json/GsonLayoutBlockFactory.java +++ b/slack-api-model/src/main/java/com/slack/api/util/json/GsonLayoutBlockFactory.java @@ -51,6 +51,8 @@ private Class getLayoutClassInstance(String typeName) { return InputBlock.class; case HeaderBlock.TYPE: return HeaderBlock.class; + case MarkdownBlock.TYPE: + return MarkdownBlock.class; case VideoBlock.TYPE: return VideoBlock.class; case RichTextBlock.TYPE: diff --git a/slack-api-model/src/test/java/test_locally/api/model/block/BlockKitTest.java b/slack-api-model/src/test/java/test_locally/api/model/block/BlockKitTest.java index 5b7c59245..afd1903c0 100644 --- a/slack-api-model/src/test/java/test_locally/api/model/block/BlockKitTest.java +++ b/slack-api-model/src/test/java/test_locally/api/model/block/BlockKitTest.java @@ -55,6 +55,20 @@ public void parseInputOnes() { assertThat(inputBlock.getHint(), is(notNullValue())); } + @Test + public void parseMarkdownBlock() { + String blocks = "[{\n" + + " \"type\": \"markdown\",\n" + + " \"text\": \"**this is bold**\"\n" + + "}]"; + String json = "{blocks: " + blocks + "}"; + Message message = GsonFactory.createSnakeCase().fromJson(json, Message.class); + assertThat(message, is(notNullValue())); + assertThat(message.getBlocks().size(), is(1)); + MarkdownBlock markdownBlock = (MarkdownBlock) message.getBlocks().get(0); + assertThat(markdownBlock.getText(), is("**this is bold**")); + } + @Test public void parseMultiSelectOnes() { String blocks = "[\n" + diff --git a/slack-api-model/src/test/java/test_locally/api/model/block/BlocksTest.java b/slack-api-model/src/test/java/test_locally/api/model/block/BlocksTest.java index 597d85446..79d4499b7 100644 --- a/slack-api-model/src/test/java/test_locally/api/model/block/BlocksTest.java +++ b/slack-api-model/src/test/java/test_locally/api/model/block/BlocksTest.java @@ -86,6 +86,11 @@ public void testHeader() { assertThat(header(h -> h.blockId("block-id").text(plainText("This is the headline!"))), is(notNullValue())); } + @Test + public void testMarkdown() { + assertThat(markdown(h -> h.text("**this is bold**")), is(notNullValue())); + } + @Test public void testRichText() { assertThat(richText(i -> i @@ -123,4 +128,4 @@ public void testWorkflowButton() { ), is(notNullValue())); } -} \ No newline at end of file +}