Skip to content

Commit 2a8832b

Browse files
author
h3rby7
committed
add test for metadata sending, switch 'event_payload' from interface{} to map[string]interface{} to support proper JSON (un)marshalling
1 parent 799e81a commit 2a8832b

File tree

4 files changed

+65
-32
lines changed

4 files changed

+65
-32
lines changed

chat.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ func MsgOptionIconEmoji(iconEmoji string) MsgOption {
669669
}
670670
}
671671

672-
// MsgOptionIconEmoji sets an icon emoji
672+
// MsgOptionMetadata sets message metadata
673673
func MsgOptionMetadata(metadata SlackMetadata) MsgOption {
674674
return func(config *sendConfig) error {
675675
config.metadata = metadata

chat_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,24 @@ func TestPostMessage(t *testing.T) {
109109
"token": []string{"testing-token"},
110110
},
111111
},
112+
"Metadata": {
113+
endpoint: "/chat.postMessage",
114+
opt: []MsgOption{
115+
MsgOptionMetadata(
116+
SlackMetadata{
117+
EventType: "testing-event",
118+
EventPayload: map[string]interface{}{
119+
"id": 13,
120+
"name": "testing-name",
121+
},
122+
}),
123+
},
124+
expected: url.Values{
125+
"metadata": []string{`{"event_type":"testing-event","event_payload":{"id":13,"name":"testing-name"}}`},
126+
"channel": []string{"CXXX"},
127+
"token": []string{"testing-token"},
128+
},
129+
},
112130
"Unfurl": {
113131
endpoint: "/chat.unfurl",
114132
opt: []MsgOption{

metadata.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package slack
22

33
// SlackMetadata https://api.slack.com/reference/metadata
44
type SlackMetadata struct {
5-
EventType string `json:"event_type"`
6-
EventPayload interface{} `json:"event_payload"`
5+
EventType string `json:"event_type"`
6+
EventPayload map[string]interface{} `json:"event_payload"`
77
}

slackevents/inner_events.go

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,12 @@ type MessageEvent struct {
234234
Root *MessageEvent `json:"root"`
235235
}
236236

237+
type MessageMetadataEvent struct {
238+
// TODO: not sure about the actual fields we get here!
239+
Type string `json:"type"`
240+
EventTimestamp string `json:"event_ts"`
241+
}
242+
237243
// MemberJoinedChannelEvent A member joined a public or private channel
238244
type MemberJoinedChannelEvent struct {
239245
Type string `json:"type"`
@@ -487,6 +493,12 @@ const (
487493
MemberJoinedChannel = EventsAPIType("member_joined_channel")
488494
// Member Left Channel
489495
MemberLeftChannel = EventsAPIType("member_left_channel")
496+
// Message metadata was deleted
497+
MessageMetadataDeleted = EventsAPIType("message_metadata_deleted")
498+
// Message metadata was posted
499+
MessageMetadataPosted = EventsAPIType("message_metadata_posted")
500+
// Message metadata was updated
501+
MessageMetadataUpdated = EventsAPIType("message_metadata_updated")
490502
// PinAdded An item was pinned to a channel
491503
PinAdded = EventsAPIType("pin_added")
492504
// PinRemoved An item was unpinned from a channel
@@ -509,33 +521,36 @@ const (
509521
// implementations. The structs should be instances of the unmarshalling
510522
// target for the matching event type.
511523
var EventsAPIInnerEventMapping = map[EventsAPIType]interface{}{
512-
AppMention: AppMentionEvent{},
513-
AppHomeOpened: AppHomeOpenedEvent{},
514-
AppUninstalled: AppUninstalledEvent{},
515-
ChannelCreated: ChannelCreatedEvent{},
516-
ChannelDeleted: ChannelDeletedEvent{},
517-
ChannelArchive: ChannelArchiveEvent{},
518-
ChannelUnarchive: ChannelUnarchiveEvent{},
519-
ChannelLeft: ChannelLeftEvent{},
520-
ChannelRename: ChannelRenameEvent{},
521-
ChannelIDChanged: ChannelIDChangedEvent{},
522-
GroupDeleted: GroupDeletedEvent{},
523-
GroupArchive: GroupArchiveEvent{},
524-
GroupUnarchive: GroupUnarchiveEvent{},
525-
GroupLeft: GroupLeftEvent{},
526-
GroupRename: GroupRenameEvent{},
527-
GridMigrationFinished: GridMigrationFinishedEvent{},
528-
GridMigrationStarted: GridMigrationStartedEvent{},
529-
LinkShared: LinkSharedEvent{},
530-
Message: MessageEvent{},
531-
MemberJoinedChannel: MemberJoinedChannelEvent{},
532-
MemberLeftChannel: MemberLeftChannelEvent{},
533-
PinAdded: PinAddedEvent{},
534-
PinRemoved: PinRemovedEvent{},
535-
ReactionAdded: ReactionAddedEvent{},
536-
ReactionRemoved: ReactionRemovedEvent{},
537-
TeamJoin: TeamJoinEvent{},
538-
TokensRevoked: TokensRevokedEvent{},
539-
EmojiChanged: EmojiChangedEvent{},
540-
WorkflowStepExecute: WorkflowStepExecuteEvent{},
524+
AppMention: AppMentionEvent{},
525+
AppHomeOpened: AppHomeOpenedEvent{},
526+
AppUninstalled: AppUninstalledEvent{},
527+
ChannelCreated: ChannelCreatedEvent{},
528+
ChannelDeleted: ChannelDeletedEvent{},
529+
ChannelArchive: ChannelArchiveEvent{},
530+
ChannelUnarchive: ChannelUnarchiveEvent{},
531+
ChannelLeft: ChannelLeftEvent{},
532+
ChannelRename: ChannelRenameEvent{},
533+
ChannelIDChanged: ChannelIDChangedEvent{},
534+
GroupDeleted: GroupDeletedEvent{},
535+
GroupArchive: GroupArchiveEvent{},
536+
GroupUnarchive: GroupUnarchiveEvent{},
537+
GroupLeft: GroupLeftEvent{},
538+
GroupRename: GroupRenameEvent{},
539+
GridMigrationFinished: GridMigrationFinishedEvent{},
540+
GridMigrationStarted: GridMigrationStartedEvent{},
541+
LinkShared: LinkSharedEvent{},
542+
Message: MessageEvent{},
543+
MessageMetadataDeleted: MessageMetadataEvent{},
544+
MessageMetadataPosted: MessageMetadataEvent{},
545+
MessageMetadataUpdated: MessageMetadataEvent{},
546+
MemberJoinedChannel: MemberJoinedChannelEvent{},
547+
MemberLeftChannel: MemberLeftChannelEvent{},
548+
PinAdded: PinAddedEvent{},
549+
PinRemoved: PinRemovedEvent{},
550+
ReactionAdded: ReactionAddedEvent{},
551+
ReactionRemoved: ReactionRemovedEvent{},
552+
TeamJoin: TeamJoinEvent{},
553+
TokensRevoked: TokensRevokedEvent{},
554+
EmojiChanged: EmojiChangedEvent{},
555+
WorkflowStepExecute: WorkflowStepExecuteEvent{},
541556
}

0 commit comments

Comments
 (0)