Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bugfix: message.Type() is a empty value #333

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

31 changes: 19 additions & 12 deletions linebot/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -463,42 +463,48 @@ func (e *Event) UnmarshalJSON(body []byte) (err error) {
switch rawEvent.Message.Type {
case MessageTypeText:
e.Message = &TextMessage{
ID: rawEvent.Message.ID,
Text: rawEvent.Message.Text,
Emojis: rawEvent.Message.Emojis,
Mention: rawEvent.Message.Mention,
ID: rawEvent.Message.ID,
Text: rawEvent.Message.Text,
Emojis: rawEvent.Message.Emojis,
Mention: rawEvent.Message.Mention,
messageType: MessageTypeText,
}
case MessageTypeImage:
e.Message = &ImageMessage{
ID: rawEvent.Message.ID,
ContentProvider: rawEvent.Message.ContentProvider,
ImageSet: rawEvent.Message.ImageSet,
messageType: MessageTypeImage,
}
case MessageTypeVideo:
e.Message = &VideoMessage{
ID: rawEvent.Message.ID,
Duration: rawEvent.Message.Duration,
ContentProvider: rawEvent.Message.ContentProvider,
messageType: MessageTypeVideo,
}
case MessageTypeAudio:
e.Message = &AudioMessage{
ID: rawEvent.Message.ID,
Duration: rawEvent.Message.Duration,
ContentProvider: rawEvent.Message.ContentProvider,
messageType: MessageTypeAudio,
}
case MessageTypeFile:
e.Message = &FileMessage{
ID: rawEvent.Message.ID,
FileName: rawEvent.Message.FileName,
FileSize: rawEvent.Message.FileSize,
ID: rawEvent.Message.ID,
FileName: rawEvent.Message.FileName,
FileSize: rawEvent.Message.FileSize,
messageType: MessageTypeFile,
}
case MessageTypeLocation:
e.Message = &LocationMessage{
ID: rawEvent.Message.ID,
Title: rawEvent.Message.Title,
Address: rawEvent.Message.Address,
Latitude: rawEvent.Message.Latitude,
Longitude: rawEvent.Message.Longitude,
ID: rawEvent.Message.ID,
Title: rawEvent.Message.Title,
Address: rawEvent.Message.Address,
Latitude: rawEvent.Message.Latitude,
Longitude: rawEvent.Message.Longitude,
messageType: MessageTypeLocation,
}
case MessageTypeSticker:
e.Message = &StickerMessage{
Expand All @@ -508,6 +514,7 @@ func (e *Event) UnmarshalJSON(body []byte) (err error) {
StickerResourceType: rawEvent.Message.StickerResourceType,
Keywords: rawEvent.Message.Keywords,
Text: rawEvent.Message.Text,
messageType: MessageTypeSticker,
}
}
case EventTypePostback:
Expand Down
71 changes: 52 additions & 19 deletions linebot/webhook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ var webhookTestRequestBody = `{
"type": "user",
"userId": "u206d25c2ea6bd87c17655609a1c37cb8"
},
"webhookEventId": "01FZ74ASS536FW97EX38NKCZQK",
"webhookEventId": "01FZ74ASS536FW97EX38NKCZQK",
"deliveryContext": {
"isRedelivery": false
},
Expand Down Expand Up @@ -816,8 +816,9 @@ var webhookTestWantEvents = []*Event{
IsRedelivery: false,
},
Message: &TextMessage{
ID: "325708",
Text: "Hello, world",
ID: "325708",
Text: "Hello, world",
messageType: MessageTypeText,
},
},
{
Expand All @@ -835,8 +836,9 @@ var webhookTestWantEvents = []*Event{
IsRedelivery: true,
},
Message: &TextMessage{
ID: "325708",
Text: "Hello, world",
ID: "325708",
Text: "Hello, world",
messageType: MessageTypeText,
},
},
{
Expand Down Expand Up @@ -871,6 +873,7 @@ var webhookTestWantEvents = []*Event{
},
},
},
messageType: MessageTypeText,
},
},
{
Expand All @@ -887,7 +890,8 @@ var webhookTestWantEvents = []*Event{
IsRedelivery: false,
},
Message: &ImageMessage{
ID: "325708",
ID: "325708",
messageType: MessageTypeImage,
},
},
{
Expand All @@ -913,6 +917,7 @@ var webhookTestWantEvents = []*Event{
Index: 2,
Total: 2,
},
messageType: MessageTypeImage,
},
},
{
Expand All @@ -935,7 +940,8 @@ var webhookTestWantEvents = []*Event{
OriginalContentURL: "https://example.com/original.mp4",
PreviewImageURL: "https://example.com/preview.jpg",
},
Duration: 60000,
Duration: 60000,
messageType: MessageTypeVideo,
},
},
{
Expand All @@ -956,7 +962,8 @@ var webhookTestWantEvents = []*Event{
ContentProvider: &ContentProvider{
Type: ContentProviderTypeLINE,
},
Duration: 60000,
Duration: 60000,
messageType: MessageTypeAudio,
},
},
{
Expand All @@ -973,9 +980,10 @@ var webhookTestWantEvents = []*Event{
IsRedelivery: false,
},
Message: &FileMessage{
ID: "325708",
FileName: "file.txt",
FileSize: 2138,
ID: "325708",
FileName: "file.txt",
FileSize: 2138,
messageType: MessageTypeFile,
},
},
{
Expand All @@ -992,11 +1000,12 @@ var webhookTestWantEvents = []*Event{
IsRedelivery: false,
},
Message: &LocationMessage{
ID: "325708",
Title: "hello",
Address: "〒150-0002 東京都渋谷区渋谷2丁目21−1",
Latitude: 35.65910807942215,
Longitude: 139.70372892916203,
ID: "325708",
Title: "hello",
Address: "〒150-0002 東京都渋谷区渋谷2丁目21−1",
Latitude: 35.65910807942215,
Longitude: 139.70372892916203,
messageType: MessageTypeLocation,
},
},
{
Expand All @@ -1017,6 +1026,7 @@ var webhookTestWantEvents = []*Event{
PackageID: "1",
StickerID: "1",
StickerResourceType: StickerResourceTypeStatic,
messageType: MessageTypeSticker,
},
},
{
Expand All @@ -1037,6 +1047,7 @@ var webhookTestWantEvents = []*Event{
PackageID: "1",
StickerID: "3",
StickerResourceType: StickerResourceTypeAnimationSound,
messageType: MessageTypeSticker,
},
},
{
Expand All @@ -1058,6 +1069,7 @@ var webhookTestWantEvents = []*Event{
StickerID: "3",
StickerResourceType: StickerResourceTypePerStickerText,
Keywords: []string{"cony", "sally", "Staring", "hi", "whatsup", "line", "howdy", "HEY", "Peeking", "wave", "peek", "Hello", "yo", "greetings"},
messageType: MessageTypeSticker,
},
},
{
Expand Down Expand Up @@ -1441,8 +1453,9 @@ var webhookTestWantEvents = []*Event{
IsRedelivery: false,
},
Message: &TextMessage{
ID: "325708",
Text: "Stand by me",
ID: "325708",
Text: "Stand by me",
messageType: MessageTypeText,
},
},
{
Expand All @@ -1464,6 +1477,7 @@ var webhookTestWantEvents = []*Event{
Emojis: []*Emoji{
{Index: 14, Length: 6, ProductID: "5ac1bfd5040ab15980c9b435", EmojiID: "001"},
},
messageType: MessageTypeText,
},
},
{
Expand Down Expand Up @@ -1561,7 +1575,7 @@ func TestParseRequest(t *testing.T) {
for i, got := range gotEvents {
want := webhookTestWantEvents[i]
if !reflect.DeepEqual(got, want) {
t.Errorf("Event %d %v; want %v", i, got, want)
t.Errorf("Event %d %+v; want %+v", i, got, want)
gota := got
if !reflect.DeepEqual(
gota.Things.Result.BLENotificationPayload,
Expand Down Expand Up @@ -2210,3 +2224,22 @@ func BenchmarkTestWebhook(b *testing.B) {
client.TestWebhook().Do()
}
}

func TestParseRequestEvents(t *testing.T) {
request := &struct {
Events []*Event `json:"events"`
}{}
err := json.Unmarshal([]byte(webhookTestRequestBody), request)
if err != nil {
t.Error(t, err)
}

for _, event := range request.Events {
switch event.Type {
case EventTypeMessage:
if event.Message.Type() == "" {
t.Error("message type is empty")
}
}
}
}
Loading