diff --git a/README.rst b/README.rst index 20bfd1992..b1c732616 100644 --- a/README.rst +++ b/README.rst @@ -332,8 +332,9 @@ Versioning ---------- This project respects semantic versioning -See http://semver.org/ +- See `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 ----------- diff --git a/tests/test_webhook.py b/tests/test_webhook.py index 9370dbcaf..6a551fe26 100644 --- a/tests/test_webhook.py +++ b/tests/test_webhook.py @@ -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 @@ -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) @@ -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) @@ -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 = """ diff --git a/tests/text/webhook.json b/tests/text/webhook.json index 7b90c0990..3645eeb62 100644 --- a/tests/text/webhook.json +++ b/tests/text/webhook.json @@ -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", @@ -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", @@ -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", diff --git a/tests/v3/test_webhook.py b/tests/v3/test_webhook.py index fbdc302c9..3b2288e6e 100644 --- a/tests/v3/test_webhook.py +++ b/tests/v3/test_webhook.py @@ -25,13 +25,11 @@ from linebot.v3.webhooks.models import ( MessageEvent, FollowEvent, UnfollowEvent, JoinEvent, LeaveEvent, PostbackEvent, BeaconEvent, AccountLinkEvent, - MemberJoinedEvent, MemberLeftEvent, ThingsEvent, + MemberJoinedEvent, MemberLeftEvent, VideoPlayCompleteEvent, VideoPlayComplete, UnsendEvent, UnsendDetail, TextMessageContent, ImageMessageContent, VideoMessageContent, AudioMessageContent, LocationMessageContent, StickerMessageContent, FileMessageContent, UserSource, RoomSource, GroupSource, - LinkThingsContent, UnlinkThingsContent, ActionResult, - ScenarioResultThingsContent, DeliveryContext ) from linebot.v3.models import ( @@ -72,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, UserSource, TextMessageContent self.assertIsInstance(events[0], MessageEvent) @@ -392,75 +390,76 @@ 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, UserSource, link - self.assertIsInstance(events[19], ThingsEvent) - self.assertEqual(events[19].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA') - self.assertEqual(events[19].type, 'things') + # TODO Fix range + # 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, UserSource) - self.assertEqual(events[19].source.type, 'user') - self.assertEqual(events[19].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8') + self.assertIsInstance(events[19].source, GroupSource) + 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, LinkThingsContent) - 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], UserSource) + 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, GroupSource) 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], UserSource) - 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], UserSource) + 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, UserSource, UserSource + 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, GroupSource) - 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, UserSource) + 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], UserSource) - self.assertEqual(events[21].left.members[0].user_id, 'U4af4980629...') - self.assertEqual(events[21].left.members[1].user_id, 'U91eeaf62d9...') - - # ThingsEvent, UserSource, unlink - self.assertIsInstance(events[22], ThingsEvent) - self.assertEqual(events[22].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA') - self.assertEqual(events[22].type, 'things') + self.assertIsInstance(events[21].message, FileMessageContent) + 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, UserSource) - self.assertEqual(events[22].source.type, 'user') + self.assertEqual(events[22].timestamp, 1547817848122) + self.assertIsInstance(events[22].source, GroupSource) + 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, UnlinkThingsContent) - self.assertEqual(events[22].things.type, 'unlink') - self.assertEqual(events[22].things.device_id, 't2c449c9d1') + self.assertIsInstance(events[22].unsend, UnsendDetail) + self.assertEqual(events[22].unsend.message_id, '325708') - # MessageEvent, UserSource, UserSource - 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, UserSource) @@ -469,107 +468,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, FileMessageContent) - 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, UserSource, 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, UserSource, 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, UserSource) 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, ScenarioResultThingsContent) - 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, ImageMessageContent) + 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, UserSource, 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, GroupSource) - self.assertEqual(events[25].source.type, 'group') + self.assertEqual(events[25].timestamp, 1462629479859) + self.assertIsInstance(events[25].source, UserSource) + 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, UnsendDetail) - 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, UserSource) - 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, UserSource, 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, UserSource) - 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, ImageMessageContent) - 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, UserSource, 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, UserSource) - 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, TextMessageContent) - 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, TextMessageContent) + 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) # TODO: richmenu switch diff --git a/tests/v3/text/webhook.json b/tests/v3/text/webhook.json index e82294320..b12799dfe 100644 --- a/tests/v3/text/webhook.json +++ b/tests/v3/text/webhook.json @@ -374,24 +374,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", @@ -443,24 +425,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", @@ -481,41 +445,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",