From 5eec5a2e406e3c6661e2ae5b6e07fd956a33be58 Mon Sep 17 00:00:00 2001 From: yuriskov Date: Sat, 13 Aug 2022 23:11:38 +0900 Subject: [PATCH 1/2] Feat: Add structs for metadata events --- slackevents/inner_events.go | 108 ++++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 29 deletions(-) diff --git a/slackevents/inner_events.go b/slackevents/inner_events.go index 02767eb8f..5af3b225f 100644 --- a/slackevents/inner_events.go +++ b/slackevents/inner_events.go @@ -332,6 +332,47 @@ type WorkflowStepExecuteEvent struct { EventTimestamp string `json:"event_ts"` } +// MessageMetadataPostedEvent is sent, if a message with metadata is posted +type MessageMetadataPostedEvent struct { + Type string `json:"type"` + AppId string `json:"app_id"` + BotId string `json:"bot_id"` + UserId string `json:"user_id"` + TeamId string `json:"team_id"` + ChannelId string `json:"channel_id"` + Metadata *slack.SlackMetadata `json:"metadata"` + MessageTimestamp string `json:"message_ts"` + EventTimestamp string `json:"event_ts"` +} + +// MessageMetadataUpdatedEvent is sent, if a message with metadata is deleted +type MessageMetadataUpdatedEvent struct { + Type string `json:"type"` + ChannelId string `json:"channel_id"` + EventTimestamp string `json:"event_ts"` + PreviousMetadata *slack.SlackMetadata `json:"previous_metadata"` + AppId string `json:"app_id"` + BotId string `json:"bot_id"` + UserId string `json:"user_id"` + TeamId string `json:"team_id"` + MessageTimestamp string `json:"message_ts"` + Metadata *slack.SlackMetadata `json:"metadata"` +} + +// MessageMetadataDeletedEvent is sent, if a message with metadata is deleted +type MessageMetadataDeletedEvent struct { + Type string `json:"type"` + ChannelId string `json:"channel_id"` + EventTimestamp string `json:"event_ts"` + PreviousMetadata *slack.SlackMetadata `json:"previous_metadata"` + AppId string `json:"app_id"` + BotId string `json:"bot_id"` + UserId string `json:"user_id"` + TeamId string `json:"team_id"` + MessageTimestamp string `json:"message_ts"` + DeletedTimestamp string `json:"deleted_ts"` +} + type EventWorkflowStep struct { WorkflowStepExecuteID string `json:"workflow_step_execute_id"` WorkflowID string `json:"workflow_id"` @@ -503,39 +544,48 @@ const ( EmojiChanged = EventsAPIType("emoji_changed") // WorkflowStepExecute Happens, if a workflow step of your app is invoked WorkflowStepExecute = EventsAPIType("workflow_step_execute") + // MessageMetadataPosted A message with metadata was posted + MessageMetadataPosted = EventsAPIType("message_metadata_posted") + // MessageMetadataPosted A message with metadata was updated + MessageMetadataUpdated = EventsAPIType("message_metadata_updated") + // MessageMetadataPosted A message with metadata was deleted + MessageMetadataDeleted = EventsAPIType("message_metadata_deleted") ) // EventsAPIInnerEventMapping maps INNER Event API events to their corresponding struct // implementations. The structs should be instances of the unmarshalling // target for the matching event type. var EventsAPIInnerEventMapping = map[EventsAPIType]interface{}{ - AppMention: AppMentionEvent{}, - AppHomeOpened: AppHomeOpenedEvent{}, - AppUninstalled: AppUninstalledEvent{}, - ChannelCreated: ChannelCreatedEvent{}, - ChannelDeleted: ChannelDeletedEvent{}, - ChannelArchive: ChannelArchiveEvent{}, - ChannelUnarchive: ChannelUnarchiveEvent{}, - ChannelLeft: ChannelLeftEvent{}, - ChannelRename: ChannelRenameEvent{}, - ChannelIDChanged: ChannelIDChangedEvent{}, - GroupDeleted: GroupDeletedEvent{}, - GroupArchive: GroupArchiveEvent{}, - GroupUnarchive: GroupUnarchiveEvent{}, - GroupLeft: GroupLeftEvent{}, - GroupRename: GroupRenameEvent{}, - GridMigrationFinished: GridMigrationFinishedEvent{}, - GridMigrationStarted: GridMigrationStartedEvent{}, - LinkShared: LinkSharedEvent{}, - Message: MessageEvent{}, - MemberJoinedChannel: MemberJoinedChannelEvent{}, - MemberLeftChannel: MemberLeftChannelEvent{}, - PinAdded: PinAddedEvent{}, - PinRemoved: PinRemovedEvent{}, - ReactionAdded: ReactionAddedEvent{}, - ReactionRemoved: ReactionRemovedEvent{}, - TeamJoin: TeamJoinEvent{}, - TokensRevoked: TokensRevokedEvent{}, - EmojiChanged: EmojiChangedEvent{}, - WorkflowStepExecute: WorkflowStepExecuteEvent{}, + AppMention: AppMentionEvent{}, + AppHomeOpened: AppHomeOpenedEvent{}, + AppUninstalled: AppUninstalledEvent{}, + ChannelCreated: ChannelCreatedEvent{}, + ChannelDeleted: ChannelDeletedEvent{}, + ChannelArchive: ChannelArchiveEvent{}, + ChannelUnarchive: ChannelUnarchiveEvent{}, + ChannelLeft: ChannelLeftEvent{}, + ChannelRename: ChannelRenameEvent{}, + ChannelIDChanged: ChannelIDChangedEvent{}, + GroupDeleted: GroupDeletedEvent{}, + GroupArchive: GroupArchiveEvent{}, + GroupUnarchive: GroupUnarchiveEvent{}, + GroupLeft: GroupLeftEvent{}, + GroupRename: GroupRenameEvent{}, + GridMigrationFinished: GridMigrationFinishedEvent{}, + GridMigrationStarted: GridMigrationStartedEvent{}, + LinkShared: LinkSharedEvent{}, + Message: MessageEvent{}, + MemberJoinedChannel: MemberJoinedChannelEvent{}, + MemberLeftChannel: MemberLeftChannelEvent{}, + PinAdded: PinAddedEvent{}, + PinRemoved: PinRemovedEvent{}, + ReactionAdded: ReactionAddedEvent{}, + ReactionRemoved: ReactionRemovedEvent{}, + TeamJoin: TeamJoinEvent{}, + TokensRevoked: TokensRevokedEvent{}, + EmojiChanged: EmojiChangedEvent{}, + WorkflowStepExecute: WorkflowStepExecuteEvent{}, + MessageMetadataPosted: MessageMetadataPostedEvent{}, + MessageMetadataUpdated: MessageMetadataUpdatedEvent{}, + MessageMetadataDeleted: MessageMetadataDeletedEvent{}, } From 95d03413f06eace8707dfc984d06606254db13e7 Mon Sep 17 00:00:00 2001 From: yuriskov Date: Sat, 13 Aug 2022 23:11:50 +0900 Subject: [PATCH 2/2] Feat: Add tests for metadata related events struct --- slackevents/inner_events_test.go | 186 +++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/slackevents/inner_events_test.go b/slackevents/inner_events_test.go index 2a0ac56e8..c8906e67b 100644 --- a/slackevents/inner_events_test.go +++ b/slackevents/inner_events_test.go @@ -493,3 +493,189 @@ func TestWorkflowStepExecute(t *testing.T) { } } } + +func TestMessageMetadataPosted(t *testing.T) { + rawE := []byte(` + { + "type":"message_metadata_posted", + "app_id":"APPXXX", + "bot_id":"BOTXXX", + "user_id":"USERXXX", + "team_id":"TEAMXXX", + "channel_id":"CHANNELXXX", + "metadata":{ + "event_type":"type", + "event_payload":{"key": "value"} + }, + "message_ts":"1660398079.756349", + "event_ts":"1660398079.756349" + } + `) + + mmp := MessageMetadataPostedEvent{} + err := json.Unmarshal(rawE, &mmp) + if err != nil { + t.Error(err) + } + + if mmp.Type != "message_metadata_posted" { + t.Fail() + } + if mmp.AppId != "APPXXX" { + t.Fail() + } + if mmp.BotId != "BOTXXX" { + t.Fail() + } + if mmp.UserId != "USERXXX" { + t.Fail() + } + if mmp.TeamId != "TEAMXXX" { + t.Fail() + } + if mmp.ChannelId != "CHANNELXXX" { + t.Fail() + } + if mmp.Metadata.EventType != "type" { + t.Fail() + } + payload := mmp.Metadata.EventPayload + if len(payload) <= 0 { + t.Fail() + } + if mmp.EventTimestamp != "1660398079.756349" { + t.Fail() + } + if mmp.MessageTimestamp != "1660398079.756349" { + t.Fail() + } +} + +func TestMessageMetadataUpdated(t *testing.T) { + rawE := []byte(` + { + "type":"message_metadata_updated", + "channel_id":"CHANNELXXX", + "event_ts":"1660398079.756349", + "previous_metadata":{ + "event_type":"type1", + "event_payload":{"key1": "value1"} + }, + "app_id":"APPXXX", + "bot_id":"BOTXXX", + "user_id":"USERXXX", + "team_id":"TEAMXXX", + "message_ts":"1660398079.756349", + "metadata":{ + "event_type":"type2", + "event_payload":{"key2": "value2"} + } + } + `) + + mmp := MessageMetadataUpdatedEvent{} + err := json.Unmarshal(rawE, &mmp) + if err != nil { + t.Error(err) + } + + if mmp.Type != "message_metadata_updated" { + t.Fail() + } + if mmp.ChannelId != "CHANNELXXX" { + t.Fail() + } + if mmp.EventTimestamp != "1660398079.756349" { + t.Fail() + } + if mmp.PreviousMetadata.EventType != "type1" { + t.Fail() + } + payload := mmp.PreviousMetadata.EventPayload + if len(payload) <= 0 { + t.Fail() + } + if mmp.AppId != "APPXXX" { + t.Fail() + } + if mmp.BotId != "BOTXXX" { + t.Fail() + } + if mmp.UserId != "USERXXX" { + t.Fail() + } + if mmp.TeamId != "TEAMXXX" { + t.Fail() + } + if mmp.MessageTimestamp != "1660398079.756349" { + t.Fail() + } + if mmp.Metadata.EventType != "type2" { + t.Fail() + } + payload = mmp.Metadata.EventPayload + if len(payload) <= 0 { + t.Fail() + } +} + +func TestMessageMetadataDeleted(t *testing.T) { + rawE := []byte(` + { + "type":"message_metadata_deleted", + "channel_id":"CHANNELXXX", + "event_ts":"1660398079.756349", + "previous_metadata":{ + "event_type":"type", + "event_payload":{"key": "value"} + }, + "app_id":"APPXXX", + "bot_id":"BOTXXX", + "user_id":"USERXXX", + "team_id":"TEAMXXX", + "message_ts":"1660398079.756349", + "deleted_ts":"1660398079.756349" + } + `) + + mmp := MessageMetadataDeletedEvent{} + err := json.Unmarshal(rawE, &mmp) + if err != nil { + t.Error(err) + } + + if mmp.Type != "message_metadata_deleted" { + t.Fail() + } + if mmp.ChannelId != "CHANNELXXX" { + t.Fail() + } + if mmp.EventTimestamp != "1660398079.756349" { + t.Fail() + } + if mmp.PreviousMetadata.EventType != "type" { + t.Fail() + } + payload := mmp.PreviousMetadata.EventPayload + if len(payload) <= 0 { + t.Fail() + } + if mmp.AppId != "APPXXX" { + t.Fail() + } + if mmp.BotId != "BOTXXX" { + t.Fail() + } + if mmp.UserId != "USERXXX" { + t.Fail() + } + if mmp.TeamId != "TEAMXXX" { + t.Fail() + } + if mmp.MessageTimestamp != "1660398079.756349" { + t.Fail() + } + if mmp.DeletedTimestamp != "1660398079.756349" { + t.Fail() + } +}