From b469ad1d133e681004c764b216ee564c59bd7871 Mon Sep 17 00:00:00 2001 From: zmarushchak Date: Wed, 11 May 2022 18:49:36 +0300 Subject: [PATCH 1/2] Support Attachment in unfurling message --- .../params/chat/ChatUnfurlBlocksIF.java | 3 +- .../params/chat/ChatUnfurlParamsIF.java | 16 +++++----- .../client/models/BlockOrAttachment.java | 2 +- .../models/ChatUnfurlBlocksOrAttachment.java | 6 ++++ .../json/BlockOrAttachmentDeserializer.java | 14 +++++---- .../params/chat/ChatUnfurlParamsTest.java | 5 ++++ .../chat_unfurl_params_using_attachment.json | 30 +++++++++++++++++++ 7 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 slack-base/src/main/java/com/hubspot/slack/client/models/ChatUnfurlBlocksOrAttachment.java create mode 100644 slack-base/src/test/resources/chat_unfurl_params_using_attachment.json diff --git a/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlBlocksIF.java b/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlBlocksIF.java index 7c46b4c4..f2626391 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlBlocksIF.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlBlocksIF.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.hubspot.immutables.style.HubSpotStyle; import com.hubspot.slack.client.models.BlockOrAttachment; +import com.hubspot.slack.client.models.ChatUnfurlBlocksOrAttachment; import com.hubspot.slack.client.models.json.BlockOrAttachmentDeserializer; import java.util.List; import org.immutables.value.Value; @@ -12,7 +13,7 @@ @HubSpotStyle @Value.Immutable @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) -public interface ChatUnfurlBlocksIF { +public interface ChatUnfurlBlocksIF extends ChatUnfurlBlocksOrAttachment { @Value.Parameter(order = 1) @JsonDeserialize(contentUsing = BlockOrAttachmentDeserializer.class) List getBlocks(); diff --git a/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsIF.java b/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsIF.java index 5b1dfaf4..1da6a699 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsIF.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsIF.java @@ -1,18 +1,19 @@ package com.hubspot.slack.client.methods.params.chat; +import java.net.URI; +import java.util.Map; +import java.util.Optional; + +import org.immutables.value.Value.Immutable; + import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.hubspot.immutables.style.HubSpotStyle; import com.hubspot.slack.client.methods.interceptor.HasChannel; -import com.hubspot.slack.client.models.BlockOrAttachment; +import com.hubspot.slack.client.models.ChatUnfurlBlocksOrAttachment; import com.hubspot.slack.client.models.json.BlockOrAttachmentDeserializer; -import java.net.URI; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import org.immutables.value.Value.Immutable; @Immutable @HubSpotStyle @@ -24,7 +25,8 @@ public interface ChatUnfurlParamsIF extends HasChannel { String getTs(); - Map getUnfurls(); + @JsonDeserialize(contentUsing = BlockOrAttachmentDeserializer.class) + Map getUnfurls(); Optional isUserAuthRequired(); diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/BlockOrAttachment.java b/slack-base/src/main/java/com/hubspot/slack/client/models/BlockOrAttachment.java index a30c3cf4..6c0869aa 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/BlockOrAttachment.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/BlockOrAttachment.java @@ -1,4 +1,4 @@ package com.hubspot.slack.client.models; -public interface BlockOrAttachment { +public interface BlockOrAttachment extends ChatUnfurlBlocksOrAttachment { } diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/ChatUnfurlBlocksOrAttachment.java b/slack-base/src/main/java/com/hubspot/slack/client/models/ChatUnfurlBlocksOrAttachment.java new file mode 100644 index 00000000..0ab73c3e --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/ChatUnfurlBlocksOrAttachment.java @@ -0,0 +1,6 @@ +package com.hubspot.slack.client.models; + +// We need common interface to make unfurl call using any of - old or Block Kit framework. +// Having this we can construct ChatUnfurlParams for both cases. +public interface ChatUnfurlBlocksOrAttachment { +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/json/BlockOrAttachmentDeserializer.java b/slack-base/src/main/java/com/hubspot/slack/client/models/json/BlockOrAttachmentDeserializer.java index 5e1c230d..d031e9e7 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/json/BlockOrAttachmentDeserializer.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/json/BlockOrAttachmentDeserializer.java @@ -7,23 +7,27 @@ import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.hubspot.slack.client.methods.params.chat.ChatUnfurlBlocks; import com.hubspot.slack.client.models.Attachment; -import com.hubspot.slack.client.models.BlockOrAttachment; +import com.hubspot.slack.client.models.ChatUnfurlBlocksOrAttachment; import com.hubspot.slack.client.models.blocks.Block; -public class BlockOrAttachmentDeserializer extends StdDeserializer { +public class BlockOrAttachmentDeserializer extends StdDeserializer { + private static final String BLOCKS_FIELD = "blocks"; private static final String TYPE_FIELD = "type"; protected BlockOrAttachmentDeserializer() { - super(BlockOrAttachment.class); + super(ChatUnfurlBlocksOrAttachment.class); } @Override - public BlockOrAttachment deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException { + public ChatUnfurlBlocksOrAttachment deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException { ObjectCodec codec = jsonParser.getCodec(); JsonNode node = codec.readTree(jsonParser); - if (node.has(TYPE_FIELD)) { + if (node.has(BLOCKS_FIELD)) { + return codec.treeToValue(node, ChatUnfurlBlocks.class); + } else if (node.has(TYPE_FIELD)){ return codec.treeToValue(node, Block.class); } else { return codec.treeToValue(node, Attachment.class); diff --git a/slack-base/src/test/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsTest.java b/slack-base/src/test/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsTest.java index 45526a63..34401894 100644 --- a/slack-base/src/test/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsTest.java +++ b/slack-base/src/test/java/com/hubspot/slack/client/methods/params/chat/ChatUnfurlParamsTest.java @@ -58,4 +58,9 @@ public void itCanBuildChatUnfurlParamsWithBlock() throws URISyntaxException { public void itCanDeserChatUnfurlParamsWithBlock() throws IOException { testSerialization("chat_unfurl_params_using_block.json", ChatUnfurlParams.class); } + + @Test + public void itCanDeserChatUnfurlParamsWithAttachment() throws IOException { + testSerialization("chat_unfurl_params_using_attachment.json", ChatUnfurlParams.class); + } } diff --git a/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json b/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json new file mode 100644 index 00000000..4175e556 --- /dev/null +++ b/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json @@ -0,0 +1,30 @@ +{ + "channel": "C123456", + "ts": "123456789.9875", + "unfurls": { + "https://gentle-buttons.com/carafe": { + "fallback": null, + "color": null, + "pretext": null, + "author_name": null, + "author_link": null, + "author_icon": null, + "title": null, + "title_link": null, + "text": "Take a look at this carafe, just another cousin of glass", + "image_url": null, + "attachment_type": null, + "fields": [], + "footer": null, + "footer_icon": null, + "thumb_url": null, + "callback_id": null, + "actions": [], + "mrkdwn_in": [], + "ts": null + } + }, + "user_auth_message": null, + "user_auth_url": null, + "is_user_auth_required": null +} \ No newline at end of file From 919021b57f90f38c0f5b77464d4b5c1df37dd0fb Mon Sep 17 00:00:00 2001 From: zmarushchak Date: Wed, 11 May 2022 18:57:03 +0300 Subject: [PATCH 2/2] New line at the end of file --- .../src/test/resources/chat_unfurl_params_using_attachment.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json b/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json index 4175e556..e553e5c7 100644 --- a/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json +++ b/slack-base/src/test/resources/chat_unfurl_params_using_attachment.json @@ -27,4 +27,4 @@ "user_auth_message": null, "user_auth_url": null, "is_user_auth_required": null -} \ No newline at end of file +}