ParseMessageTestCase.test_parse_view_event()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 15
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nop 1
dl 0
loc 15
rs 10
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
from __future__ import absolute_import, unicode_literals
3
import unittest
4
5
from wechatpy import parse_message
6
7
8
class ParseMessageTestCase(unittest.TestCase):
9
10
    def test_parse_text_message(self):
11
        xml = """<xml>
12
        <ToUserName><![CDATA[toUser]]></ToUserName>
13
        <FromUserName><![CDATA[fromUser]]></FromUserName>
14
         <CreateTime>1348831860</CreateTime>
15
        <MsgType><![CDATA[text]]></MsgType>
16
        <Content><![CDATA[this is a test]]></Content>
17
        <MsgId>1234567890123456</MsgId>
18
        </xml>"""
19
20
        msg = parse_message(xml)
21
        self.assertEqual('text', msg.type)
22
23
    def test_parse_image_message(self):
24
        xml = """<xml>
25
        <ToUserName><![CDATA[toUser]]></ToUserName>
26
        <FromUserName><![CDATA[fromUser]]></FromUserName>
27
        <CreateTime>1348831860</CreateTime>
28
        <MsgType><![CDATA[image]]></MsgType>
29
        <PicUrl><![CDATA[this is a url]]></PicUrl>
30
        <MediaId><![CDATA[media_id]]></MediaId>
31
        <MsgId>1234567890123456</MsgId>
32
        </xml>"""
33
34
        msg = parse_message(xml)
35
        self.assertEqual('image', msg.type)
36
37
    def test_parse_voice_message(self):
38
        xml = """<xml>
39
        <ToUserName><![CDATA[toUser]]></ToUserName>
40
        <FromUserName><![CDATA[fromUser]]></FromUserName>
41
        <CreateTime>1357290913</CreateTime>
42
        <MsgType><![CDATA[voice]]></MsgType>
43
        <MediaId><![CDATA[media_id]]></MediaId>
44
        <Format><![CDATA[Format]]></Format>
45
        <MsgId>1234567890123456</MsgId>
46
        </xml>"""
47
48
        msg = parse_message(xml)
49
        self.assertEqual('voice', msg.type)
50
51
    def test_parse_video_message(self):
52
        xml = """<xml>
53
        <ToUserName><![CDATA[toUser]]></ToUserName>
54
        <FromUserName><![CDATA[fromUser]]></FromUserName>
55
        <CreateTime>1357290913</CreateTime>
56
        <MsgType><![CDATA[video]]></MsgType>
57
        <MediaId><![CDATA[media_id]]></MediaId>
58
        <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
59
        <MsgId>1234567890123456</MsgId>
60
        </xml>"""
61
62
        msg = parse_message(xml)
63
        self.assertEqual('video', msg.type)
64
65
    def test_parse_location_message(self):
66
        xml = """<xml>
67
        <ToUserName><![CDATA[toUser]]></ToUserName>
68
        <FromUserName><![CDATA[fromUser]]></FromUserName>
69
        <CreateTime>1351776360</CreateTime>
70
        <MsgType><![CDATA[location]]></MsgType>
71
        <Location_X>23.134521</Location_X>
72
        <Location_Y>113.358803</Location_Y>
73
        <Scale>20</Scale>
74
        <Label><![CDATA[位置信息]]></Label>
75
        <MsgId>1234567890123456</MsgId>
76
        </xml>"""
77
78
        msg = parse_message(xml)
79
        self.assertEqual('location', msg.type)
80
81
    def test_parse_link_message(self):
82
        xml = """<xml>
83
        <ToUserName><![CDATA[toUser]]></ToUserName>
84
        <FromUserName><![CDATA[fromUser]]></FromUserName>
85
        <CreateTime>1351776360</CreateTime>
86
        <MsgType><![CDATA[link]]></MsgType>
87
        <Title><![CDATA[公众平台官网链接]]></Title>
88
        <Description><![CDATA[公众平台官网链接]]></Description>
89
        <Url><![CDATA[url]]></Url>
90
        <MsgId>1234567890123456</MsgId>
91
        </xml>"""
92
93
        msg = parse_message(xml)
94
        self.assertEqual('link', msg.type)
95
96
    def test_parse_subscribe_event(self):
97
        xml = """<xml>
98
        <ToUserName><![CDATA[toUser]]></ToUserName>
99
        <FromUserName><![CDATA[FromUser]]></FromUserName>
100
        <CreateTime>123456789</CreateTime>
101
        <MsgType><![CDATA[event]]></MsgType>
102
        <Event><![CDATA[subscribe]]></Event>
103
        </xml>"""
104
105
        msg = parse_message(xml)
106
107
        self.assertEqual('event', msg.type)
108
        self.assertEqual('subscribe', msg.event)
109
        self.assertEqual('', msg.key)
110
111
    def test_parse_subscribe_event_with_last_trade_no(self):
112
        xml = """<xml>
113
        <ToUserName><![CDATA[toUser]]></ToUserName>
114
        <FromUserName><![CDATA[FromUser]]></FromUserName>
115
        <CreateTime>123456789</CreateTime>
116
        <MsgType><![CDATA[event]]></MsgType>
117
        <Event><![CDATA[subscribe]]></Event>
118
        <EventKey><![CDATA[last_trade_no_4008072001201701105817415015]]></EventKey>
119
        </xml>"""
120
121
        msg = parse_message(xml)
122
123
        self.assertEqual('event', msg.type)
124
        self.assertEqual('subscribe', msg.event)
125
        self.assertEqual('last_trade_no_4008072001201701105817415015', msg.key)
126
127
    def test_parse_subscribe_scan_event(self):
128
        xml = """<xml>
129
        <ToUserName><![CDATA[toUser]]></ToUserName>
130
        <FromUserName><![CDATA[FromUser]]></FromUserName>
131
        <CreateTime>123456789</CreateTime>
132
        <MsgType><![CDATA[event]]></MsgType>
133
        <Event><![CDATA[subscribe]]></Event>
134
        <EventKey><![CDATA[qrscene_123123]]></EventKey>
135
        <Ticket><![CDATA[TICKET]]></Ticket>
136
        </xml>"""
137
138
        msg = parse_message(xml)
139
140
        self.assertEqual('event', msg.type)
141
        self.assertEqual('subscribe_scan', msg.event)
142
        self.assertEqual('123123', msg.scene_id)
143
        self.assertEqual('TICKET', msg.ticket)
144
145
    def test_parse_scan_event(self):
146
        xml = """<xml>
147
        <ToUserName><![CDATA[toUser]]></ToUserName>
148
        <FromUserName><![CDATA[FromUser]]></FromUserName>
149
        <CreateTime>123456789</CreateTime>
150
        <MsgType><![CDATA[event]]></MsgType>
151
        <Event><![CDATA[SCAN]]></Event>
152
        <EventKey><![CDATA[123123]]></EventKey>
153
        <Ticket><![CDATA[TICKET]]></Ticket>
154
        </xml>"""
155
156
        msg = parse_message(xml)
157
158
        self.assertEqual('event', msg.type)
159
        self.assertEqual('scan', msg.event)
160
        self.assertEqual('123123', msg.scene_id)
161
        self.assertEqual('TICKET', msg.ticket)
162
163
    def test_parse_location_event(self):
164
        xml = """<xml>
165
        <ToUserName><![CDATA[toUser]]></ToUserName>
166
        <FromUserName><![CDATA[fromUser]]></FromUserName>
167
        <CreateTime>123456789</CreateTime>
168
        <MsgType><![CDATA[event]]></MsgType>
169
        <Event><![CDATA[LOCATION]]></Event>
170
        <Latitude>23.137466</Latitude>
171
        <Longitude>113.352425</Longitude>
172
        <Precision>119.385040</Precision>
173
        </xml>"""
174
175
        msg = parse_message(xml)
176
177
        self.assertEqual('event', msg.type)
178
        self.assertEqual('location', msg.event)
179
        self.assertEqual(23.137466, msg.latitude)
180
        self.assertEqual(113.352425, msg.longitude)
181
        self.assertEqual(119.385040, msg.precision)
182
183
    def test_parse_click_event(self):
184
        xml = """<xml>
185
        <ToUserName><![CDATA[toUser]]></ToUserName>
186
        <FromUserName><![CDATA[FromUser]]></FromUserName>
187
        <CreateTime>123456789</CreateTime>
188
        <MsgType><![CDATA[event]]></MsgType>
189
        <Event><![CDATA[CLICK]]></Event>
190
        <EventKey><![CDATA[EVENTKEY]]></EventKey>
191
        </xml>"""
192
193
        msg = parse_message(xml)
194
195
        self.assertEqual('event', msg.type)
196
        self.assertEqual('click', msg.event)
197
        self.assertEqual('EVENTKEY', msg.key)
198
199
    def test_parse_view_event(self):
200
        xml = """<xml>
201
        <ToUserName><![CDATA[toUser]]></ToUserName>
202
        <FromUserName><![CDATA[FromUser]]></FromUserName>
203
        <CreateTime>123456789</CreateTime>
204
        <MsgType><![CDATA[event]]></MsgType>
205
        <Event><![CDATA[VIEW]]></Event>
206
        <EventKey><![CDATA[www.qq.com]]></EventKey>
207
        </xml>"""
208
209
        msg = parse_message(xml)
210
211
        self.assertEqual('event', msg.type)
212
        self.assertEqual('view', msg.event)
213
        self.assertEqual('www.qq.com', msg.url)
214
215
    def test_parse_unknown_message(self):
216
        from wechatpy.messages import UnknownMessage
217
218
        xml = """<xml>
219
        <ToUserName><![CDATA[toUser]]></ToUserName>
220
        <FromUserName><![CDATA[fromUser]]></FromUserName>
221
        <CreateTime>1348831860</CreateTime>
222
        <MsgType><![CDATA[notsure]]></MsgType>
223
        <MsgId>1234567890123456</MsgId>
224
        </xml>"""
225
226
        msg = parse_message(xml)
227
228
        self.assertTrue(isinstance(msg, UnknownMessage))
229
230
    def test_parse_subscribe_scan_product_event(self):
231
        from wechatpy.events import SubscribeScanProductEvent
232
233
        xml = """<xml>
234
        <ToUserName><![CDATA[gh_fbe8a958756e]]></ToUserName>
235
        <FromUserName><![CDATA[otAzGjrS4AYCmeJM1GhEOcHXXTAo]]></FromUserName>
236
        <CreateTime>1433259128</CreateTime>
237
        <MsgType><![CDATA[event]]></MsgType>
238
        <Event><![CDATA[subscribe]]></Event>
239
        <EventKey><![CDATA[scanbarcode|keystandard|keystr]]></EventKey>
240
        </xml>"""
241
242
        msg = parse_message(xml)
243
        self.assertTrue(isinstance(msg, SubscribeScanProductEvent))
244
        self.assertEqual('scanbarcode', msg.scene)
245
        self.assertEqual('keystandard', msg.standard)
246
        self.assertEqual('keystr', msg.key)
247
248
        xml = """<xml>
249
        <ToUserName><![CDATA[gh_fbe8a958756e]]></ToUserName>
250
        <FromUserName><![CDATA[otAzGjrS4AYCmeJM1GhEOcHXXTAo]]></FromUserName>
251
        <CreateTime>1433259128</CreateTime>
252
        <MsgType><![CDATA[event]]></MsgType>
253
        <Event><![CDATA[subscribe]]></Event>
254
        <EventKey><![CDATA[scanimage|keystandard|keystr]]></EventKey>
255
        </xml>"""
256
257
        msg = parse_message(xml)
258
        self.assertTrue(isinstance(msg, SubscribeScanProductEvent))
259
        self.assertEqual('scanimage', msg.scene)
260
        self.assertEqual('keystandard', msg.standard)
261
        self.assertEqual('keystr', msg.key)
262
263
    def test_parse_user_authorize_invoice_event(self):
264
        """ Test parsing xml for UserAuthorizeInvoiceEvent """
265
        from wechatpy.events import UserAuthorizeInvoiceEvent
266
267
        xml = """<xml>
268
        <ToUserName><![CDATA[gh_fc0a06a20993]]></ToUserName>
269
        <FromUserName><![CDATA[oZI8Fj040-be6rlDohc6gkoPOQTQ]]></FromUserName>
270
        <CreateTime>1475134700</CreateTime>
271
        <MsgType><![CDATA[event]]></MsgType>
272
        <Event><![CDATA[user_authorize_invoice]]></Event>
273
        <SuccOrderId><![CDATA[1202933957956]]></SuccOrderId>
274
        <FailOrderId><![CDATA[]]></FailOrderId>
275
        <AppId><![CDATA[wx1234567887654321]]></AppId>
276
        <Source><![CDATA[]]></Source>
277
        </xml>"""
278
279
        msg = parse_message(xml)
280
        self.assertTrue(isinstance(msg, UserAuthorizeInvoiceEvent))
281
        self.assertEqual('1202933957956', msg.success_order_id)
282
        self.assertEqual(None, msg.fail_order_id)
283
        self.assertEqual('wx1234567887654321', msg.app_id)
284
        self.assertEqual(None, msg.auth_source)
285
286
    def test_parse_update_invoice_status_event(self):
287
        """ Test parsing xml for UpdateInvoiceStatusEvent """
288
        from wechatpy.events import UpdateInvoiceStatusEvent
289
290
        xml = """<xml>
291
        <ToUserName><![CDATA[gh_9e1765b5568e]]></ToUserName>
292
        <FromUserName><![CDATA[ojZ8Ytz4lESgdWZ34L_R1TvB2Kds]]></FromUserName>
293
        <CreateTime>1478068440</CreateTime>
294
        <MsgType><![CDATA[event]]></MsgType>
295
        <Event><![CDATA[update_invoice_status]]></Event>
296
        <Status><![CDATA[INVOICE_REIMBURSE_INIT]]></Status>
297
        <CardId><![CDATA[pjZ8Yt7Um2jYxzneP8GomnxoVFWo]]></CardId>
298
        <Code><![CDATA[186921658591]]></Code>
299
        </xml>"""
300
301
        msg = parse_message(xml)
302
        self.assertTrue(isinstance(msg, UpdateInvoiceStatusEvent))
303
        self.assertEqual('INVOICE_REIMBURSE_INIT', msg.status)
304
        self.assertEqual('pjZ8Yt7Um2jYxzneP8GomnxoVFWo', msg.card_id)
305
        self.assertEqual('186921658591', msg.code)
306
307
    def test_parse_submit_invoice_title_event(self):
308
        """ Test parsing xml for SubmitInvoiceTitleEvent """
309
        from wechatpy.events import SubmitInvoiceTitleEvent
310
311
        xml = """<xml>
312
        <ToUserName><![CDATA[gh_fc0a06a20993]]></ToUserName>
313
        <FromUserName><![CDATA[oZI8Fj040-be6rlDohc6gkoPOQTQ]]></FromUserName>
314
        <CreateTime>1475134700</CreateTime>
315
        <MsgType><![CDATA[event]]></MsgType>
316
        <Event><![CDATA[submit_invoice_title]]></Event>
317
        <title><![CDATA[样例公司抬头]]></title>
318
        <tax_no><![CDATA[1486715661]]></tax_no>
319
        <addr><![CDATA[abc]]></addr>
320
        <phone><![CDATA[13313331333]]></phone>
321
        <bank_type><![CDATA[bt]]></bank_type>
322
        <bank_no><![CDATA[bn]]></bank_no>
323
        <attach><![CDATA[at]]></attach>
324
        <title_type><![CDATA[InvoiceUserTitleBusinessType]]></title_type>
325
        </xml>"""
326
327
        msg = parse_message(xml)
328
        self.assertTrue(isinstance(msg, SubmitInvoiceTitleEvent))
329
        self.assertEqual('样例公司抬头', msg.title)
330
        self.assertEqual('1486715661', msg.tax_no)
331
        self.assertEqual('abc', msg.addr)
332
        self.assertEqual('13313331333', msg.phone)
333
        self.assertEqual('bt', msg.bank_type)
334
        self.assertEqual('bn', msg.bank_no)
335
        self.assertEqual('at', msg.attach)
336
        self.assertEqual('InvoiceUserTitleBusinessType', msg.title_type)
337
338
    def test_parse_device_text_event(self):
339
        from wechatpy.events import DeviceTextEvent
340
341
        xml = """<xml>
342
        <ToUserName><![CDATA[toUser]]></ToUserName>
343
        <FromUserName><![CDATA[fromUser]]></FromUserName>
344
        <CreateTime>1348831860</CreateTime>
345
        <MsgType><![CDATA[device_text]]></MsgType>
346
        <MsgId>1234567890123456</MsgId>
347
        <OpenID><![CDATA[123]]></OpenID>
348
        <DeviceID><![CDATA[123]]></DeviceID>
349
        <DeviceType><![CDATA[123]]></DeviceType>
350
        <SessionID><![CDATA[123]]></SessionID>
351
        <Content><![CDATA[MTIz]]></Content>
352
        </xml>"""
353
354
        msg = parse_message(xml)
355
356
        self.assertTrue(isinstance(msg, DeviceTextEvent))
357
        self.assertEqual('123', msg.content)
358
        self.assertEqual('123', msg.device_type)
359
        self.assertEqual('123', msg.device_id)
360
361
    def test_parse_device_bind_event(self):
362
        from wechatpy.events import DeviceBindEvent
363
364
        xml = """<xml>
365
        <ToUserName><![CDATA[toUser]]></ToUserName>
366
        <FromUserName><![CDATA[fromUser]]></FromUserName>
367
        <CreateTime>1348831860</CreateTime>
368
        <MsgType><![CDATA[device_event]]></MsgType>
369
        <MsgId>1234567890123456</MsgId>
370
        <Event><![CDATA[bind]]></Event>
371
        <OpenID><![CDATA[123]]></OpenID>
372
        <DeviceID><![CDATA[123]]></DeviceID>
373
        <DeviceType><![CDATA[123]]></DeviceType>
374
        <SessionID><![CDATA[123]]></SessionID>
375
        <Content><![CDATA[MTIz]]></Content>
376
        </xml>"""
377
378
        msg = parse_message(xml)
379
380
        self.assertTrue(isinstance(msg, DeviceBindEvent))
381
        self.assertEqual('123', msg.content)
382
        self.assertEqual('123', msg.device_type)
383
        self.assertEqual('123', msg.device_id)
384