Skip to content

Commit 0df366a

Browse files
nnsnodnbbe-hase
authored andcommitted
Fix AccountLinkEvent's source property (#109)
* Fix AccountLinkEvent initializer * Update test_webhook for AccountLinkEvent * Modify test's nonce token
1 parent 826227d commit 0df366a

File tree

3 files changed

+68
-39
lines changed

3 files changed

+68
-39
lines changed

linebot/models/events.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,10 @@ def __init__(self, timestamp=None, source=None, reply_token=None, link=None, **k
284284
:param kwargs:
285285
"""
286286
super(AccountLinkEvent, self).__init__(
287-
timestamp=timestamp, source=source, reply_token=reply_token, link=link
287+
timestamp=timestamp, source=source, **kwargs
288288
)
289289

290290
self.type = 'accountLink'
291-
self.source = source
292291
self.reply_token = reply_token
293292
self.link = self.get_or_new_from_json_dict(
294293
link, Link

tests/test_webhook.py

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
)
2424
from linebot.models import (
2525
MessageEvent, FollowEvent, UnfollowEvent, JoinEvent,
26-
LeaveEvent, PostbackEvent, BeaconEvent,
26+
LeaveEvent, PostbackEvent, BeaconEvent, AccountLinkEvent,
2727
TextMessage, ImageMessage, VideoMessage, AudioMessage,
2828
LocationMessage, StickerMessage, FileMessage,
2929
SourceUser, SourceRoom, SourceGroup
@@ -225,47 +225,47 @@ def test_parse(self):
225225
self.assertEqual(events[12].beacon.dm, '1234567890abcdef')
226226
self.assertEqual(events[12].beacon.device_message, bytearray(b'\x124Vx\x90\xab\xcd\xef'))
227227

228-
# MessageEvent, SourceGroup with userId, TextMessage
229-
self.assertIsInstance(events[13], MessageEvent)
228+
# AccountEvent, SourceUser
229+
self.assertIsInstance(events[13], AccountLinkEvent)
230230
self.assertEqual(events[13].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
231-
self.assertEqual(events[13].type, 'message')
231+
self.assertEqual(events[13].type, 'accountLink')
232232
self.assertEqual(events[13].timestamp, 1462629479859)
233-
self.assertIsInstance(events[13].source, SourceGroup)
234-
self.assertEqual(events[13].source.type, 'group')
235-
self.assertEqual(events[13].source.group_id, 'Ca56f94637cc4347f90a25382909b24b9')
233+
self.assertIsInstance(events[13].source, SourceUser)
234+
self.assertEqual(events[13].source.type, 'user')
236235
self.assertEqual(events[13].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
237-
self.assertEqual(events[13].source.sender_id, 'Ca56f94637cc4347f90a25382909b24b9')
238-
self.assertIsInstance(events[13].message, TextMessage)
239-
self.assertEqual(events[13].message.id, '325708')
240-
self.assertEqual(events[13].message.type, 'text')
241-
self.assertEqual(events[13].message.text, 'Hello, world')
236+
self.assertEqual(events[13].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
237+
self.assertEqual(events[13].link.result, 'ok')
238+
self.assertEqual(events[13].link.nonce, 'Vb771wDYtXuammLszK6h9A')
242239

243-
# MessageEvent, SourceRoom with userId, TextMessage
240+
# MessageEvent, SourceGroup with userId, TextMessage
244241
self.assertIsInstance(events[14], MessageEvent)
245242
self.assertEqual(events[14].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
246243
self.assertEqual(events[14].type, 'message')
247244
self.assertEqual(events[14].timestamp, 1462629479859)
248-
self.assertIsInstance(events[14].source, SourceRoom)
249-
self.assertEqual(events[14].source.type, 'room')
250-
self.assertEqual(events[14].source.room_id, 'Ra8dbf4673c4c812cd491258042226c99')
245+
self.assertIsInstance(events[14].source, SourceGroup)
246+
self.assertEqual(events[14].source.type, 'group')
247+
self.assertEqual(events[14].source.group_id, 'Ca56f94637cc4347f90a25382909b24b9')
251248
self.assertEqual(events[14].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
252-
self.assertEqual(events[14].source.sender_id, 'Ra8dbf4673c4c812cd491258042226c99')
249+
self.assertEqual(events[14].source.sender_id, 'Ca56f94637cc4347f90a25382909b24b9')
253250
self.assertIsInstance(events[14].message, TextMessage)
254251
self.assertEqual(events[14].message.id, '325708')
255252
self.assertEqual(events[14].message.type, 'text')
256253
self.assertEqual(events[14].message.text, 'Hello, world')
257254

258-
# PostbackEvent, SourceUser, with date params
259-
self.assertIsInstance(events[15], PostbackEvent)
255+
# MessageEvent, SourceRoom with userId, TextMessage
256+
self.assertIsInstance(events[15], MessageEvent)
260257
self.assertEqual(events[15].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
261-
self.assertEqual(events[15].type, 'postback')
258+
self.assertEqual(events[15].type, 'message')
262259
self.assertEqual(events[15].timestamp, 1462629479859)
263-
self.assertIsInstance(events[15].source, SourceUser)
264-
self.assertEqual(events[15].source.type, 'user')
260+
self.assertIsInstance(events[15].source, SourceRoom)
261+
self.assertEqual(events[15].source.type, 'room')
262+
self.assertEqual(events[15].source.room_id, 'Ra8dbf4673c4c812cd491258042226c99')
265263
self.assertEqual(events[15].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
266-
self.assertEqual(events[15].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
267-
self.assertEqual(events[15].postback.data, 'action=buyItem&itemId=123123&color=red')
268-
self.assertEqual(events[15].postback.params['date'], '2013-04-01')
264+
self.assertEqual(events[15].source.sender_id, 'Ra8dbf4673c4c812cd491258042226c99')
265+
self.assertIsInstance(events[15].message, TextMessage)
266+
self.assertEqual(events[15].message.id, '325708')
267+
self.assertEqual(events[15].message.type, 'text')
268+
self.assertEqual(events[15].message.text, 'Hello, world')
269269

270270
# PostbackEvent, SourceUser, with date params
271271
self.assertIsInstance(events[16], PostbackEvent)
@@ -277,7 +277,7 @@ def test_parse(self):
277277
self.assertEqual(events[16].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
278278
self.assertEqual(events[16].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
279279
self.assertEqual(events[16].postback.data, 'action=buyItem&itemId=123123&color=red')
280-
self.assertEqual(events[16].postback.params['time'], '10:00')
280+
self.assertEqual(events[16].postback.params['date'], '2013-04-01')
281281

282282
# PostbackEvent, SourceUser, with date params
283283
self.assertIsInstance(events[17], PostbackEvent)
@@ -289,22 +289,34 @@ def test_parse(self):
289289
self.assertEqual(events[17].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
290290
self.assertEqual(events[17].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
291291
self.assertEqual(events[17].postback.data, 'action=buyItem&itemId=123123&color=red')
292-
self.assertEqual(events[17].postback.params['datetime'], '2013-04-01T10:00')
292+
self.assertEqual(events[17].postback.params['time'], '10:00')
293293

294-
# MessageEvent, SourceUser, FileMessage
295-
self.assertIsInstance(events[18], MessageEvent)
294+
# PostbackEvent, SourceUser, with date params
295+
self.assertIsInstance(events[18], PostbackEvent)
296296
self.assertEqual(events[18].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
297-
self.assertEqual(events[18].type, 'message')
297+
self.assertEqual(events[18].type, 'postback')
298298
self.assertEqual(events[18].timestamp, 1462629479859)
299299
self.assertIsInstance(events[18].source, SourceUser)
300300
self.assertEqual(events[18].source.type, 'user')
301301
self.assertEqual(events[18].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
302302
self.assertEqual(events[18].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
303-
self.assertIsInstance(events[18].message, FileMessage)
304-
self.assertEqual(events[18].message.id, '325708')
305-
self.assertEqual(events[18].message.type, 'file')
306-
self.assertEqual(events[18].message.file_name, "file.txt")
307-
self.assertEqual(events[18].message.file_size, 2138)
303+
self.assertEqual(events[18].postback.data, 'action=buyItem&itemId=123123&color=red')
304+
self.assertEqual(events[18].postback.params['datetime'], '2013-04-01T10:00')
305+
306+
# MessageEvent, SourceUser, FileMessage
307+
self.assertIsInstance(events[19], MessageEvent)
308+
self.assertEqual(events[19].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA')
309+
self.assertEqual(events[19].type, 'message')
310+
self.assertEqual(events[19].timestamp, 1462629479859)
311+
self.assertIsInstance(events[19].source, SourceUser)
312+
self.assertEqual(events[19].source.type, 'user')
313+
self.assertEqual(events[19].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
314+
self.assertEqual(events[19].source.sender_id, 'U206d25c2ea6bd87c17655609a1c37cb8')
315+
self.assertIsInstance(events[19].message, FileMessage)
316+
self.assertEqual(events[19].message.id, '325708')
317+
self.assertEqual(events[19].message.type, 'file')
318+
self.assertEqual(events[19].message.file_name, "file.txt")
319+
self.assertEqual(events[19].message.file_size, 2138)
308320

309321

310322
class TestWebhookHandler(unittest.TestCase):
@@ -345,6 +357,10 @@ def postback(event):
345357
def beacon(event):
346358
self.calls.append('7 ' + event.type)
347359

360+
@self.handler.add(AccountLinkEvent)
361+
def account_link(event):
362+
self.calls.append('8 ' + event.type)
363+
348364
@self.handler.default()
349365
def default(event):
350366
self.calls.append('default ' + event.type)
@@ -373,11 +389,12 @@ def test_handler(self):
373389
self.assertEqual(self.calls[10], '6 postback')
374390
self.assertEqual(self.calls[11], '7 beacon')
375391
self.assertEqual(self.calls[12], '7 beacon')
376-
self.assertEqual(self.calls[13], '1 message_text')
392+
self.assertEqual(self.calls[13], '8 accountLink')
377393
self.assertEqual(self.calls[14], '1 message_text')
378-
self.assertEqual(self.calls[15], '6 postback')
394+
self.assertEqual(self.calls[15], '1 message_text')
379395
self.assertEqual(self.calls[16], '6 postback')
380396
self.assertEqual(self.calls[17], '6 postback')
397+
self.assertEqual(self.calls[18], '6 postback')
381398

382399

383400
if __name__ == '__main__':

tests/text/webhook.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,19 @@
158158
"dm": "1234567890abcdef"
159159
}
160160
},
161+
{
162+
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
163+
"type": "accountLink",
164+
"timestamp": 1462629479859,
165+
"source": {
166+
"type": "user",
167+
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
168+
},
169+
"link": {
170+
"result": "ok",
171+
"nonce": "Vb771wDYtXuammLszK6h9A"
172+
}
173+
},
161174
{
162175
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
163176
"type": "message",

0 commit comments

Comments
 (0)