diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/SlackEventType.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/SlackEventType.java index 3f8d405a..785c4bc9 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/events/SlackEventType.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/SlackEventType.java @@ -21,6 +21,11 @@ import com.hubspot.slack.client.models.events.user.SlackMemberJoinedChannelEvent; import com.hubspot.slack.client.models.events.user.SlackMemberLeftChannelEvent; import com.hubspot.slack.client.models.events.user.SlackUserChangeEvent; +import com.hubspot.slack.client.models.events.workflow.WorkflowDeletedEvent; +import com.hubspot.slack.client.models.events.workflow.WorkflowPublishedEvent; +import com.hubspot.slack.client.models.events.workflow.WorkflowStepDeletedEvent; +import com.hubspot.slack.client.models.events.workflow.WorkflowStepExecuteEvent; +import com.hubspot.slack.client.models.events.workflow.WorkflowUnpublishedEvent; public enum SlackEventType { @@ -90,8 +95,12 @@ public enum SlackEventType { TOKENS_REVOKED(SlackTokensRevokedEvent.class), URL_VERIFICATION, USER_CHANGE(SlackUserChangeEvent.class), - UNKNOWN - ; + WORKFLOW_DELETED(WorkflowDeletedEvent.class), + WORKFLOW_PUBLISHED(WorkflowPublishedEvent.class), + WORKFLOW_STEP_DELETED(WorkflowStepDeletedEvent.class), + WORKFLOW_STEP_EXECUTE(WorkflowStepExecuteEvent.class), + WORKFLOW_UNPUBLISHED(WorkflowUnpublishedEvent.class), + UNKNOWN; private final Class eventClass; diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/json/EventDeserializer.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/json/EventDeserializer.java index b87e1ea4..c0cf5bab 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/events/json/EventDeserializer.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/json/EventDeserializer.java @@ -1,9 +1,6 @@ package com.hubspot.slack.client.models.events.json; -import java.io.IOException; - import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonNode; @@ -11,6 +8,7 @@ import com.hubspot.slack.client.models.events.SlackEvent; import com.hubspot.slack.client.models.events.SlackEventType; import com.hubspot.slack.client.models.events.SlackMessageSubtype; +import java.io.IOException; public class EventDeserializer extends StdDeserializer { private static final String TYPE_FIELD = "type"; @@ -21,7 +19,7 @@ public EventDeserializer() { } @Override - public SlackEvent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { + public SlackEvent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { ObjectCodec codec = p.getCodec(); JsonNode node = codec.readTree(p); diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowDeletedEventIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowDeletedEventIF.java new file mode 100644 index 00000000..f77c1488 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowDeletedEventIF.java @@ -0,0 +1,18 @@ +package com.hubspot.slack.client.models.events.workflow; + +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.models.workflows.WorkflowConfiguration; +import org.immutables.value.Value.Immutable; + +@Immutable +@HubSpotStyle +@JsonNaming(SnakeCaseStrategy.class) +@JsonDeserialize(as = WorkflowDeletedEvent.class) +public interface WorkflowDeletedEventIF extends WorkflowEventBase { + + WorkflowConfiguration getWorkflowDraftConfiguration(); + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowEventBase.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowEventBase.java new file mode 100644 index 00000000..cf90692d --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowEventBase.java @@ -0,0 +1,15 @@ +package com.hubspot.slack.client.models.events.workflow; + +import com.hubspot.slack.client.models.events.SlackEvent; + +public interface WorkflowEventBase extends SlackEvent { + + String getWorkflowId(); + + String getEventTs(); + + @Override + default String getTs() { + return null; + } +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowPublishedEventIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowPublishedEventIF.java new file mode 100644 index 00000000..10620a99 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowPublishedEventIF.java @@ -0,0 +1,18 @@ +package com.hubspot.slack.client.models.events.workflow; + +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.models.workflows.WorkflowConfiguration; +import org.immutables.value.Value.Immutable; + +@Immutable +@HubSpotStyle +@JsonNaming(SnakeCaseStrategy.class) +@JsonDeserialize(as = WorkflowPublishedEvent.class) +public interface WorkflowPublishedEventIF extends WorkflowEventBase { + + WorkflowConfiguration getWorkflowPublishedConfiguration(); + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowStepDeletedEventIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowStepDeletedEventIF.java new file mode 100644 index 00000000..6ce87b50 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowStepDeletedEventIF.java @@ -0,0 +1,19 @@ +package com.hubspot.slack.client.models.events.workflow; + +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.models.workflows.WorkflowConfiguration; +import org.immutables.value.Value.Immutable; + +@Immutable +@HubSpotStyle +@JsonNaming(SnakeCaseStrategy.class) +@JsonDeserialize(as = WorkflowStepDeletedEvent.class) +public interface WorkflowStepDeletedEventIF extends WorkflowEventBase { + + WorkflowConfiguration getWorkflowDraftConfiguration(); + + WorkflowConfiguration getWorkflowPublishedConfiguration(); +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowStepExecuteEventIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowStepExecuteEventIF.java new file mode 100644 index 00000000..e57952cf --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowStepExecuteEventIF.java @@ -0,0 +1,27 @@ +package com.hubspot.slack.client.models.events.workflow; + +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.models.events.SlackEvent; +import com.hubspot.slack.client.models.workflows.WorkflowStep; +import org.immutables.value.Value.Immutable; + +@Immutable +@HubSpotStyle +@JsonNaming(SnakeCaseStrategy.class) +@JsonDeserialize(as = WorkflowStepExecuteEvent.class) +public interface WorkflowStepExecuteEventIF extends SlackEvent { + + WorkflowStep getWorkflowStep(); + + String getCallbackId(); + + @Override + default String getTs() { + return null; + } + + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowUnpublishedEventIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowUnpublishedEventIF.java new file mode 100644 index 00000000..1626a4e3 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/events/workflow/WorkflowUnpublishedEventIF.java @@ -0,0 +1,17 @@ +package com.hubspot.slack.client.models.events.workflow; + +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.models.workflows.WorkflowConfiguration; +import org.immutables.value.Value.Immutable; + +@Immutable +@HubSpotStyle +@JsonNaming(SnakeCaseStrategy.class) +@JsonDeserialize(as = WorkflowUnpublishedEvent.class) +public interface WorkflowUnpublishedEventIF extends WorkflowEventBase { + + WorkflowConfiguration getWorkflowDraftConfiguration(); +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/InteractiveCallbackType.java b/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/InteractiveCallbackType.java index deb14baf..fbeb59fa 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/InteractiveCallbackType.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/InteractiveCallbackType.java @@ -11,6 +11,7 @@ public enum InteractiveCallbackType { BLOCK_ACTIONS, VIEW_SUBMISSION, SHORTCUT, + WORKFLOW_STEP_EDIT, UNKNOWN ; diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/SlackInteractiveCallback.java b/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/SlackInteractiveCallback.java index a2cf488c..11c33257 100644 --- a/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/SlackInteractiveCallback.java +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/SlackInteractiveCallback.java @@ -22,7 +22,8 @@ @Type(value = DialogSubmission.class, name = "dialog_submission"), @Type(value = ViewSubmission.class, name = "view_submission"), @Type(value = MessageAction.class, name = "message_action"), - @Type(value = Shortcut.class, name = "shortcut") + @Type(value = Shortcut.class, name = "shortcut"), + @Type(value = WorkflowStepEdit.class, name="workflow_step_edit") } ) public interface SlackInteractiveCallback { diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/WorkflowStepEditIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/WorkflowStepEditIF.java new file mode 100644 index 00000000..0bd385f8 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/interaction/WorkflowStepEditIF.java @@ -0,0 +1,24 @@ +package com.hubspot.slack.client.models.interaction; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.hubspot.immutables.style.HubSpotStyle; +import com.hubspot.slack.client.models.SlackChannel; +import com.hubspot.slack.client.models.workflows.WorkflowStep; +import org.immutables.value.Value.Immutable; + +@Immutable +@HubSpotStyle +@JsonNaming(SnakeCaseStrategy.class) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public interface WorkflowStepEditIF extends SlackInteractiveCallback { + String getTriggerId(); + + WorkflowStep getWorkflowStep(); + + @Override + default SlackChannel getChannel() { + return null; + } +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/AppStepIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/AppStepIF.java new file mode 100644 index 00000000..019229a7 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/AppStepIF.java @@ -0,0 +1,19 @@ +package com.hubspot.slack.client.models.workflows; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.hubspot.immutables.style.HubSpotStyle; +import org.immutables.value.Value; + +@Value.Immutable +@HubSpotStyle +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public interface AppStepIF { + + String getAppId(); + String getWorkflowStepId(); + String getCallbackId(); + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/InputIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/InputIF.java new file mode 100644 index 00000000..f8490451 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/InputIF.java @@ -0,0 +1,27 @@ +package com.hubspot.slack.client.models.workflows; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.hubspot.immutables.style.HubSpotStyle; +import java.util.Map; +import org.immutables.value.Value; +import org.immutables.value.Value.Default; + +@Value.Immutable +@HubSpotStyle +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public interface InputIF { + +// according to the docs, this can be any valid JSON value. https://api.slack.com/reference/workflows/workflow_step + JsonNode getValue(); + + Map getVariables(); + @Default + default boolean getSkipVariableReplacement() { + return true; + } + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/OutputIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/OutputIF.java new file mode 100644 index 00000000..8eb17050 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/OutputIF.java @@ -0,0 +1,19 @@ +package com.hubspot.slack.client.models.workflows; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.hubspot.immutables.style.HubSpotStyle; +import org.immutables.value.Value; + +@Value.Immutable +@HubSpotStyle +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public interface OutputIF { + + String getName(); + String getLabel(); + OutputType getType(); + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/OutputType.java b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/OutputType.java new file mode 100644 index 00000000..5985800e --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/OutputType.java @@ -0,0 +1,26 @@ +package com.hubspot.slack.client.models.workflows; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; + +public enum OutputType { + CHANNEL, + TEXT, + UNKNOWN, + USER; + + @JsonCreator + public static OutputType fromSlackName(String slackName) { + return Arrays.stream(OutputType.values()) + .filter(enumVal -> enumVal.toString().equalsIgnoreCase(slackName)) + .findFirst() + .orElse(UNKNOWN); + } + + @JsonValue + public String toSlackName() { + return this.toString().toLowerCase(); + } + + } diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/WorkflowConfigurationIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/WorkflowConfigurationIF.java new file mode 100644 index 00000000..8ce7752a --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/WorkflowConfigurationIF.java @@ -0,0 +1,19 @@ +package com.hubspot.slack.client.models.workflows; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.hubspot.immutables.style.HubSpotStyle; +import java.util.List; +import org.immutables.value.Value; + +@Value.Immutable +@HubSpotStyle +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public interface WorkflowConfigurationIF { + + String getVersionId(); + List getAppSteps(); + +} diff --git a/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/WorkflowStepIF.java b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/WorkflowStepIF.java new file mode 100644 index 00000000..8c225654 --- /dev/null +++ b/slack-base/src/main/java/com/hubspot/slack/client/models/workflows/WorkflowStepIF.java @@ -0,0 +1,32 @@ +package com.hubspot.slack.client.models.workflows; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.hubspot.immutables.style.HubSpotStyle; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.immutables.value.Value; + +@Value.Immutable +@HubSpotStyle +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public interface WorkflowStepIF { + + Optional getWorkflowId(); + Optional getStepId(); + + Optional getWorkflowInstanceId(); + + Optional getWorkflowStepExecuteId(); + + Optional getStepName(); + Optional getStepImageUrl(); + + Map getInputs(); + + List getOutputs(); + +} diff --git a/slack-base/src/test/java/com/hubspot/slack/client/SerializationTestBase.java b/slack-base/src/test/java/com/hubspot/slack/client/SerializationTestBase.java index 659a982c..e2efdae1 100644 --- a/slack-base/src/test/java/com/hubspot/slack/client/SerializationTestBase.java +++ b/slack-base/src/test/java/com/hubspot/slack/client/SerializationTestBase.java @@ -2,20 +2,39 @@ import static org.assertj.core.api.Assertions.assertThat; +import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import com.hubspot.slack.client.jackson.ObjectMapperUtils; import com.hubspot.slack.client.models.JsonLoader; import java.io.IOException; public class SerializationTestBase { private static final ObjectMapper OBJECT_MAPPER = ObjectMapperUtils.mapper(); + private static final ObjectMapper PRETTY_MAPPER = ObjectMapperUtils.mapper(); + static { + PRETTY_MAPPER.enable(SerializationFeature.INDENT_OUTPUT); + PRETTY_MAPPER.configure( + SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true + ); + PRETTY_MAPPER.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true); + } - protected void testSerialization(String filename, Class jsonClass) + protected void testSerializationPretty(String filename, Class jsonClass) throws IOException { String rawJson = JsonLoader.loadJsonFromFile(filename); + T jsonObject = PRETTY_MAPPER.readValue(rawJson, jsonClass); + String generatedJson = PRETTY_MAPPER.writeValueAsString(jsonObject); + assertThat(PRETTY_MAPPER.writeValueAsString(PRETTY_MAPPER.readTree(rawJson))) + .isEqualTo(generatedJson); + } + + protected void testSerialization(String filename, Class jsonClass) + throws IOException { + String rawJson = JsonLoader.loadJsonFromFile(filename); T jsonObject = OBJECT_MAPPER.readValue(rawJson, jsonClass); String generatedJson = OBJECT_MAPPER.writeValueAsString(jsonObject); assertThat(OBJECT_MAPPER.readTree(rawJson)) - .isEqualTo(OBJECT_MAPPER.readTree(generatedJson)); + .isEqualTo(OBJECT_MAPPER.readTree(generatedJson)); } } diff --git a/slack-base/src/test/java/com/hubspot/slack/client/models/events/json/EventDeserializerTest.java b/slack-base/src/test/java/com/hubspot/slack/client/models/events/json/EventDeserializerTest.java index 505d1372..8f1f4175 100644 --- a/slack-base/src/test/java/com/hubspot/slack/client/models/events/json/EventDeserializerTest.java +++ b/slack-base/src/test/java/com/hubspot/slack/client/models/events/json/EventDeserializerTest.java @@ -1,5 +1,8 @@ package com.hubspot.slack.client.models.events.json; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertTrue; + import com.fasterxml.jackson.core.type.TypeReference; import com.hubspot.slack.client.jackson.ObjectMapperUtils; import com.hubspot.slack.client.methods.interceptor.HasChannel; @@ -13,12 +16,8 @@ import com.hubspot.slack.client.models.events.user.SlackMemberJoinedChannelEvent; import com.hubspot.slack.client.models.events.user.SlackMemberLeftChannelEvent; import com.hubspot.slack.client.models.events.user.SlackUserChangeEvent; -import org.junit.Test; - import java.io.IOException; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertTrue; +import org.junit.Test; public class EventDeserializerTest { @Test @@ -137,6 +136,31 @@ public void itCanDeserializeGroupUnArchiveEvent() throws IOException { assertThat(event.getType()).isEqualTo(SlackEventType.GROUP_UNARCHIVE); } + @Test + public void itCanDeserializeWorkflowStepExecute() throws IOException { + assertThat(fetchAndDeserializeSlackEvent("workflow_step_execute_event.json").getType()).isEqualTo(SlackEventType.WORKFLOW_STEP_EXECUTE); + } + + @Test + public void itCanDeserializeWorkflowPublished() throws IOException { + assertThat(fetchAndDeserializeSlackEvent("workflow_published_event.json").getType()).isEqualTo(SlackEventType.WORKFLOW_PUBLISHED); + } + + @Test + public void itCanDeserializeWorkflowUnpublished() throws IOException { + assertThat(fetchAndDeserializeSlackEvent("workflow_unpublished_event.json").getType()).isEqualTo(SlackEventType.WORKFLOW_UNPUBLISHED); + } + + @Test + public void itCanDeserializeWorkflowDeleted() throws IOException { + assertThat(fetchAndDeserializeSlackEvent("workflow_deleted_event.json").getType()).isEqualTo(SlackEventType.WORKFLOW_DELETED); + } + + @Test + public void itCanDeserializeWorkflowStepDeleted() throws IOException { + assertThat(fetchAndDeserializeSlackEvent("workflow_step_deleted_event.json").getType()).isEqualTo(SlackEventType.WORKFLOW_STEP_DELETED); + } + @Test public void itCanDeserMemberJoinedChannelEventWithoutInviter() throws IOException { SlackMemberJoinedChannelEvent event = fetchAndDeserializeSlackEvent("member_joined_channel.json").toDetailedEvent(); diff --git a/slack-base/src/test/java/com/hubspot/slack/client/models/interaction/WorkflowsSerializationTest.java b/slack-base/src/test/java/com/hubspot/slack/client/models/interaction/WorkflowsSerializationTest.java new file mode 100644 index 00000000..76becdc3 --- /dev/null +++ b/slack-base/src/test/java/com/hubspot/slack/client/models/interaction/WorkflowsSerializationTest.java @@ -0,0 +1,13 @@ +package com.hubspot.slack.client.models.interaction; + +import com.hubspot.slack.client.SerializationTestBase; +import java.io.IOException; +import org.junit.Test; + +public class WorkflowsSerializationTest extends SerializationTestBase { + + @Test + public void workflowStepEdit() throws IOException { + testSerializationPretty("workflow_step_edit.json", WorkflowStepEdit.class); + } +} diff --git a/slack-base/src/test/java/com/hubspot/slack/client/models/workflows/WorkflowStepSerializationTest.java b/slack-base/src/test/java/com/hubspot/slack/client/models/workflows/WorkflowStepSerializationTest.java new file mode 100644 index 00000000..bcf62ae8 --- /dev/null +++ b/slack-base/src/test/java/com/hubspot/slack/client/models/workflows/WorkflowStepSerializationTest.java @@ -0,0 +1,14 @@ +package com.hubspot.slack.client.models.workflows; + +import com.hubspot.slack.client.SerializationTestBase; +import java.io.IOException; +import org.junit.Test; + +public class WorkflowStepSerializationTest extends SerializationTestBase { + + @Test + public void testSerialization() throws IOException { + testSerialization("workflow_step.json", WorkflowStep.class); + } + +} diff --git a/slack-base/src/test/resources/workflow_deleted_event.json b/slack-base/src/test/resources/workflow_deleted_event.json new file mode 100644 index 00000000..eeb056e1 --- /dev/null +++ b/slack-base/src/test/resources/workflow_deleted_event.json @@ -0,0 +1,31 @@ +{ + "token": "uWopedqK86MJfjUeq8v9pUAD", + "team_id": "redacted", + "api_app_id": "redacted", + "event": { + "type": "workflow_deleted", + "workflow_id": "338772933017143757", + "workflow_draft_configuration": { + "version_id": "338776445998336786", + "app_steps": [ + { + "app_id": "A012VT792TC", + "workflow_step_id": "def5f7a2-365f-42e9-8ab8-26f9e9716696", + "callback_id": "take_two" + }, + { + "app_id": "A012VT792TC", + "workflow_step_id": "19dab8c3-c062-43f7-a912-a69da0cf0bc0", + "callback_id": "take_three" + } + ] + }, + "event_ts": "1537543598.000200" + }, + "type": "event_callback", + "event_id": "EvCYD468UB", + "event_time": 1537543598, + "authed_users": [ + "UBRFHDFGA" + ] +} diff --git a/slack-base/src/test/resources/workflow_published_event.json b/slack-base/src/test/resources/workflow_published_event.json new file mode 100644 index 00000000..47ce0d1e --- /dev/null +++ b/slack-base/src/test/resources/workflow_published_event.json @@ -0,0 +1,31 @@ +{ + "token": "uWopedqK86MJfjUeq8v9pUAD", + "team_id": "redacted", + "api_app_id": "redacted", + "event": { + "type": "workflow_published", + "workflow_id": "338772933017143757", + "workflow_published_configuration": { + "version_id": "338776445998336786", + "app_steps": [ + { + "app_id": "A012VT792TC", + "workflow_step_id": "def5f7a2-365f-42e9-8ab8-26f9e9716696", + "callback_id": "take_two" + }, + { + "app_id": "A012VT792TC", + "workflow_step_id": "19dab8c3-c062-43f7-a912-a69da0cf0bc0", + "callback_id": "take_three" + } + ] + }, + "event_ts": "1537543598.000200" + }, + "type": "event_callback", + "event_id": "EvCYD468UB", + "event_time": 1537543598, + "authed_users": [ + "UBRFHDFGA" + ] +} diff --git a/slack-base/src/test/resources/workflow_step.json b/slack-base/src/test/resources/workflow_step.json new file mode 100644 index 00000000..d5a1653a --- /dev/null +++ b/slack-base/src/test/resources/workflow_step.json @@ -0,0 +1,26 @@ +{ +"workflow_id" : "438766394390110018", +"step_id" : "2b44c3e9-7f8e-4f16-9e44-b8465a637c9c", + "inputs": { + "strings": { + "value": [ + ":pizza:", + ":hamburger:", + ":carrot:", + ":burrito:", + ":taco:" + ], + "skip_variable_replacement": false, + "variables": { + "target": "replacement" + } + } + }, + "outputs": [ + { + "name": "random_string", + "type": "text", + "label": "Random String" + } + ] +} \ No newline at end of file diff --git a/slack-base/src/test/resources/workflow_step_deleted_event.json b/slack-base/src/test/resources/workflow_step_deleted_event.json new file mode 100644 index 00000000..7ccae91d --- /dev/null +++ b/slack-base/src/test/resources/workflow_step_deleted_event.json @@ -0,0 +1,51 @@ +{ + "token": "uWopedqK86MJfjUeq8v9pUAD", + "team_id": "redacted", + "api_app_id": "redacted", + "event": { + "type": "workflow_step_deleted", + "workflow_id": "338772933017143757", + "workflow_draft_configuration": { + "version_id": "338776445998336786", + "app_steps": [ + { + "app_id": "A012VT792TC", + "workflow_step_id": "def5f7a2-365f-42e9-8ab8-26f9e9716696", + "callback_id": "take_two" + }, + { + "app_id": "A012VT792TC", + "workflow_step_id": "19dab8c3-c062-43f7-a912-a69da0cf0bc0", + "callback_id": "take_three" + } + ] + }, + "workflow_published_configuration": { + "version_id": "338776445998336786", + "app_steps": [ + { + "app_id": "A012VT792TC", + "workflow_step_id": "def5f7a2-365f-42e9-8ab8-26f9e9716696", + "callback_id": "take_two" + }, + { + "app_id": "A012VT792TC", + "workflow_step_id": "19dab8c3-c062-43f7-a912-a69da0cf0bc0", + "callback_id": "take_three" + }, + { + "app_id": "A012VT792TC", + "workflow_step_id": "e9f8c121-de29-4d37-9e00-5204663a1b4d", + "callback_id": "take_four" + } + ] + }, + "event_ts": "1537543598.000200" + }, + "type": "event_callback", + "event_id": "EvCYD468UB", + "event_time": 1537543598, + "authed_users": [ + "UBRFHDFGA" + ] +} diff --git a/slack-base/src/test/resources/workflow_step_edit.json b/slack-base/src/test/resources/workflow_step_edit.json new file mode 100644 index 00000000..7203ff6c --- /dev/null +++ b/slack-base/src/test/resources/workflow_step_edit.json @@ -0,0 +1,39 @@ +{ + "action_ts": "1671054757.388707", + "callback_id": "step_edit", + "team": { + "domain": "XXXX", + "id": "T0719BWG1" + }, + "token": "redacted", + "trigger_id": "4522294552740.7043404545.1c925b0a099e37ca9ef67b3ae18db20e", + "type": "workflow_step_edit", + "user": { + "access_token" : null, + "id" : "U01T69L9WR0", + "name" : null + }, + "workflow_step": { + "inputs": { + "strings": { + "skip_variable_replacement": false, + "value": [ + ":pizza:", + ":hamburger:", + ":carrot:", + ":burrito:", + ":taco:" + ] + } + }, + "outputs": [ + { + "label": "Random String", + "name": "random_string", + "type": "text" + } + ], + "step_id": "2b44c3e9-7f8e-4f16-9e44-b8465a637c9c", + "workflow_id": "438766394390110018" + } +} \ No newline at end of file diff --git a/slack-base/src/test/resources/workflow_step_execute_event.json b/slack-base/src/test/resources/workflow_step_execute_event.json new file mode 100644 index 00000000..1233c121 --- /dev/null +++ b/slack-base/src/test/resources/workflow_step_execute_event.json @@ -0,0 +1,43 @@ +{ + "token": "uWopedqK86MJfjUeq8v9pUAD", + "team_id": "redacted", + "api_app_id": "redacted", + "event": { + "type": "workflow_step_execute", + "callback_id": "open_ticket", + "workflow_step": { + "workflow_step_execute_id": "1036669284371.19077474947.c94bcf942e047298d21f89faf24f1326", + "inputs": { + "title": { + "value": "{{user}} submitted an issue", + "skip_variable_replacement": false + }, + "submitter": { + "value": "{{user}}", + "skip_variable_replacement": false + }, + "channel": { + "value": "{{channel}}", + "skip_variable_replacement": true + } + }, + "outputs": [ + { + "type": "text", + "name": "title", + "label": "Title of Ticket" + }, + { + "type": "text", + "name": "id", + "label": "Ticket ID" + } + ] + } }, + "type": "event_callback", + "event_id": "EvCYD468UB", + "event_time": 1537543598, + "authed_users": [ + "UBRFHDFGA" + ] +} diff --git a/slack-base/src/test/resources/workflow_unpublished_event.json b/slack-base/src/test/resources/workflow_unpublished_event.json new file mode 100644 index 00000000..c34a5d40 --- /dev/null +++ b/slack-base/src/test/resources/workflow_unpublished_event.json @@ -0,0 +1,31 @@ +{ + "token": "uWopedqK86MJfjUeq8v9pUAD", + "team_id": "redacted", + "api_app_id": "redacted", + "event": { + "type": "workflow_unpublished", + "workflow_id": "338772933017143757", + "workflow_draft_configuration": { + "version_id": "338776445998336786", + "app_steps": [ + { + "app_id": "A012VT792TC", + "workflow_step_id": "def5f7a2-365f-42e9-8ab8-26f9e9716696", + "callback_id": "take_two" + }, + { + "app_id": "A012VT792TC", + "workflow_step_id": "19dab8c3-c062-43f7-a912-a69da0cf0bc0", + "callback_id": "take_three" + } + ] + }, + "event_ts": "1537543598.000200" + }, + "type": "event_callback", + "event_id": "EvCYD468UB", + "event_time": 1537543598, + "authed_users": [ + "UBRFHDFGA" + ] +}