Skip to content

Commit d65a3b0

Browse files
committed
NO-ISSUE Bye line things
1 parent 8ae6999 commit d65a3b0

File tree

5 files changed

+152
-411
lines changed

5 files changed

+152
-411
lines changed

README.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,9 @@ Versioning
332332
----------
333333
This project respects semantic versioning
334334

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

337+
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.
337338

338339
Version 3.x
339340
-----------

tests/test_webhook.py

Lines changed: 74 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from linebot.models import (
2626
MessageEvent, FollowEvent, UnfollowEvent, JoinEvent,
2727
LeaveEvent, PostbackEvent, BeaconEvent, AccountLinkEvent,
28-
MemberJoinedEvent, MemberLeftEvent, ThingsEvent,
28+
MemberJoinedEvent, MemberLeftEvent,
2929
UnknownEvent,
3030
TextMessage, ImageMessage, VideoMessage, AudioMessage,
3131
LocationMessage, StickerMessage, FileMessage,
@@ -70,7 +70,7 @@ def test_parse(self):
7070
events = self.parser.parse(body, 'channel_secret')
7171

7272
# events count
73-
self.assertEqual(len(events), 30)
73+
self.assertEqual(len(events), 27)
7474

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

395-
# ThingsEvent, SourceUser, link
396-
self.assertIsInstance(events[19], ThingsEvent)
397-
self.assertEqual(events[19].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
398-
self.assertEqual(events[19].type, 'things')
395+
# MemberJoinedEvent
396+
self.assertIsInstance(events[19], MemberJoinedEvent)
397+
self.assertEqual(events[19].reply_token, '0f3779fba3b349968c5d07db31eabf65')
398+
self.assertEqual(events[19].type, 'memberJoined')
399399
self.assertEqual(events[19].mode, 'active')
400400
self.assertEqual(events[19].timestamp, 1462629479859)
401-
self.assertIsInstance(events[19].source, SourceUser)
402-
self.assertEqual(events[19].source.type, 'user')
403-
self.assertEqual(events[19].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
401+
self.assertIsInstance(events[19].source, SourceGroup)
402+
self.assertEqual(events[19].source.type, 'group')
403+
self.assertEqual(events[19].source.group_id, 'C4af4980629...')
404404
self.assertEqual(events[19].webhook_event_id, 'testwebhookeventid')
405405
self.assertIsInstance(events[19].delivery_context, DeliveryContext)
406406
self.assertFalse(events[19].delivery_context.is_redelivery)
407-
self.assertIsInstance(events[19].things, DeviceLink)
408-
self.assertEqual(events[19].things.type, 'link')
409-
self.assertEqual(events[19].things.device_id, 't2c449c9d1')
407+
self.assertEqual(len(events[19].joined.members), 2)
408+
self.assertIsInstance(events[19].joined.members[0], SourceUser)
409+
self.assertEqual(events[19].joined.members[0].user_id, 'U4af4980629...')
410+
self.assertEqual(events[19].joined.members[1].user_id, 'U91eeaf62d9...')
410411

411-
# MemberJoinedEvent
412-
self.assertIsInstance(events[20], MemberJoinedEvent)
413-
self.assertEqual(events[20].reply_token, '0f3779fba3b349968c5d07db31eabf65')
414-
self.assertEqual(events[20].type, 'memberJoined')
412+
# MemberLeftEvent
413+
self.assertIsInstance(events[20], MemberLeftEvent)
414+
self.assertEqual(events[20].type, 'memberLeft')
415415
self.assertEqual(events[20].mode, 'active')
416-
self.assertEqual(events[20].timestamp, 1462629479859)
416+
self.assertEqual(events[20].timestamp, 1462629479960)
417417
self.assertIsInstance(events[20].source, SourceGroup)
418418
self.assertEqual(events[20].source.type, 'group')
419419
self.assertEqual(events[20].source.group_id, 'C4af4980629...')
420420
self.assertEqual(events[20].webhook_event_id, 'testwebhookeventid')
421421
self.assertIsInstance(events[20].delivery_context, DeliveryContext)
422422
self.assertFalse(events[20].delivery_context.is_redelivery)
423-
self.assertEqual(len(events[20].joined.members), 2)
424-
self.assertIsInstance(events[20].joined.members[0], SourceUser)
425-
self.assertEqual(events[20].joined.members[0].user_id, 'U4af4980629...')
426-
self.assertEqual(events[20].joined.members[1].user_id, 'U91eeaf62d9...')
423+
self.assertEqual(len(events[20].left.members), 2)
424+
self.assertIsInstance(events[20].left.members[0], SourceUser)
425+
self.assertEqual(events[20].left.members[0].user_id, 'U4af4980629...')
426+
self.assertEqual(events[20].left.members[1].user_id, 'U91eeaf62d9...')
427427

428-
# MemberLeftEvent
429-
self.assertIsInstance(events[21], MemberLeftEvent)
430-
self.assertEqual(events[21].type, 'memberLeft')
428+
# MessageEvent, SourceUser, FileMessage
429+
self.assertIsInstance(events[21], MessageEvent)
430+
self.assertEqual(events[21].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
431+
self.assertEqual(events[21].type, 'message')
431432
self.assertEqual(events[21].mode, 'active')
432-
self.assertEqual(events[21].timestamp, 1462629479960)
433-
self.assertIsInstance(events[21].source, SourceGroup)
434-
self.assertEqual(events[21].source.type, 'group')
435-
self.assertEqual(events[21].source.group_id, 'C4af4980629...')
433+
self.assertEqual(events[21].timestamp, 1462629479859)
434+
self.assertIsInstance(events[21].source, SourceUser)
435+
self.assertEqual(events[21].source.type, 'user')
436+
self.assertEqual(events[21].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
436437
self.assertEqual(events[21].webhook_event_id, 'testwebhookeventid')
437438
self.assertIsInstance(events[21].delivery_context, DeliveryContext)
438439
self.assertFalse(events[21].delivery_context.is_redelivery)
439-
self.assertEqual(len(events[21].left.members), 2)
440-
self.assertIsInstance(events[21].left.members[0], SourceUser)
441-
self.assertEqual(events[21].left.members[0].user_id, 'U4af4980629...')
442-
self.assertEqual(events[21].left.members[1].user_id, 'U91eeaf62d9...')
443-
444-
# ThingsEvent, SourceUser, unlink
445-
self.assertIsInstance(events[22], ThingsEvent)
446-
self.assertEqual(events[22].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
447-
self.assertEqual(events[22].type, 'things')
440+
self.assertIsInstance(events[21].message, FileMessage)
441+
self.assertEqual(events[21].message.id, '325708')
442+
self.assertEqual(events[21].message.type, 'file')
443+
self.assertEqual(events[21].message.file_name, "file.txt")
444+
self.assertEqual(events[21].message.file_size, 2138)
445+
446+
# UnsendEvent
447+
self.assertIsInstance(events[22], UnsendEvent)
448+
self.assertEqual(events[22].type, 'unsend')
448449
self.assertEqual(events[22].mode, 'active')
449-
self.assertEqual(events[22].timestamp, 1462629479859)
450-
self.assertIsInstance(events[22].source, SourceUser)
451-
self.assertEqual(events[22].source.type, 'user')
450+
self.assertEqual(events[22].timestamp, 1547817848122)
451+
self.assertIsInstance(events[22].source, SourceGroup)
452+
self.assertEqual(events[22].source.type, 'group')
452453
self.assertEqual(events[22].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
453454
self.assertEqual(events[22].webhook_event_id, 'testwebhookeventid')
454455
self.assertIsInstance(events[22].delivery_context, DeliveryContext)
455456
self.assertFalse(events[22].delivery_context.is_redelivery)
456-
self.assertIsInstance(events[22].things, DeviceUnlink)
457-
self.assertEqual(events[22].things.type, 'unlink')
458-
self.assertEqual(events[22].things.device_id, 't2c449c9d1')
457+
self.assertIsInstance(events[22].unsend, Unsend)
458+
self.assertEqual(events[22].unsend.message_id, '325708')
459459

460-
# MessageEvent, SourceUser, FileMessage
461-
self.assertIsInstance(events[23], MessageEvent)
460+
# VideoPlayCompleteEvent
461+
self.assertIsInstance(events[23], VideoPlayCompleteEvent)
462462
self.assertEqual(events[23].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
463-
self.assertEqual(events[23].type, 'message')
463+
self.assertEqual(events[23].type, 'videoPlayComplete')
464464
self.assertEqual(events[23].mode, 'active')
465465
self.assertEqual(events[23].timestamp, 1462629479859)
466466
self.assertIsInstance(events[23].source, SourceUser)
@@ -469,107 +469,48 @@ def test_parse(self):
469469
self.assertEqual(events[23].webhook_event_id, 'testwebhookeventid')
470470
self.assertIsInstance(events[23].delivery_context, DeliveryContext)
471471
self.assertFalse(events[23].delivery_context.is_redelivery)
472-
self.assertIsInstance(events[23].message, FileMessage)
473-
self.assertEqual(events[23].message.id, '325708')
474-
self.assertEqual(events[23].message.type, 'file')
475-
self.assertEqual(events[23].message.file_name, "file.txt")
476-
self.assertEqual(events[23].message.file_size, 2138)
477-
478-
# ThingsEvent, SourceUser, scenarioResult
479-
self.assertIsInstance(events[24], ThingsEvent)
480-
self.assertEqual(events[24].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
481-
self.assertEqual(events[24].type, 'things')
472+
self.assertIsInstance(events[23].video_play_complete, VideoPlayComplete)
473+
self.assertEqual(events[23].video_play_complete.tracking_id, 'track_id')
474+
475+
# MessageEvent, SourceUser, ImageMessage with ImageSet
476+
self.assertIsInstance(events[1], MessageEvent)
477+
self.assertEqual(events[24].reply_token, 'fbf94e269485410da6b7e3a5e33283e8')
478+
self.assertEqual(events[24].type, 'message')
482479
self.assertEqual(events[24].mode, 'active')
483-
self.assertEqual(events[24].timestamp, 1547817848122)
480+
self.assertEqual(events[24].timestamp, 1627356924722)
484481
self.assertIsInstance(events[24].source, SourceUser)
485482
self.assertEqual(events[24].source.type, 'user')
486483
self.assertEqual(events[24].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
487484
self.assertEqual(events[24].webhook_event_id, 'testwebhookeventid')
488485
self.assertIsInstance(events[24].delivery_context, DeliveryContext)
489486
self.assertFalse(events[24].delivery_context.is_redelivery)
490-
self.assertIsInstance(events[24].things, ScenarioResult)
491-
self.assertEqual(events[24].things.type, 'scenarioResult')
492-
self.assertEqual(events[24].things.device_id, 't2c449c9d1')
493-
self.assertEqual(events[24].things.result.scenario_id, 'XXX')
494-
self.assertEqual(events[24].things.result.revision, 2)
495-
self.assertEqual(events[24].things.result.start_time, 1547817845950)
496-
self.assertEqual(events[24].things.result.end_time, 1547817845952)
497-
self.assertEqual(events[24].things.result.result_code, 'success')
498-
self.assertEqual(events[24].things.result.ble_notification_payload, 'AQ==')
499-
self.assertIsInstance(events[24].things.result.action_results[0], ActionResult)
500-
self.assertEqual(events[24].things.result.action_results[0].type, 'binary')
501-
self.assertEqual(events[24].things.result.action_results[0].data, '/w==')
502-
self.assertIsInstance(events[24].things.result.action_results[1], ActionResult)
503-
self.assertEqual(events[24].things.result.action_results[1].type, 'void')
487+
self.assertIsInstance(events[24].message, ImageMessage)
488+
self.assertEqual(events[24].message.id, '354718705033693861')
489+
self.assertEqual(events[24].message.type, 'image')
490+
self.assertEqual(events[24].message.content_provider.type, 'line')
491+
self.assertEqual(events[24].message.image_set.id, 'E005D41A7288F41B655')
492+
self.assertEqual(events[24].message.image_set.index, 2)
493+
self.assertEqual(events[24].message.image_set.total, 2)
504494

505-
# UnsendEvent
506-
self.assertIsInstance(events[25], UnsendEvent)
507-
self.assertEqual(events[25].type, 'unsend')
495+
# MessageEvent, SourceUser, TextMessage (Redeliveried)
496+
self.assertIsInstance(events[25], MessageEvent)
497+
self.assertEqual(events[25].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
498+
self.assertEqual(events[25].type, 'message')
508499
self.assertEqual(events[25].mode, 'active')
509-
self.assertEqual(events[25].timestamp, 1547817848122)
510-
self.assertIsInstance(events[25].source, SourceGroup)
511-
self.assertEqual(events[25].source.type, 'group')
500+
self.assertEqual(events[25].timestamp, 1462629479859)
501+
self.assertIsInstance(events[25].source, SourceUser)
502+
self.assertEqual(events[25].source.type, 'user')
512503
self.assertEqual(events[25].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
513504
self.assertEqual(events[25].webhook_event_id, 'testwebhookeventid')
514505
self.assertIsInstance(events[25].delivery_context, DeliveryContext)
515-
self.assertFalse(events[25].delivery_context.is_redelivery)
516-
self.assertIsInstance(events[25].unsend, Unsend)
517-
self.assertEqual(events[25].unsend.message_id, '325708')
518-
519-
# VideoPlayCompleteEvent
520-
self.assertIsInstance(events[26], VideoPlayCompleteEvent)
521-
self.assertEqual(events[26].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
522-
self.assertEqual(events[26].type, 'videoPlayComplete')
523-
self.assertEqual(events[26].mode, 'active')
524-
self.assertEqual(events[26].timestamp, 1462629479859)
525-
self.assertIsInstance(events[26].source, SourceUser)
526-
self.assertEqual(events[26].source.type, 'user')
527-
self.assertEqual(events[26].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
528-
self.assertEqual(events[26].webhook_event_id, 'testwebhookeventid')
529-
self.assertIsInstance(events[26].delivery_context, DeliveryContext)
530-
self.assertFalse(events[26].delivery_context.is_redelivery)
531-
self.assertIsInstance(events[26].video_play_complete, VideoPlayComplete)
532-
self.assertEqual(events[26].video_play_complete.tracking_id, 'track_id')
533-
534-
# MessageEvent, SourceUser, ImageMessage with ImageSet
535-
self.assertIsInstance(events[1], MessageEvent)
536-
self.assertEqual(events[27].reply_token, 'fbf94e269485410da6b7e3a5e33283e8')
537-
self.assertEqual(events[27].type, 'message')
538-
self.assertEqual(events[27].mode, 'active')
539-
self.assertEqual(events[27].timestamp, 1627356924722)
540-
self.assertIsInstance(events[27].source, SourceUser)
541-
self.assertEqual(events[27].source.type, 'user')
542-
self.assertEqual(events[27].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
543-
self.assertEqual(events[27].webhook_event_id, 'testwebhookeventid')
544-
self.assertIsInstance(events[27].delivery_context, DeliveryContext)
545-
self.assertFalse(events[27].delivery_context.is_redelivery)
546-
self.assertIsInstance(events[27].message, ImageMessage)
547-
self.assertEqual(events[27].message.id, '354718705033693861')
548-
self.assertEqual(events[27].message.type, 'image')
549-
self.assertEqual(events[27].message.content_provider.type, 'line')
550-
self.assertEqual(events[27].message.image_set.id, 'E005D41A7288F41B655')
551-
self.assertEqual(events[27].message.image_set.index, 2)
552-
self.assertEqual(events[27].message.image_set.total, 2)
553-
554-
# MessageEvent, SourceUser, TextMessage (Redeliveried)
555-
self.assertIsInstance(events[28], MessageEvent)
556-
self.assertEqual(events[28].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
557-
self.assertEqual(events[28].type, 'message')
558-
self.assertEqual(events[28].mode, 'active')
559-
self.assertEqual(events[28].timestamp, 1462629479859)
560-
self.assertIsInstance(events[28].source, SourceUser)
561-
self.assertEqual(events[28].source.type, 'user')
562-
self.assertEqual(events[28].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
563-
self.assertEqual(events[28].webhook_event_id, 'testwebhookeventid')
564-
self.assertIsInstance(events[28].delivery_context, DeliveryContext)
565-
self.assertTrue(events[28].delivery_context.is_redelivery)
566-
self.assertIsInstance(events[28].message, TextMessage)
567-
self.assertEqual(events[28].message.id, '325708')
568-
self.assertEqual(events[28].message.type, 'text')
569-
self.assertEqual(events[28].message.text, 'Hello, world')
506+
self.assertTrue(events[25].delivery_context.is_redelivery)
507+
self.assertIsInstance(events[25].message, TextMessage)
508+
self.assertEqual(events[25].message.id, '325708')
509+
self.assertEqual(events[25].message.type, 'text')
510+
self.assertEqual(events[25].message.text, 'Hello, world')
570511

571512
# UnknownEvent
572-
self.assertIsInstance(events[29], UnknownEvent)
513+
self.assertIsInstance(events[26], UnknownEvent)
573514

574515
def test_parse_webhook_req_without_destination(self):
575516
body = """

tests/text/webhook.json

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -361,24 +361,6 @@
361361
}
362362
}
363363
},
364-
{
365-
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
366-
"type": "things",
367-
"mode": "active",
368-
"timestamp": 1462629479859,
369-
"source": {
370-
"type": "user",
371-
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
372-
},
373-
"webhookEventId": "testwebhookeventid",
374-
"deliveryContext": {
375-
"isRedelivery": false
376-
},
377-
"things": {
378-
"deviceId": "t2c449c9d1",
379-
"type": "link"
380-
}
381-
},
382364
{
383365
"replyToken": "0f3779fba3b349968c5d07db31eabf65",
384366
"type": "memberJoined",
@@ -430,24 +412,6 @@
430412
]
431413
}
432414
},
433-
{
434-
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
435-
"type": "things",
436-
"mode": "active",
437-
"timestamp": 1462629479859,
438-
"source": {
439-
"type": "user",
440-
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
441-
},
442-
"webhookEventId": "testwebhookeventid",
443-
"deliveryContext": {
444-
"isRedelivery": false
445-
},
446-
"things": {
447-
"deviceId": "t2c449c9d1",
448-
"type": "unlink"
449-
}
450-
},
451415
{
452416
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
453417
"type": "message",
@@ -468,41 +432,6 @@
468432
"fileSize": 2138
469433
}
470434
},
471-
{
472-
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
473-
"type": "things",
474-
"mode": "active",
475-
"source": {
476-
"type": "user",
477-
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
478-
},
479-
"webhookEventId": "testwebhookeventid",
480-
"deliveryContext": {
481-
"isRedelivery": false
482-
},
483-
"timestamp": 1547817848122,
484-
"things": {
485-
"type": "scenarioResult",
486-
"deviceId": "t2c449c9d1",
487-
"result": {
488-
"scenarioId": "XXX",
489-
"revision": 2,
490-
"startTime": 1547817845950,
491-
"endTime": 1547817845952,
492-
"resultCode": "success",
493-
"bleNotificationPayload": "AQ==",
494-
"actionResults": [
495-
{
496-
"type": "binary",
497-
"data": "/w=="
498-
},
499-
{
500-
"type": "void"
501-
}
502-
]
503-
}
504-
}
505-
},
506435
{
507436
"type": "unsend",
508437
"mode": "active",

0 commit comments

Comments
 (0)