Skip to content
Merged
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
3 changes: 2 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -332,8 +332,9 @@ Versioning
----------
This project respects semantic versioning

See http://semver.org/
- See `semver.org <https://semver.org/>`_

However, if a feature that was publicly released is discontinued for business reasons and becomes completely unusable, we will release changes as a patch release.

Version 3.x
-----------
Expand Down
209 changes: 75 additions & 134 deletions tests/test_webhook.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@
from linebot.models import (
MessageEvent, FollowEvent, UnfollowEvent, JoinEvent,
LeaveEvent, PostbackEvent, BeaconEvent, AccountLinkEvent,
MemberJoinedEvent, MemberLeftEvent, ThingsEvent,
MemberJoinedEvent, MemberLeftEvent,
UnknownEvent,
TextMessage, ImageMessage, VideoMessage, AudioMessage,
LocationMessage, StickerMessage, FileMessage,
SourceUser, SourceRoom, SourceGroup,
DeviceLink, DeviceUnlink, ScenarioResult, ActionResult)
)
from linebot.models.delivery_context import DeliveryContext
from linebot.models.events import UnsendEvent, VideoPlayCompleteEvent
from linebot.models.unsend import Unsend
Expand Down Expand Up @@ -70,7 +70,7 @@ def test_parse(self):
events = self.parser.parse(body, 'channel_secret')

# events count
self.assertEqual(len(events), 30)
self.assertEqual(len(events), 27)

# MessageEvent, SourceUser, TextMessage
self.assertIsInstance(events[0], MessageEvent)
Expand Down Expand Up @@ -392,75 +392,75 @@ def test_parse(self):
self.assertEqual(events[18].postback.data, 'action=buyItem&itemId=123123&color=red')
self.assertEqual(events[18].postback.params['datetime'], '2013-04-01T10:00')

# ThingsEvent, SourceUser, link
self.assertIsInstance(events[19], ThingsEvent)
self.assertEqual(events[19].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[19].type, 'things')
# MemberJoinedEvent
self.assertIsInstance(events[19], MemberJoinedEvent)
self.assertEqual(events[19].reply_token, '0f3779fba3b349968c5d07db31eabf65')
self.assertEqual(events[19].type, 'memberJoined')
self.assertEqual(events[19].mode, 'active')
self.assertEqual(events[19].timestamp, 1462629479859)
self.assertIsInstance(events[19].source, SourceUser)
self.assertEqual(events[19].source.type, 'user')
self.assertEqual(events[19].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertIsInstance(events[19].source, SourceGroup)
self.assertEqual(events[19].source.type, 'group')
self.assertEqual(events[19].source.group_id, 'C4af4980629...')
self.assertEqual(events[19].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[19].delivery_context, DeliveryContext)
self.assertFalse(events[19].delivery_context.is_redelivery)
self.assertIsInstance(events[19].things, DeviceLink)
self.assertEqual(events[19].things.type, 'link')
self.assertEqual(events[19].things.device_id, 't2c449c9d1')
self.assertEqual(len(events[19].joined.members), 2)
self.assertIsInstance(events[19].joined.members[0], SourceUser)
self.assertEqual(events[19].joined.members[0].user_id, 'U4af4980629...')
self.assertEqual(events[19].joined.members[1].user_id, 'U91eeaf62d9...')

# MemberJoinedEvent
self.assertIsInstance(events[20], MemberJoinedEvent)
self.assertEqual(events[20].reply_token, '0f3779fba3b349968c5d07db31eabf65')
self.assertEqual(events[20].type, 'memberJoined')
# MemberLeftEvent
self.assertIsInstance(events[20], MemberLeftEvent)
self.assertEqual(events[20].type, 'memberLeft')
self.assertEqual(events[20].mode, 'active')
self.assertEqual(events[20].timestamp, 1462629479859)
self.assertEqual(events[20].timestamp, 1462629479960)
self.assertIsInstance(events[20].source, SourceGroup)
self.assertEqual(events[20].source.type, 'group')
self.assertEqual(events[20].source.group_id, 'C4af4980629...')
self.assertEqual(events[20].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[20].delivery_context, DeliveryContext)
self.assertFalse(events[20].delivery_context.is_redelivery)
self.assertEqual(len(events[20].joined.members), 2)
self.assertIsInstance(events[20].joined.members[0], SourceUser)
self.assertEqual(events[20].joined.members[0].user_id, 'U4af4980629...')
self.assertEqual(events[20].joined.members[1].user_id, 'U91eeaf62d9...')
self.assertEqual(len(events[20].left.members), 2)
self.assertIsInstance(events[20].left.members[0], SourceUser)
self.assertEqual(events[20].left.members[0].user_id, 'U4af4980629...')
self.assertEqual(events[20].left.members[1].user_id, 'U91eeaf62d9...')

# MemberLeftEvent
self.assertIsInstance(events[21], MemberLeftEvent)
self.assertEqual(events[21].type, 'memberLeft')
# MessageEvent, SourceUser, FileMessage
self.assertIsInstance(events[21], MessageEvent)
self.assertEqual(events[21].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[21].type, 'message')
self.assertEqual(events[21].mode, 'active')
self.assertEqual(events[21].timestamp, 1462629479960)
self.assertIsInstance(events[21].source, SourceGroup)
self.assertEqual(events[21].source.type, 'group')
self.assertEqual(events[21].source.group_id, 'C4af4980629...')
self.assertEqual(events[21].timestamp, 1462629479859)
self.assertIsInstance(events[21].source, SourceUser)
self.assertEqual(events[21].source.type, 'user')
self.assertEqual(events[21].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[21].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[21].delivery_context, DeliveryContext)
self.assertFalse(events[21].delivery_context.is_redelivery)
self.assertEqual(len(events[21].left.members), 2)
self.assertIsInstance(events[21].left.members[0], SourceUser)
self.assertEqual(events[21].left.members[0].user_id, 'U4af4980629...')
self.assertEqual(events[21].left.members[1].user_id, 'U91eeaf62d9...')

# ThingsEvent, SourceUser, unlink
self.assertIsInstance(events[22], ThingsEvent)
self.assertEqual(events[22].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[22].type, 'things')
self.assertIsInstance(events[21].message, FileMessage)
self.assertEqual(events[21].message.id, '325708')
self.assertEqual(events[21].message.type, 'file')
self.assertEqual(events[21].message.file_name, "file.txt")
self.assertEqual(events[21].message.file_size, 2138)

# UnsendEvent
self.assertIsInstance(events[22], UnsendEvent)
self.assertEqual(events[22].type, 'unsend')
self.assertEqual(events[22].mode, 'active')
self.assertEqual(events[22].timestamp, 1462629479859)
self.assertIsInstance(events[22].source, SourceUser)
self.assertEqual(events[22].source.type, 'user')
self.assertEqual(events[22].timestamp, 1547817848122)
self.assertIsInstance(events[22].source, SourceGroup)
self.assertEqual(events[22].source.type, 'group')
self.assertEqual(events[22].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[22].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[22].delivery_context, DeliveryContext)
self.assertFalse(events[22].delivery_context.is_redelivery)
self.assertIsInstance(events[22].things, DeviceUnlink)
self.assertEqual(events[22].things.type, 'unlink')
self.assertEqual(events[22].things.device_id, 't2c449c9d1')
self.assertIsInstance(events[22].unsend, Unsend)
self.assertEqual(events[22].unsend.message_id, '325708')

# MessageEvent, SourceUser, FileMessage
self.assertIsInstance(events[23], MessageEvent)
# VideoPlayCompleteEvent
self.assertIsInstance(events[23], VideoPlayCompleteEvent)
self.assertEqual(events[23].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[23].type, 'message')
self.assertEqual(events[23].type, 'videoPlayComplete')
self.assertEqual(events[23].mode, 'active')
self.assertEqual(events[23].timestamp, 1462629479859)
self.assertIsInstance(events[23].source, SourceUser)
Expand All @@ -469,107 +469,48 @@ def test_parse(self):
self.assertEqual(events[23].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[23].delivery_context, DeliveryContext)
self.assertFalse(events[23].delivery_context.is_redelivery)
self.assertIsInstance(events[23].message, FileMessage)
self.assertEqual(events[23].message.id, '325708')
self.assertEqual(events[23].message.type, 'file')
self.assertEqual(events[23].message.file_name, "file.txt")
self.assertEqual(events[23].message.file_size, 2138)

# ThingsEvent, SourceUser, scenarioResult
self.assertIsInstance(events[24], ThingsEvent)
self.assertEqual(events[24].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[24].type, 'things')
self.assertIsInstance(events[23].video_play_complete, VideoPlayComplete)
self.assertEqual(events[23].video_play_complete.tracking_id, 'track_id')

# MessageEvent, SourceUser, ImageMessage with ImageSet
self.assertIsInstance(events[1], MessageEvent)
self.assertEqual(events[24].reply_token, 'fbf94e269485410da6b7e3a5e33283e8')
self.assertEqual(events[24].type, 'message')
self.assertEqual(events[24].mode, 'active')
self.assertEqual(events[24].timestamp, 1547817848122)
self.assertEqual(events[24].timestamp, 1627356924722)
self.assertIsInstance(events[24].source, SourceUser)
self.assertEqual(events[24].source.type, 'user')
self.assertEqual(events[24].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[24].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[24].delivery_context, DeliveryContext)
self.assertFalse(events[24].delivery_context.is_redelivery)
self.assertIsInstance(events[24].things, ScenarioResult)
self.assertEqual(events[24].things.type, 'scenarioResult')
self.assertEqual(events[24].things.device_id, 't2c449c9d1')
self.assertEqual(events[24].things.result.scenario_id, 'XXX')
self.assertEqual(events[24].things.result.revision, 2)
self.assertEqual(events[24].things.result.start_time, 1547817845950)
self.assertEqual(events[24].things.result.end_time, 1547817845952)
self.assertEqual(events[24].things.result.result_code, 'success')
self.assertEqual(events[24].things.result.ble_notification_payload, 'AQ==')
self.assertIsInstance(events[24].things.result.action_results[0], ActionResult)
self.assertEqual(events[24].things.result.action_results[0].type, 'binary')
self.assertEqual(events[24].things.result.action_results[0].data, '/w==')
self.assertIsInstance(events[24].things.result.action_results[1], ActionResult)
self.assertEqual(events[24].things.result.action_results[1].type, 'void')
self.assertIsInstance(events[24].message, ImageMessage)
self.assertEqual(events[24].message.id, '354718705033693861')
self.assertEqual(events[24].message.type, 'image')
self.assertEqual(events[24].message.content_provider.type, 'line')
self.assertEqual(events[24].message.image_set.id, 'E005D41A7288F41B655')
self.assertEqual(events[24].message.image_set.index, 2)
self.assertEqual(events[24].message.image_set.total, 2)

# UnsendEvent
self.assertIsInstance(events[25], UnsendEvent)
self.assertEqual(events[25].type, 'unsend')
# MessageEvent, SourceUser, TextMessage (Redeliveried)
self.assertIsInstance(events[25], MessageEvent)
self.assertEqual(events[25].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[25].type, 'message')
self.assertEqual(events[25].mode, 'active')
self.assertEqual(events[25].timestamp, 1547817848122)
self.assertIsInstance(events[25].source, SourceGroup)
self.assertEqual(events[25].source.type, 'group')
self.assertEqual(events[25].timestamp, 1462629479859)
self.assertIsInstance(events[25].source, SourceUser)
self.assertEqual(events[25].source.type, 'user')
self.assertEqual(events[25].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[25].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[25].delivery_context, DeliveryContext)
self.assertFalse(events[25].delivery_context.is_redelivery)
self.assertIsInstance(events[25].unsend, Unsend)
self.assertEqual(events[25].unsend.message_id, '325708')

# VideoPlayCompleteEvent
self.assertIsInstance(events[26], VideoPlayCompleteEvent)
self.assertEqual(events[26].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[26].type, 'videoPlayComplete')
self.assertEqual(events[26].mode, 'active')
self.assertEqual(events[26].timestamp, 1462629479859)
self.assertIsInstance(events[26].source, SourceUser)
self.assertEqual(events[26].source.type, 'user')
self.assertEqual(events[26].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[26].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[26].delivery_context, DeliveryContext)
self.assertFalse(events[26].delivery_context.is_redelivery)
self.assertIsInstance(events[26].video_play_complete, VideoPlayComplete)
self.assertEqual(events[26].video_play_complete.tracking_id, 'track_id')

# MessageEvent, SourceUser, ImageMessage with ImageSet
self.assertIsInstance(events[1], MessageEvent)
self.assertEqual(events[27].reply_token, 'fbf94e269485410da6b7e3a5e33283e8')
self.assertEqual(events[27].type, 'message')
self.assertEqual(events[27].mode, 'active')
self.assertEqual(events[27].timestamp, 1627356924722)
self.assertIsInstance(events[27].source, SourceUser)
self.assertEqual(events[27].source.type, 'user')
self.assertEqual(events[27].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[27].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[27].delivery_context, DeliveryContext)
self.assertFalse(events[27].delivery_context.is_redelivery)
self.assertIsInstance(events[27].message, ImageMessage)
self.assertEqual(events[27].message.id, '354718705033693861')
self.assertEqual(events[27].message.type, 'image')
self.assertEqual(events[27].message.content_provider.type, 'line')
self.assertEqual(events[27].message.image_set.id, 'E005D41A7288F41B655')
self.assertEqual(events[27].message.image_set.index, 2)
self.assertEqual(events[27].message.image_set.total, 2)

# MessageEvent, SourceUser, TextMessage (Redeliveried)
self.assertIsInstance(events[28], MessageEvent)
self.assertEqual(events[28].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
self.assertEqual(events[28].type, 'message')
self.assertEqual(events[28].mode, 'active')
self.assertEqual(events[28].timestamp, 1462629479859)
self.assertIsInstance(events[28].source, SourceUser)
self.assertEqual(events[28].source.type, 'user')
self.assertEqual(events[28].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
self.assertEqual(events[28].webhook_event_id, 'testwebhookeventid')
self.assertIsInstance(events[28].delivery_context, DeliveryContext)
self.assertTrue(events[28].delivery_context.is_redelivery)
self.assertIsInstance(events[28].message, TextMessage)
self.assertEqual(events[28].message.id, '325708')
self.assertEqual(events[28].message.type, 'text')
self.assertEqual(events[28].message.text, 'Hello, world')
self.assertTrue(events[25].delivery_context.is_redelivery)
self.assertIsInstance(events[25].message, TextMessage)
self.assertEqual(events[25].message.id, '325708')
self.assertEqual(events[25].message.type, 'text')
self.assertEqual(events[25].message.text, 'Hello, world')

# UnknownEvent
self.assertIsInstance(events[29], UnknownEvent)
self.assertIsInstance(events[26], UnknownEvent)

def test_parse_webhook_req_without_destination(self):
body = """
Expand Down
71 changes: 0 additions & 71 deletions tests/text/webhook.json
Original file line number Diff line number Diff line change
Expand Up @@ -361,24 +361,6 @@
}
}
},
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "things",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
},
"webhookEventId": "testwebhookeventid",
"deliveryContext": {
"isRedelivery": false
},
"things": {
"deviceId": "t2c449c9d1",
"type": "link"
}
},
{
"replyToken": "0f3779fba3b349968c5d07db31eabf65",
"type": "memberJoined",
Expand Down Expand Up @@ -430,24 +412,6 @@
]
}
},
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "things",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
},
"webhookEventId": "testwebhookeventid",
"deliveryContext": {
"isRedelivery": false
},
"things": {
"deviceId": "t2c449c9d1",
"type": "unlink"
}
},
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
Expand All @@ -468,41 +432,6 @@
"fileSize": 2138
}
},
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "things",
"mode": "active",
"source": {
"type": "user",
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
},
"webhookEventId": "testwebhookeventid",
"deliveryContext": {
"isRedelivery": false
},
"timestamp": 1547817848122,
"things": {
"type": "scenarioResult",
"deviceId": "t2c449c9d1",
"result": {
"scenarioId": "XXX",
"revision": 2,
"startTime": 1547817845950,
"endTime": 1547817845952,
"resultCode": "success",
"bleNotificationPayload": "AQ==",
"actionResults": [
{
"type": "binary",
"data": "/w=="
},
{
"type": "void"
}
]
}
}
},
{
"type": "unsend",
"mode": "active",
Expand Down
Loading