Skip to content

Commit 2392623

Browse files
committed
add tests
1 parent 48201e5 commit 2392623

File tree

4 files changed

+117
-6
lines changed

4 files changed

+117
-6
lines changed

linebot/models/messages.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ def __init__(self, id=None, content_provider=None, **kwargs):
7373
7474
:param str id: Message ID
7575
:param content_provider: ContentProvider object
76-
:type content_provider: :py:class:`linebot.models.messages.ContentProvider`
76+
:type content_provider:
77+
Union[:py:class:`linebot.models.messages.ContentProvider`, Dict[str, str]]
7778
:param kwargs:
7879
"""
7980
super(ImageMessage, self).__init__(id=id, **kwargs)
@@ -99,7 +100,8 @@ def __init__(self, id=None, duration=None, content_provider=None, **kwargs):
99100
:param str id: Message ID
100101
:param long duration: Length of video file (milliseconds)
101102
:param content_provider: ContentProvider object
102-
:type content_provider: :py:class:`linebot.models.messages.ContentProvider`
103+
:type content_provider:
104+
Union[:py:class:`linebot.models.messages.ContentProvider`, Dict[str, str]]
103105
:param kwargs:
104106
"""
105107
super(VideoMessage, self).__init__(id=id, **kwargs)
@@ -126,7 +128,8 @@ def __init__(self, id=None, duration=None, content_provider=None, **kwargs):
126128
:param str id: Message ID
127129
:param long duration: Length of audio file (milliseconds)
128130
:param content_provider: ContentProvider object
129-
:type content_provider: :py:class:`linebot.models.messages.ContentProvider`
131+
:type content_provider:
132+
Union[:py:class:`linebot.models.messages.ContentProvider`, Dict[str, str]]
130133
:param kwargs:
131134
"""
132135
super(AudioMessage, self).__init__(id=id, **kwargs)

tests/models/test_messages.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Licensed under the Apache License, Version 2.0 (the 'License'); you may
4+
# not use this file except in compliance with the License. You may obtain
5+
# a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
11+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12+
# License for the specific language governing permissions and limitations
13+
# under the License.
14+
15+
from __future__ import unicode_literals, absolute_import
16+
17+
import unittest
18+
19+
from linebot.models import (
20+
TextMessage, ImageMessage, VideoMessage, AudioMessage,
21+
LocationMessage, StickerMessage, FileMessage,
22+
)
23+
from linebot.utils import to_snake_case
24+
25+
26+
class TestMessages(unittest.TestCase):
27+
@staticmethod
28+
def rename_keys(d):
29+
return {to_snake_case(k): v for k, v in d.items()}
30+
31+
def setUp(self):
32+
self.content_provider_dict = {'type': 'external',
33+
'originalContentUrl': 'https://aaa.com',
34+
'previewImageUrl': 'https://bbb.com'}
35+
36+
self.content_provider_dict2 = {'type': 'external', 'originalContentUrl': 'https://aaa.com'}
37+
38+
self.text_message_ev = {'type': 'text', 'id': 'message_id', 'text': 'message_text'}
39+
self.text_message = TextMessage(**self.rename_keys(self.text_message_ev))
40+
41+
self.image_message_ev = {'id': 'message_id', 'type': 'image',
42+
'contentProvider': self.content_provider_dict}
43+
self.image_message = ImageMessage(**self.rename_keys(self.image_message_ev))
44+
45+
self.video_message_ev = {'id': 'message_id', 'type': 'video', 'duration': 60000,
46+
'contentProvider': self.content_provider_dict}
47+
self.video_message = VideoMessage(**self.rename_keys(self.video_message_ev))
48+
49+
self.audio_message_ev = {'id': 'message_id', 'type': 'audio', 'duration': 60000,
50+
'contentProvider': self.content_provider_dict2}
51+
self.audio_message = AudioMessage(**self.rename_keys(self.audio_message_ev))
52+
53+
self.location_message_ev = {'type': 'location', 'id': 'message_id', 'title': 'title',
54+
'address': '〒150-0002 東京都渋谷区渋谷2丁目21−1',
55+
'latitude': 35.65910807942215, 'longitude': 139.70372892916203}
56+
self.location_message = LocationMessage(**self.rename_keys(self.location_message_ev))
57+
58+
self.sticker_message_ev = {'type': 'sticker', 'id': 'message_id',
59+
'packageId': '1', 'stickerId': '1'}
60+
self.sticker_message = StickerMessage(**self.rename_keys(self.sticker_message_ev))
61+
62+
self.file_message_ev = {'type': 'file', 'id': 'message_id',
63+
'fileName': 'file.txt', 'fileSize': 2138}
64+
self.file_message = FileMessage(**self.rename_keys(self.file_message_ev))
65+
66+
def test_as_json_dict(self):
67+
self.assertEqual(self.text_message_ev, self.text_message.as_json_dict())
68+
self.assertEqual(self.image_message_ev, self.image_message.as_json_dict())
69+
self.assertEqual(self.video_message_ev, self.video_message.as_json_dict())
70+
self.assertEqual(self.audio_message_ev, self.audio_message.as_json_dict())
71+
self.assertEqual(self.location_message_ev, self.location_message.as_json_dict())
72+
self.assertEqual(self.sticker_message_ev, self.sticker_message.as_json_dict())
73+
self.assertEqual(self.file_message_ev, self.file_message.as_json_dict())
74+
75+
76+
if __name__ == '__main__':
77+
unittest.main()

tests/test_webhook.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ def test_parse(self):
8787
self.assertIsInstance(events[1].message, ImageMessage)
8888
self.assertEqual(events[1].message.id, '325708')
8989
self.assertEqual(events[1].message.type, 'image')
90+
self.assertEqual(events[1].message.content_provider.type, 'external')
91+
self.assertEqual(events[1].message.content_provider.original_content_url,
92+
"https://example.com")
93+
self.assertEqual(events[1].message.content_provider.preview_image_url,
94+
"https://example.com")
9095

9196
# MessageEvent, SourceUser, VideoMessage
9297
self.assertIsInstance(events[2], MessageEvent)
@@ -100,6 +105,12 @@ def test_parse(self):
100105
self.assertIsInstance(events[2].message, VideoMessage)
101106
self.assertEqual(events[2].message.id, '325708')
102107
self.assertEqual(events[2].message.type, 'video')
108+
self.assertEqual(events[2].message.duration, 60000)
109+
self.assertEqual(events[2].message.content_provider.type, 'external')
110+
self.assertEqual(events[2].message.content_provider.original_content_url,
111+
"https://example.com")
112+
self.assertEqual(events[2].message.content_provider.preview_image_url,
113+
"https://example.com")
103114

104115
# MessageEvent, SourceUser, AudioMessage
105116
self.assertIsInstance(events[3], MessageEvent)
@@ -113,6 +124,10 @@ def test_parse(self):
113124
self.assertIsInstance(events[3].message, AudioMessage)
114125
self.assertEqual(events[3].message.id, '325708')
115126
self.assertEqual(events[3].message.type, 'audio')
127+
self.assertEqual(events[3].message.duration, 60000)
128+
self.assertEqual(events[3].message.content_provider.type, 'external')
129+
self.assertEqual(events[3].message.content_provider.original_content_url,
130+
"https://example.com")
116131

117132
# MessageEvent, SourceUser, LocationMessage
118133
self.assertIsInstance(events[4], MessageEvent)

tests/text/webhook.json

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@
2424
},
2525
"message": {
2626
"id": "325708",
27-
"type": "image"
27+
"type": "image",
28+
"contentProvider": {
29+
"type": "external",
30+
"originalContentUrl": "https://example.com",
31+
"previewImageUrl": "https://example.com"
32+
}
2833
}
2934
},
3035
{
@@ -37,7 +42,13 @@
3742
},
3843
"message": {
3944
"id": "325708",
40-
"type": "video"
45+
"type": "video",
46+
"duration": 60000,
47+
"contentProvider": {
48+
"type": "external",
49+
"originalContentUrl": "https://example.com",
50+
"previewImageUrl": "https://example.com"
51+
}
4152
}
4253
},
4354
{
@@ -50,7 +61,12 @@
5061
},
5162
"message": {
5263
"id": "325708",
53-
"type": "audio"
64+
"type": "audio",
65+
"duration": 60000,
66+
"contentProvider": {
67+
"type": "external",
68+
"originalContentUrl": "https://example.com"
69+
}
5470
}
5571
},
5672
{

0 commit comments

Comments
 (0)