|
1
|
|
|
# -*- coding: utf-8 -*- |
|
2
|
|
|
from __future__ import absolute_import, print_function, unicode_literals |
|
3
|
|
|
|
|
4
|
|
|
import os |
|
5
|
|
|
import unittest |
|
6
|
|
|
from datetime import datetime |
|
7
|
|
|
|
|
8
|
|
|
import six |
|
9
|
|
|
from httmock import HTTMock, response, urlmatch |
|
10
|
|
|
|
|
11
|
|
|
from wechatpy import WeChatClient |
|
12
|
|
|
from wechatpy.exceptions import WeChatClientException |
|
13
|
|
|
from wechatpy.utils import json |
|
14
|
|
|
|
|
15
|
|
|
_TESTS_PATH = os.path.abspath(os.path.dirname(__file__)) |
|
16
|
|
|
_FIXTURE_PATH = os.path.join(_TESTS_PATH, 'fixtures') |
|
17
|
|
|
|
|
18
|
|
|
|
|
19
|
|
|
@urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$') |
|
20
|
|
|
def wechat_api_mock(url, request): |
|
21
|
|
|
path = url.path.replace('/cgi-bin/', '').replace('/', '_') |
|
22
|
|
|
if path.startswith('_'): |
|
23
|
|
|
path = path[1:] |
|
24
|
|
|
res_file = os.path.join(_FIXTURE_PATH, '%s.json' % path) |
|
25
|
|
|
content = { |
|
26
|
|
|
'errcode': 99999, |
|
27
|
|
|
'errmsg': 'can not find fixture %s' % res_file, |
|
28
|
|
|
} |
|
29
|
|
|
headers = { |
|
30
|
|
|
'Content-Type': 'application/json' |
|
31
|
|
|
} |
|
32
|
|
|
try: |
|
33
|
|
|
with open(res_file, 'rb') as f: |
|
34
|
|
|
content = json.loads(f.read().decode('utf-8')) |
|
35
|
|
|
except (IOError, ValueError) as e: |
|
36
|
|
|
content['errmsg'] = 'Loads fixture {0} failed, error: {1}'.format( |
|
37
|
|
|
res_file, |
|
38
|
|
|
e |
|
39
|
|
|
) |
|
40
|
|
|
return response(200, content, headers, request=request) |
|
41
|
|
|
|
|
42
|
|
|
|
|
43
|
|
|
class WeChatClientTestCase(unittest.TestCase): |
|
44
|
|
|
app_id = '123456' |
|
45
|
|
|
secret = '123456' |
|
46
|
|
|
|
|
47
|
|
|
def setUp(self): |
|
48
|
|
|
self.client = WeChatClient(self.app_id, self.secret) |
|
49
|
|
|
|
|
50
|
|
|
def test_two_client_not_equal(self): |
|
51
|
|
|
client2 = WeChatClient('654321', '654321', '987654321') |
|
52
|
|
|
assert self.client != client2 |
|
53
|
|
|
assert self.client.user != client2.user |
|
54
|
|
|
assert id(self.client.menu) != id(client2.menu) |
|
55
|
|
|
with HTTMock(wechat_api_mock): |
|
56
|
|
|
self.client.fetch_access_token() |
|
57
|
|
|
assert self.client.access_token != client2.access_token |
|
58
|
|
|
|
|
59
|
|
|
def test_subclass_client_ok(self): |
|
60
|
|
|
class TestClient(WeChatClient): |
|
61
|
|
|
pass |
|
62
|
|
|
|
|
63
|
|
|
client = TestClient('12345', '123456', '123456789') |
|
64
|
|
|
self.assertEqual(client, client.user._client) |
|
65
|
|
|
|
|
66
|
|
|
def test_fetch_access_token(self): |
|
67
|
|
|
with HTTMock(wechat_api_mock): |
|
68
|
|
|
token = self.client.fetch_access_token() |
|
69
|
|
|
self.assertEqual('1234567890', token['access_token']) |
|
70
|
|
|
self.assertEqual(7200, token['expires_in']) |
|
71
|
|
|
self.assertEqual('1234567890', self.client.access_token) |
|
72
|
|
|
|
|
73
|
|
|
def test_upload_media(self): |
|
74
|
|
|
media_file = six.StringIO('nothing') |
|
75
|
|
|
with HTTMock(wechat_api_mock): |
|
76
|
|
|
media = self.client.media.upload('image', media_file) |
|
77
|
|
|
self.assertEqual('image', media['type']) |
|
78
|
|
|
self.assertEqual('12345678', media['media_id']) |
|
79
|
|
|
|
|
80
|
|
|
def test_user_get_group_id(self): |
|
81
|
|
|
with HTTMock(wechat_api_mock): |
|
82
|
|
|
group_id = self.client.user.get_group_id('123456') |
|
83
|
|
|
self.assertEqual(102, group_id) |
|
84
|
|
|
|
|
85
|
|
|
def test_create_group(self): |
|
86
|
|
|
with HTTMock(wechat_api_mock): |
|
87
|
|
|
group = self.client.group.create('test') |
|
88
|
|
|
self.assertEqual(1, group['group']['id']) |
|
89
|
|
|
self.assertEqual('test', group['group']['name']) |
|
90
|
|
|
|
|
91
|
|
|
def test_group_get(self): |
|
92
|
|
|
with HTTMock(wechat_api_mock): |
|
93
|
|
|
groups = self.client.group.get() |
|
94
|
|
|
self.assertEqual(5, len(groups)) |
|
95
|
|
|
|
|
96
|
|
|
def test_group_getid(self): |
|
97
|
|
|
with HTTMock(wechat_api_mock): |
|
98
|
|
|
group = self.client.group.get('123456') |
|
99
|
|
|
self.assertEqual(102, group) |
|
100
|
|
|
|
|
101
|
|
|
def test_group_update(self): |
|
102
|
|
|
with HTTMock(wechat_api_mock): |
|
103
|
|
|
result = self.client.group.update(102, 'test') |
|
104
|
|
|
self.assertEqual(0, result['errcode']) |
|
105
|
|
|
|
|
106
|
|
|
def test_group_move_user(self): |
|
107
|
|
|
with HTTMock(wechat_api_mock): |
|
108
|
|
|
result = self.client.group.move_user('test', 102) |
|
109
|
|
|
self.assertEqual(0, result['errcode']) |
|
110
|
|
|
|
|
111
|
|
|
def test_group_delete(self): |
|
112
|
|
|
with HTTMock(wechat_api_mock): |
|
113
|
|
|
result = self.client.group.delete(123456) |
|
114
|
|
|
self.assertEqual(0, result['errcode']) |
|
115
|
|
|
|
|
116
|
|
|
def test_send_text_message(self): |
|
117
|
|
|
with HTTMock(wechat_api_mock): |
|
118
|
|
|
result = self.client.message.send_text(1, 'test', account='test') |
|
119
|
|
|
self.assertEqual(0, result['errcode']) |
|
120
|
|
|
|
|
121
|
|
|
def test_send_image_message(self): |
|
122
|
|
|
with HTTMock(wechat_api_mock): |
|
123
|
|
|
result = self.client.message.send_image(1, '123456') |
|
124
|
|
|
self.assertEqual(0, result['errcode']) |
|
125
|
|
|
|
|
126
|
|
|
def test_send_voice_message(self): |
|
127
|
|
|
with HTTMock(wechat_api_mock): |
|
128
|
|
|
result = self.client.message.send_voice(1, '123456') |
|
129
|
|
|
self.assertEqual(0, result['errcode']) |
|
130
|
|
|
|
|
131
|
|
|
def test_send_video_message(self): |
|
132
|
|
|
with HTTMock(wechat_api_mock): |
|
133
|
|
|
result = self.client.message.send_video( |
|
134
|
|
|
1, '123456', 'test', 'test' |
|
135
|
|
|
) |
|
136
|
|
|
self.assertEqual(0, result['errcode']) |
|
137
|
|
|
|
|
138
|
|
|
def test_send_music_message(self): |
|
139
|
|
|
with HTTMock(wechat_api_mock): |
|
140
|
|
|
result = self.client.message.send_music( |
|
141
|
|
|
1, 'http://www.qq.com', 'http://www.qq.com', |
|
142
|
|
|
'123456', 'test', 'test' |
|
143
|
|
|
) |
|
144
|
|
|
self.assertEqual(0, result['errcode']) |
|
145
|
|
|
|
|
146
|
|
|
def test_send_articles_message(self): |
|
147
|
|
|
with HTTMock(wechat_api_mock): |
|
148
|
|
|
articles = [{ |
|
149
|
|
|
'title': 'test', |
|
150
|
|
|
'description': 'test', |
|
151
|
|
|
'url': 'http://www.qq.com', |
|
152
|
|
|
'image': 'http://www.qq.com' |
|
153
|
|
|
}] |
|
154
|
|
|
result = self.client.message.send_articles(1, articles) |
|
155
|
|
|
self.assertEqual(0, result['errcode']) |
|
156
|
|
|
|
|
157
|
|
|
def test_send_card_message(self): |
|
158
|
|
|
with HTTMock(wechat_api_mock): |
|
159
|
|
|
result = self.client.message.send_card(1, '123456') |
|
160
|
|
|
self.assertEqual(0, result['errcode']) |
|
161
|
|
|
|
|
162
|
|
|
def test_send_mini_program_page(self): |
|
163
|
|
|
with HTTMock(wechat_api_mock): |
|
164
|
|
|
result = self.client.message.send_mini_program_page(1, {}) |
|
165
|
|
|
self.assertEqual(0, result['errcode']) |
|
166
|
|
|
|
|
167
|
|
|
def test_send_mass_text_message(self): |
|
168
|
|
|
with HTTMock(wechat_api_mock): |
|
169
|
|
|
result = self.client.message.send_mass_text([1], 'test', is_to_all=True) |
|
170
|
|
|
self.assertEqual(0, result['errcode']) |
|
171
|
|
|
|
|
172
|
|
|
def test_send_mass_image_message(self): |
|
173
|
|
|
with HTTMock(wechat_api_mock): |
|
174
|
|
|
result = self.client.message.send_mass_image([1], '123456', is_to_all=True) |
|
175
|
|
|
self.assertEqual(0, result['errcode']) |
|
176
|
|
|
|
|
177
|
|
|
def test_send_mass_voice_message(self): |
|
178
|
|
|
with HTTMock(wechat_api_mock): |
|
179
|
|
|
result = self.client.message.send_mass_voice([1], 'test', is_to_all=True) |
|
180
|
|
|
self.assertEqual(0, result['errcode']) |
|
181
|
|
|
|
|
182
|
|
|
def test_send_mass_video_message(self): |
|
183
|
|
|
with HTTMock(wechat_api_mock): |
|
184
|
|
|
result = self.client.message.send_mass_video([1], 'test', title='title', description='desc', is_to_all=True) |
|
185
|
|
|
self.assertEqual(0, result['errcode']) |
|
186
|
|
|
|
|
187
|
|
|
def test_send_mass_article_message(self): |
|
188
|
|
|
with HTTMock(wechat_api_mock): |
|
189
|
|
|
result = self.client.message.send_mass_article([1], 'test', is_to_all=True) |
|
190
|
|
|
self.assertEqual(0, result['errcode']) |
|
191
|
|
|
|
|
192
|
|
|
def test_send_mass_card_message(self): |
|
193
|
|
|
with HTTMock(wechat_api_mock): |
|
194
|
|
|
result = self.client.message.send_mass_card([1], 'test', is_to_all=True) |
|
195
|
|
|
self.assertEqual(0, result['errcode']) |
|
196
|
|
|
|
|
197
|
|
|
def test_get_mass_message(self): |
|
198
|
|
|
with HTTMock(wechat_api_mock): |
|
199
|
|
|
result = self.client.message.get_mass(201053012) |
|
200
|
|
|
self.assertEqual('SEND_SUCCESS', result['msg_status']) |
|
201
|
|
|
|
|
202
|
|
|
def test_create_menu(self): |
|
203
|
|
|
with HTTMock(wechat_api_mock): |
|
204
|
|
|
result = self.client.menu.create({ |
|
205
|
|
|
'button': [ |
|
206
|
|
|
{ |
|
207
|
|
|
'type': 'click', |
|
208
|
|
|
'name': 'test', |
|
209
|
|
|
'key': 'test' |
|
210
|
|
|
} |
|
211
|
|
|
] |
|
212
|
|
|
}) |
|
213
|
|
|
self.assertEqual(0, result['errcode']) |
|
214
|
|
|
|
|
215
|
|
|
def test_get_menu(self): |
|
216
|
|
|
with HTTMock(wechat_api_mock): |
|
217
|
|
|
menu = self.client.menu.get() |
|
218
|
|
|
self.assertTrue('menu' in menu) |
|
219
|
|
|
|
|
220
|
|
|
def test_delete_menu(self): |
|
221
|
|
|
with HTTMock(wechat_api_mock): |
|
222
|
|
|
result = self.client.menu.delete() |
|
223
|
|
|
self.assertEqual(0, result['errcode']) |
|
224
|
|
|
|
|
225
|
|
|
def test_update_menu(self): |
|
226
|
|
|
with HTTMock(wechat_api_mock): |
|
227
|
|
|
result = self.client.menu.update({ |
|
228
|
|
|
'button': [ |
|
229
|
|
|
{ |
|
230
|
|
|
'type': 'click', |
|
231
|
|
|
'name': 'test', |
|
232
|
|
|
'key': 'test' |
|
233
|
|
|
} |
|
234
|
|
|
] |
|
235
|
|
|
}) |
|
236
|
|
|
self.assertEqual(0, result['errcode']) |
|
237
|
|
|
|
|
238
|
|
|
def test_short_url(self): |
|
239
|
|
|
with HTTMock(wechat_api_mock): |
|
240
|
|
|
result = self.client.misc.short_url('http://www.qq.com') |
|
241
|
|
|
self.assertEqual('http://qq.com', result['short_url']) |
|
242
|
|
|
|
|
243
|
|
|
def test_get_wechat_ips(self): |
|
244
|
|
|
with HTTMock(wechat_api_mock): |
|
245
|
|
|
result = self.client.misc.get_wechat_ips() |
|
246
|
|
|
self.assertEqual(['127.0.0.1'], result) |
|
247
|
|
|
|
|
248
|
|
|
def test_get_user_info(self): |
|
249
|
|
|
with HTTMock(wechat_api_mock): |
|
250
|
|
|
openid = 'o6_bmjrPTlm6_2sgVt7hMZOPfL2M' |
|
251
|
|
|
user = self.client.user.get(openid) |
|
252
|
|
|
self.assertEqual('Band', user['nickname']) |
|
253
|
|
|
|
|
254
|
|
|
def test_get_followers(self): |
|
255
|
|
|
with HTTMock(wechat_api_mock): |
|
256
|
|
|
result = self.client.user.get_followers() |
|
257
|
|
|
self.assertEqual(2, result['total']) |
|
258
|
|
|
self.assertEqual(2, result['count']) |
|
259
|
|
|
|
|
260
|
|
|
def test_iter_followers(self): |
|
261
|
|
|
@urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$', query=r'.*next_openid=[^&]+') |
|
262
|
|
|
def next_openid_mock(url, request): |
|
263
|
|
|
"""伪造第二页的请求""" |
|
264
|
|
|
content = { |
|
265
|
|
|
"total": 2, |
|
266
|
|
|
"count": 0, |
|
267
|
|
|
"next_openid": "" |
|
268
|
|
|
} |
|
269
|
|
|
headers = { |
|
270
|
|
|
'Content-Type': 'application/json' |
|
271
|
|
|
} |
|
272
|
|
|
return response(200, content, headers, request=request) |
|
273
|
|
|
|
|
274
|
|
|
with HTTMock(next_openid_mock, wechat_api_mock): |
|
275
|
|
|
users = list(self.client.user.iter_followers()) |
|
276
|
|
|
self.assertEqual(2, len(users)) |
|
277
|
|
|
self.assertIn("OPENID1", users) |
|
278
|
|
|
self.assertIn("OPENID2", users) |
|
279
|
|
|
|
|
280
|
|
|
def test_update_user_remark(self): |
|
281
|
|
|
with HTTMock(wechat_api_mock): |
|
282
|
|
|
openid = 'openid' |
|
283
|
|
|
remark = 'test' |
|
284
|
|
|
result = self.client.user.update_remark(openid, remark) |
|
285
|
|
|
self.assertEqual(0, result['errcode']) |
|
286
|
|
|
|
|
287
|
|
|
def test_get_user_info_batch(self): |
|
288
|
|
|
user_list = [ |
|
289
|
|
|
{ |
|
290
|
|
|
"openid": "otvxTs4dckWG7imySrJd6jSi0CWE", |
|
291
|
|
|
"lang": "zh-CN" |
|
292
|
|
|
}, |
|
293
|
|
|
{ |
|
294
|
|
|
"openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg", |
|
295
|
|
|
"lang": "zh-CN" |
|
296
|
|
|
} |
|
297
|
|
|
] |
|
298
|
|
|
with HTTMock(wechat_api_mock): |
|
299
|
|
|
result = self.client.user.get_batch(user_list) |
|
300
|
|
|
self.assertEqual(user_list[0]['openid'], result[0]['openid']) |
|
301
|
|
|
self.assertEqual('iWithery', result[0]['nickname']) |
|
302
|
|
|
self.assertEqual(user_list[1]['openid'], result[1]['openid']) |
|
303
|
|
|
|
|
304
|
|
|
def test_get_user_info_batch_openid_list(self): |
|
305
|
|
|
user_list = [ |
|
306
|
|
|
'otvxTs4dckWG7imySrJd6jSi0CWE', |
|
307
|
|
|
'otvxTs_JZ6SEiP0imdhpi50fuSZg' |
|
308
|
|
|
] |
|
309
|
|
|
with HTTMock(wechat_api_mock): |
|
310
|
|
|
result = self.client.user.get_batch(user_list) |
|
311
|
|
|
self.assertEqual(user_list[0], result[0]['openid']) |
|
312
|
|
|
self.assertEqual('iWithery', result[0]['nickname']) |
|
313
|
|
|
self.assertEqual(user_list[1], result[1]['openid']) |
|
314
|
|
|
|
|
315
|
|
|
def test_get_tag_users(self): |
|
316
|
|
|
with HTTMock(wechat_api_mock): |
|
317
|
|
|
result = self.client.tag.get_tag_users(101) |
|
318
|
|
|
self.assertEqual(2, result['count']) |
|
319
|
|
|
|
|
320
|
|
|
def test_iter_tag_users(self): |
|
321
|
|
|
@urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$', path=r'.*user/tag/get') |
|
322
|
|
|
def next_openid_mock(url, request): |
|
323
|
|
|
"""伪造第二页的请求""" |
|
324
|
|
|
data = json.loads(request.body.decode()) |
|
325
|
|
|
if not data.get('next_openid'): |
|
326
|
|
|
return wechat_api_mock(url, request) |
|
327
|
|
|
|
|
328
|
|
|
# 根据拿到的第二页请求响应 是没有data和next_openid的 |
|
329
|
|
|
content = { |
|
330
|
|
|
"count": 0 |
|
331
|
|
|
} |
|
332
|
|
|
headers = { |
|
333
|
|
|
'Content-Type': 'application/json' |
|
334
|
|
|
} |
|
335
|
|
|
return response(200, content, headers, request=request) |
|
336
|
|
|
|
|
337
|
|
|
with HTTMock(next_openid_mock, wechat_api_mock): |
|
338
|
|
|
users = list(self.client.tag.iter_tag_users(101)) |
|
339
|
|
|
self.assertEqual(2, len(users)) |
|
340
|
|
|
self.assertIn("OPENID1", users) |
|
341
|
|
|
self.assertIn("OPENID2", users) |
|
342
|
|
|
|
|
343
|
|
|
def test_create_qrcode(self): |
|
344
|
|
|
data = { |
|
345
|
|
|
'expire_seconds': 1800, |
|
346
|
|
|
'action_name': 'QR_SCENE', |
|
347
|
|
|
'action_info': { |
|
348
|
|
|
'scene': {'scene_id': 123} |
|
349
|
|
|
} |
|
350
|
|
|
} |
|
351
|
|
|
with HTTMock(wechat_api_mock): |
|
352
|
|
|
result = self.client.qrcode.create(data) |
|
353
|
|
|
self.assertEqual(1800, result['expire_seconds']) |
|
354
|
|
|
|
|
355
|
|
|
def test_get_qrcode_url_with_str_ticket(self): |
|
356
|
|
|
ticket = '123' |
|
357
|
|
|
url = self.client.qrcode.get_url(ticket) |
|
358
|
|
|
self.assertEqual( |
|
359
|
|
|
'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=123', |
|
360
|
|
|
url |
|
361
|
|
|
) |
|
362
|
|
|
|
|
363
|
|
|
def test_get_qrcode_url_with_dict_ticket(self): |
|
364
|
|
|
ticket = { |
|
365
|
|
|
'ticket': '123', |
|
366
|
|
|
} |
|
367
|
|
|
url = self.client.qrcode.get_url(ticket) |
|
368
|
|
|
self.assertEqual( |
|
369
|
|
|
'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=123', |
|
370
|
|
|
url |
|
371
|
|
|
) |
|
372
|
|
|
|
|
373
|
|
|
def test_customservice_add_account(self): |
|
374
|
|
|
with HTTMock(wechat_api_mock): |
|
375
|
|
|
result = self.client.customservice.add_account( |
|
376
|
|
|
'test1@test', |
|
377
|
|
|
'test1', |
|
378
|
|
|
'test1' |
|
379
|
|
|
) |
|
380
|
|
|
self.assertEqual(0, result['errcode']) |
|
381
|
|
|
|
|
382
|
|
|
def test_customservice_update_account(self): |
|
383
|
|
|
with HTTMock(wechat_api_mock): |
|
384
|
|
|
result = self.client.customservice.update_account( |
|
385
|
|
|
'test1@test', |
|
386
|
|
|
'test1', |
|
387
|
|
|
'test1' |
|
388
|
|
|
) |
|
389
|
|
|
self.assertEqual(0, result['errcode']) |
|
390
|
|
|
|
|
391
|
|
|
def test_customservice_delete_account(self): |
|
392
|
|
|
with HTTMock(wechat_api_mock): |
|
393
|
|
|
result = self.client.customservice.delete_account( |
|
394
|
|
|
'test1@test', |
|
395
|
|
|
) |
|
396
|
|
|
self.assertEqual(0, result['errcode']) |
|
397
|
|
|
|
|
398
|
|
|
def test_customservice_upload_headimg(self): |
|
399
|
|
|
media_file = six.StringIO('nothing') |
|
400
|
|
|
with HTTMock(wechat_api_mock): |
|
401
|
|
|
result = self.client.customservice.upload_headimg( |
|
402
|
|
|
'test1@test', |
|
403
|
|
|
media_file |
|
404
|
|
|
) |
|
405
|
|
|
self.assertEqual(0, result['errcode']) |
|
406
|
|
|
|
|
407
|
|
|
def test_customservice_get_accounts(self): |
|
408
|
|
|
with HTTMock(wechat_api_mock): |
|
409
|
|
|
result = self.client.customservice.get_accounts() |
|
410
|
|
|
self.assertEqual(2, len(result)) |
|
411
|
|
|
|
|
412
|
|
|
def test_customservice_get_online_accounts(self): |
|
413
|
|
|
with HTTMock(wechat_api_mock): |
|
414
|
|
|
result = self.client.customservice.get_online_accounts() |
|
415
|
|
|
self.assertEqual(2, len(result)) |
|
416
|
|
|
|
|
417
|
|
|
def test_customservice_create_session(self): |
|
418
|
|
|
with HTTMock(wechat_api_mock): |
|
419
|
|
|
result = self.client.customservice.create_session( |
|
420
|
|
|
'openid', |
|
421
|
|
|
'test1@test' |
|
422
|
|
|
) |
|
423
|
|
|
self.assertEqual(0, result['errcode']) |
|
424
|
|
|
|
|
425
|
|
|
def test_customservice_close_session(self): |
|
426
|
|
|
with HTTMock(wechat_api_mock): |
|
427
|
|
|
result = self.client.customservice.close_session( |
|
428
|
|
|
'openid', |
|
429
|
|
|
'test1@test' |
|
430
|
|
|
) |
|
431
|
|
|
self.assertEqual(0, result['errcode']) |
|
432
|
|
|
|
|
433
|
|
|
def test_customservice_get_session(self): |
|
434
|
|
|
with HTTMock(wechat_api_mock): |
|
435
|
|
|
result = self.client.customservice.get_session('openid') |
|
436
|
|
|
self.assertEqual('test1@test', result['kf_account']) |
|
437
|
|
|
|
|
438
|
|
|
def test_customservice_get_session_list(self): |
|
439
|
|
|
with HTTMock(wechat_api_mock): |
|
440
|
|
|
result = self.client.customservice.get_session_list('test1@test') |
|
441
|
|
|
self.assertEqual(2, len(result)) |
|
442
|
|
|
|
|
443
|
|
|
def test_customservice_get_wait_case(self): |
|
444
|
|
|
with HTTMock(wechat_api_mock): |
|
445
|
|
|
result = self.client.customservice.get_wait_case() |
|
446
|
|
|
self.assertEqual(150, result['count']) |
|
447
|
|
|
|
|
448
|
|
|
def test_customservice_get_records(self): |
|
449
|
|
|
with HTTMock(wechat_api_mock): |
|
450
|
|
|
result = self.client.customservice.get_records( |
|
451
|
|
|
123456789, |
|
452
|
|
|
987654321, |
|
453
|
|
|
1 |
|
454
|
|
|
) |
|
455
|
|
|
self.assertEqual(2, len(result['recordlist'])) |
|
456
|
|
|
|
|
457
|
|
|
def test_datacube_get_user_summary(self): |
|
458
|
|
|
with HTTMock(wechat_api_mock): |
|
459
|
|
|
result = self.client.datacube.get_user_summary( |
|
460
|
|
|
'2014-12-06', |
|
461
|
|
|
'2014-12-07' |
|
462
|
|
|
) |
|
463
|
|
|
self.assertEqual(1, len(result)) |
|
464
|
|
|
|
|
465
|
|
|
def test_datacube_get_user_cumulate(self): |
|
466
|
|
|
with HTTMock(wechat_api_mock): |
|
467
|
|
|
result = self.client.datacube.get_user_cumulate( |
|
468
|
|
|
datetime(2014, 12, 6), |
|
469
|
|
|
datetime(2014, 12, 7) |
|
470
|
|
|
) |
|
471
|
|
|
self.assertEqual(1, len(result)) |
|
472
|
|
|
|
|
473
|
|
|
def test_datacube_get_interface_summary(self): |
|
474
|
|
|
with HTTMock(wechat_api_mock): |
|
475
|
|
|
result = self.client.datacube.get_interface_summary( |
|
476
|
|
|
'2014-12-06', |
|
477
|
|
|
'2014-12-07' |
|
478
|
|
|
) |
|
479
|
|
|
self.assertEqual(1, len(result)) |
|
480
|
|
|
|
|
481
|
|
|
def test_datacube_get_interface_summary_hour(self): |
|
482
|
|
|
with HTTMock(wechat_api_mock): |
|
483
|
|
|
result = self.client.datacube.get_interface_summary_hour( |
|
484
|
|
|
'2014-12-06', |
|
485
|
|
|
'2014-12-07' |
|
486
|
|
|
) |
|
487
|
|
|
self.assertEqual(1, len(result)) |
|
488
|
|
|
|
|
489
|
|
|
def test_datacube_get_article_summary(self): |
|
490
|
|
|
with HTTMock(wechat_api_mock): |
|
491
|
|
|
result = self.client.datacube.get_article_summary( |
|
492
|
|
|
'2014-12-06', |
|
493
|
|
|
'2014-12-07' |
|
494
|
|
|
) |
|
495
|
|
|
self.assertEqual(1, len(result)) |
|
496
|
|
|
|
|
497
|
|
|
def test_datacube_get_article_total(self): |
|
498
|
|
|
with HTTMock(wechat_api_mock): |
|
499
|
|
|
result = self.client.datacube.get_article_total( |
|
500
|
|
|
'2014-12-06', |
|
501
|
|
|
'2014-12-07' |
|
502
|
|
|
) |
|
503
|
|
|
self.assertEqual(1, len(result)) |
|
504
|
|
|
|
|
505
|
|
|
def test_datacube_get_user_read(self): |
|
506
|
|
|
with HTTMock(wechat_api_mock): |
|
507
|
|
|
result = self.client.datacube.get_user_read( |
|
508
|
|
|
'2014-12-06', |
|
509
|
|
|
'2014-12-07' |
|
510
|
|
|
) |
|
511
|
|
|
self.assertEqual(1, len(result)) |
|
512
|
|
|
|
|
513
|
|
|
def test_datacube_get_user_read_hour(self): |
|
514
|
|
|
with HTTMock(wechat_api_mock): |
|
515
|
|
|
result = self.client.datacube.get_user_read_hour( |
|
516
|
|
|
'2014-12-06', |
|
517
|
|
|
'2014-12-07' |
|
518
|
|
|
) |
|
519
|
|
|
self.assertEqual(1, len(result)) |
|
520
|
|
|
|
|
521
|
|
|
def test_datacube_get_user_share(self): |
|
522
|
|
|
with HTTMock(wechat_api_mock): |
|
523
|
|
|
result = self.client.datacube.get_user_share( |
|
524
|
|
|
'2014-12-06', |
|
525
|
|
|
'2014-12-07' |
|
526
|
|
|
) |
|
527
|
|
|
self.assertEqual(2, len(result)) |
|
528
|
|
|
|
|
529
|
|
|
def test_datacube_get_user_share_hour(self): |
|
530
|
|
|
with HTTMock(wechat_api_mock): |
|
531
|
|
|
result = self.client.datacube.get_user_share_hour( |
|
532
|
|
|
'2014-12-06', |
|
533
|
|
|
'2014-12-07' |
|
534
|
|
|
) |
|
535
|
|
|
self.assertEqual(1, len(result)) |
|
536
|
|
|
|
|
537
|
|
|
def test_datacube_get_upstream_msg(self): |
|
538
|
|
|
with HTTMock(wechat_api_mock): |
|
539
|
|
|
result = self.client.datacube.get_upstream_msg( |
|
540
|
|
|
'2014-12-06', |
|
541
|
|
|
'2014-12-07' |
|
542
|
|
|
) |
|
543
|
|
|
self.assertEqual(1, len(result)) |
|
544
|
|
|
|
|
545
|
|
|
def test_datacube_get_upstream_msg_hour(self): |
|
546
|
|
|
with HTTMock(wechat_api_mock): |
|
547
|
|
|
result = self.client.datacube.get_upstream_msg_hour( |
|
548
|
|
|
'2014-12-06', |
|
549
|
|
|
'2014-12-07' |
|
550
|
|
|
) |
|
551
|
|
|
self.assertEqual(1, len(result)) |
|
552
|
|
|
|
|
553
|
|
|
def test_datacube_get_upstream_msg_week(self): |
|
554
|
|
|
with HTTMock(wechat_api_mock): |
|
555
|
|
|
result = self.client.datacube.get_upstream_msg_week( |
|
556
|
|
|
'2014-12-06', |
|
557
|
|
|
'2014-12-07' |
|
558
|
|
|
) |
|
559
|
|
|
self.assertEqual(1, len(result)) |
|
560
|
|
|
|
|
561
|
|
|
def test_datacube_get_upstream_msg_month(self): |
|
562
|
|
|
with HTTMock(wechat_api_mock): |
|
563
|
|
|
result = self.client.datacube.get_upstream_msg_month( |
|
564
|
|
|
'2014-12-06', |
|
565
|
|
|
'2014-12-07' |
|
566
|
|
|
) |
|
567
|
|
|
self.assertEqual(1, len(result)) |
|
568
|
|
|
|
|
569
|
|
|
def test_datacube_get_upstream_msg_dist(self): |
|
570
|
|
|
with HTTMock(wechat_api_mock): |
|
571
|
|
|
result = self.client.datacube.get_upstream_msg_dist( |
|
572
|
|
|
'2014-12-06', |
|
573
|
|
|
'2014-12-07' |
|
574
|
|
|
) |
|
575
|
|
|
self.assertEqual(1, len(result)) |
|
576
|
|
|
|
|
577
|
|
|
def test_datacube_get_upstream_msg_dist_week(self): |
|
578
|
|
|
with HTTMock(wechat_api_mock): |
|
579
|
|
|
result = self.client.datacube.get_upstream_msg_dist_week( |
|
580
|
|
|
'2014-12-06', |
|
581
|
|
|
'2014-12-07' |
|
582
|
|
|
) |
|
583
|
|
|
self.assertEqual(1, len(result)) |
|
584
|
|
|
|
|
585
|
|
|
def test_datacube_get_upstream_msg_dist_month(self): |
|
586
|
|
|
with HTTMock(wechat_api_mock): |
|
587
|
|
|
result = self.client.datacube.get_upstream_msg_dist_month( |
|
588
|
|
|
'2014-12-06', |
|
589
|
|
|
'2014-12-07' |
|
590
|
|
|
) |
|
591
|
|
|
self.assertEqual(1, len(result)) |
|
592
|
|
|
|
|
593
|
|
|
def test_jsapi_get_ticket_response(self): |
|
594
|
|
|
with HTTMock(wechat_api_mock): |
|
595
|
|
|
result = self.client.jsapi.get_ticket() |
|
596
|
|
|
self.assertEqual( |
|
597
|
|
|
'bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA', # NOQA |
|
598
|
|
|
result['ticket'] |
|
599
|
|
|
) |
|
600
|
|
|
self.assertEqual(7200, result['expires_in']) |
|
601
|
|
|
|
|
602
|
|
|
def test_jsapi_get_jsapi_signature(self): |
|
603
|
|
|
noncestr = 'Wm3WZYTPz0wzccnW' |
|
604
|
|
|
ticket = 'sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg' # NOQA |
|
605
|
|
|
timestamp = 1414587457 |
|
606
|
|
|
url = 'http://mp.weixin.qq.com?params=value' |
|
607
|
|
|
signature = self.client.jsapi.get_jsapi_signature( |
|
608
|
|
|
noncestr, |
|
609
|
|
|
ticket, |
|
610
|
|
|
timestamp, |
|
611
|
|
|
url |
|
612
|
|
|
) |
|
613
|
|
|
self.assertEqual( |
|
614
|
|
|
'0f9de62fce790f9a083d5c99e95740ceb90c27ed', |
|
615
|
|
|
signature |
|
616
|
|
|
) |
|
617
|
|
|
|
|
618
|
|
|
def test_jsapi_get_jsapi_card_ticket(self): |
|
619
|
|
|
"""card_ticket 与 jsapi_ticket 的 api 都相同,除了请求参数 type 为 wx_card |
|
620
|
|
|
所以这里使用与 `test_jsapi_get_ticket` 相同的测试文件""" |
|
621
|
|
|
with HTTMock(wechat_api_mock): |
|
622
|
|
|
ticket = self.client.jsapi.get_jsapi_card_ticket() |
|
623
|
|
|
self.assertEqual( |
|
624
|
|
|
'bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA', # NOQA |
|
625
|
|
|
ticket |
|
626
|
|
|
) |
|
627
|
|
|
self.assertTrue( |
|
628
|
|
|
7200 < self.client.session.get('{0}_jsapi_card_ticket_expires_at'.format(self.client.appid)) |
|
629
|
|
|
) |
|
630
|
|
|
self.assertEqual( |
|
631
|
|
|
self.client.session.get('{0}_jsapi_card_ticket'.format(self.client.appid)), |
|
632
|
|
|
'bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA', |
|
633
|
|
|
) |
|
634
|
|
|
|
|
635
|
|
|
def test_jsapi_get_jsapi_card_params(self): |
|
636
|
|
|
"""微信签名测试工具:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=cardsign""" |
|
637
|
|
|
noncestr = 'Wm3WZYTPz0wzccnW' |
|
638
|
|
|
card_ticket = 'sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg' |
|
639
|
|
|
timestamp = 1414587457 |
|
640
|
|
|
signature_dict = self.client.jsapi.get_jsapi_card_params( |
|
641
|
|
|
noncestr=noncestr, |
|
642
|
|
|
card_ticket=card_ticket, |
|
643
|
|
|
timestamp=timestamp, |
|
644
|
|
|
card_type='GROUPON', |
|
645
|
|
|
) |
|
646
|
|
|
self.assertEqual( |
|
647
|
|
|
{'card_type': 'GROUPON', 'noncestr': 'Wm3WZYTPz0wzccnW', |
|
648
|
|
|
'api_ticket': 'sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg', |
|
649
|
|
|
'appid': '123456', 'timestamp': 1414587457, 'sign': 'c47b1fb500eb35d8f2f9b9375b4491089df953e2'}, |
|
650
|
|
|
signature_dict |
|
651
|
|
|
) |
|
652
|
|
|
|
|
653
|
|
|
def test_menu_get_menu_info(self): |
|
654
|
|
|
with HTTMock(wechat_api_mock): |
|
655
|
|
|
menu_info = self.client.menu.get_menu_info() |
|
656
|
|
|
self.assertEqual(1, menu_info['is_menu_open']) |
|
657
|
|
|
|
|
658
|
|
|
def test_message_get_autoreply_info(self): |
|
659
|
|
|
with HTTMock(wechat_api_mock): |
|
660
|
|
|
autoreply = self.client.message.get_autoreply_info() |
|
661
|
|
|
self.assertEqual(1, autoreply['is_autoreply_open']) |
|
662
|
|
|
|
|
663
|
|
|
def test_shakearound_apply_device_id(self): |
|
664
|
|
|
with HTTMock(wechat_api_mock): |
|
665
|
|
|
res = self.client.shakearound.apply_device_id(1, 'test') |
|
666
|
|
|
self.assertEqual(123, res['apply_id']) |
|
667
|
|
|
|
|
668
|
|
|
def test_shakearound_update_device(self): |
|
669
|
|
|
with HTTMock(wechat_api_mock): |
|
670
|
|
|
res = self.client.shakearound.update_device('1234', comment='test') |
|
671
|
|
|
self.assertEqual(0, res['errcode']) |
|
672
|
|
|
|
|
673
|
|
|
def test_shakearound_bind_device_location(self): |
|
674
|
|
|
with HTTMock(wechat_api_mock): |
|
675
|
|
|
res = self.client.shakearound.bind_device_location(123, 1234) |
|
676
|
|
|
self.assertEqual(0, res['errcode']) |
|
677
|
|
|
|
|
678
|
|
|
def test_shakearound_search_device(self): |
|
679
|
|
|
with HTTMock(wechat_api_mock): |
|
680
|
|
|
res = self.client.shakearound.search_device(apply_id=123) |
|
681
|
|
|
self.assertEqual(151, res['total_count']) |
|
682
|
|
|
self.assertEqual(2, len(res['devices'])) |
|
683
|
|
|
|
|
684
|
|
|
def test_shakearound_add_page(self): |
|
685
|
|
|
with HTTMock(wechat_api_mock): |
|
686
|
|
|
res = self.client.shakearound.add_page( |
|
687
|
|
|
'test', |
|
688
|
|
|
'test', |
|
689
|
|
|
'http://www.qq.com', |
|
690
|
|
|
'http://www.qq.com' |
|
691
|
|
|
) |
|
692
|
|
|
self.assertEqual(28840, res['page_id']) |
|
693
|
|
|
|
|
694
|
|
|
def test_shakearound_update_page(self): |
|
695
|
|
|
with HTTMock(wechat_api_mock): |
|
696
|
|
|
res = self.client.shakearound.update_page( |
|
697
|
|
|
123, |
|
698
|
|
|
'test', |
|
699
|
|
|
'test', |
|
700
|
|
|
'http://www.qq.com', |
|
701
|
|
|
'http://www.qq.com' |
|
702
|
|
|
) |
|
703
|
|
|
self.assertEqual(28840, res['page_id']) |
|
704
|
|
|
|
|
705
|
|
|
def test_shakearound_delete_page(self): |
|
706
|
|
|
with HTTMock(wechat_api_mock): |
|
707
|
|
|
res = self.client.shakearound.delete_page(123) |
|
708
|
|
|
self.assertEqual(0, res['errcode']) |
|
709
|
|
|
|
|
710
|
|
|
def test_shakearound_search_page(self): |
|
711
|
|
|
with HTTMock(wechat_api_mock): |
|
712
|
|
|
res = self.client.shakearound.search_pages(123) |
|
713
|
|
|
self.assertEqual(2, res['total_count']) |
|
714
|
|
|
self.assertEqual(2, len(res['pages'])) |
|
715
|
|
|
|
|
716
|
|
|
def test_shakearound_add_material(self): |
|
717
|
|
|
with HTTMock(wechat_api_mock): |
|
718
|
|
|
media_file = six.StringIO('nothing') |
|
719
|
|
|
res = self.client.shakearound.add_material(media_file, 'icon') |
|
720
|
|
|
self.assertEqual( |
|
721
|
|
|
'http://shp.qpic.cn/wechat_shakearound_pic/0/1428377032e9dd2797018cad79186e03e8c5aec8dc/120', # NOQA |
|
722
|
|
|
res['pic_url'] |
|
723
|
|
|
) |
|
724
|
|
|
|
|
725
|
|
|
def test_shakearound_bind_device_pages(self): |
|
726
|
|
|
with HTTMock(wechat_api_mock): |
|
727
|
|
|
res = self.client.shakearound.bind_device_pages( |
|
728
|
|
|
123, |
|
729
|
|
|
1, |
|
730
|
|
|
1, |
|
731
|
|
|
1234 |
|
732
|
|
|
) |
|
733
|
|
|
self.assertEqual(0, res['errcode']) |
|
734
|
|
|
|
|
735
|
|
|
def test_shakearound_get_shake_info(self): |
|
736
|
|
|
with HTTMock(wechat_api_mock): |
|
737
|
|
|
res = self.client.shakearound.get_shake_info('123456') |
|
738
|
|
|
self.assertEqual(14211, res['page_id']) |
|
739
|
|
|
self.assertEqual('oVDmXjp7y8aG2AlBuRpMZTb1-cmA', res['openid']) |
|
740
|
|
|
|
|
741
|
|
|
def test_shakearound_get_device_statistics(self): |
|
742
|
|
|
with HTTMock(wechat_api_mock): |
|
743
|
|
|
res = self.client.shakearound.get_device_statistics( |
|
744
|
|
|
'2015-04-01 00:00:00', |
|
745
|
|
|
'2015-04-17 00:00:00', |
|
746
|
|
|
1234 |
|
747
|
|
|
) |
|
748
|
|
|
self.assertEqual(2, len(res)) |
|
749
|
|
|
|
|
750
|
|
|
def test_shakearound_get_page_statistics(self): |
|
751
|
|
|
with HTTMock(wechat_api_mock): |
|
752
|
|
|
res = self.client.shakearound.get_page_statistics( |
|
753
|
|
|
'2015-04-01 00:00:00', |
|
754
|
|
|
'2015-04-17 00:00:00', |
|
755
|
|
|
1234 |
|
756
|
|
|
) |
|
757
|
|
|
self.assertEqual(2, len(res)) |
|
758
|
|
|
|
|
759
|
|
|
def test_material_get_count(self): |
|
760
|
|
|
with HTTMock(wechat_api_mock): |
|
761
|
|
|
res = self.client.material.get_count() |
|
762
|
|
|
self.assertEqual(1, res['voice_count']) |
|
763
|
|
|
self.assertEqual(2, res['video_count']) |
|
764
|
|
|
self.assertEqual(3, res['image_count']) |
|
765
|
|
|
self.assertEqual(4, res['news_count']) |
|
766
|
|
|
|
|
767
|
|
|
def test_shakearound_get_apply_status(self): |
|
768
|
|
|
with HTTMock(wechat_api_mock): |
|
769
|
|
|
res = self.client.shakearound.get_apply_status( |
|
770
|
|
|
1234 |
|
771
|
|
|
) |
|
772
|
|
|
self.assertEqual(4, len(res)) |
|
773
|
|
|
|
|
774
|
|
View Code Duplication |
def test_reraise_requests_exception(self): |
|
|
|
|
|
|
775
|
|
|
@urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$') |
|
776
|
|
|
def _wechat_api_mock(url, request): |
|
777
|
|
|
return {'status_code': 404, 'content': '404 not found'} |
|
778
|
|
|
|
|
779
|
|
|
try: |
|
780
|
|
|
with HTTMock(_wechat_api_mock): |
|
781
|
|
|
self.client.material.get_count() |
|
782
|
|
|
except WeChatClientException as e: |
|
783
|
|
|
self.assertEqual(404, e.response.status_code) |
|
784
|
|
|
|
|
785
|
|
|
def test_wifi_list_shops(self): |
|
786
|
|
|
with HTTMock(wechat_api_mock): |
|
787
|
|
|
res = self.client.wifi.list_shops() |
|
788
|
|
|
self.assertEqual(16, res['totalcount']) |
|
789
|
|
|
self.assertEqual(1, res['pageindex']) |
|
790
|
|
|
|
|
791
|
|
|
def test_wifi_get_shop(self): |
|
792
|
|
|
with HTTMock(wechat_api_mock): |
|
793
|
|
|
res = self.client.wifi.get_shop(1) |
|
794
|
|
|
self.assertEqual(1, res['bar_type']) |
|
795
|
|
|
self.assertEqual(2, res['ap_count']) |
|
796
|
|
|
|
|
797
|
|
|
def test_wifi_add_device(self): |
|
798
|
|
|
with HTTMock(wechat_api_mock): |
|
799
|
|
|
res = self.client.wifi.add_device( |
|
800
|
|
|
123, 'WX-test', '12345678', '00:1f:7a:ad:5c:a8' |
|
801
|
|
|
) |
|
802
|
|
|
self.assertEqual(0, res['errcode']) |
|
803
|
|
|
|
|
804
|
|
|
def test_wifi_list_devices(self): |
|
805
|
|
|
with HTTMock(wechat_api_mock): |
|
806
|
|
|
res = self.client.wifi.list_devices() |
|
807
|
|
|
self.assertEqual(2, res['totalcount']) |
|
808
|
|
|
self.assertEqual(1, res['pageindex']) |
|
809
|
|
|
|
|
810
|
|
|
def test_wifi_delete_device(self): |
|
811
|
|
|
with HTTMock(wechat_api_mock): |
|
812
|
|
|
res = self.client.wifi.delete_device('00:1f:7a:ad:5c:a8') |
|
813
|
|
|
self.assertEqual(0, res['errcode']) |
|
814
|
|
|
|
|
815
|
|
|
def test_wifi_get_qrcode_url(self): |
|
816
|
|
|
with HTTMock(wechat_api_mock): |
|
817
|
|
|
qrcode_url = self.client.wifi.get_qrcode_url(123, 0) |
|
818
|
|
|
self.assertEqual('http://www.qq.com', qrcode_url) |
|
819
|
|
|
|
|
820
|
|
|
def test_wifi_set_homepage(self): |
|
821
|
|
|
with HTTMock(wechat_api_mock): |
|
822
|
|
|
res = self.client.wifi.set_homepage(123, 0) |
|
823
|
|
|
self.assertEqual(0, res['errcode']) |
|
824
|
|
|
|
|
825
|
|
|
def test_wifi_get_homepage(self): |
|
826
|
|
|
with HTTMock(wechat_api_mock): |
|
827
|
|
|
res = self.client.wifi.get_homepage(429620) |
|
828
|
|
|
self.assertEqual(1, res['template_id']) |
|
829
|
|
|
self.assertEqual('http://wifi.weixin.qq.com/', res['url']) |
|
830
|
|
|
|
|
831
|
|
|
def test_wifi_list_statistics(self): |
|
832
|
|
|
with HTTMock(wechat_api_mock): |
|
833
|
|
|
res = self.client.wifi.list_statistics('2015-05-01', '2015-05-02') |
|
834
|
|
|
self.assertEqual(2, len(res)) |
|
835
|
|
|
|
|
836
|
|
|
def test_upload_mass_image(self): |
|
837
|
|
|
media_file = six.StringIO('nothing') |
|
838
|
|
|
with HTTMock(wechat_api_mock): |
|
839
|
|
|
res = self.client.media.upload_mass_image(media_file) |
|
840
|
|
|
self.assertEqual( |
|
841
|
|
|
'http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0', # NOQA |
|
842
|
|
|
res |
|
843
|
|
|
) |
|
844
|
|
|
|
|
845
|
|
|
def test_scan_get_merchant_info(self): |
|
846
|
|
|
with HTTMock(wechat_api_mock): |
|
847
|
|
|
res = self.client.scan.get_merchant_info() |
|
848
|
|
|
self.assertEqual(8888, res['verified_firm_code_list'][0]) |
|
849
|
|
|
|
|
850
|
|
|
def test_scan_create_product(self): |
|
851
|
|
|
with HTTMock(wechat_api_mock): |
|
852
|
|
|
res = self.client.scan.create_product({ |
|
853
|
|
|
"keystandard": "ean13", |
|
854
|
|
|
"keystr": "6900000000000", |
|
855
|
|
|
}) |
|
856
|
|
|
self.assertEqual('5g0B4A90aqc', res['pid']) |
|
857
|
|
|
|
|
858
|
|
|
def test_scan_publish_product(self): |
|
859
|
|
|
with HTTMock(wechat_api_mock): |
|
860
|
|
|
res = self.client.scan.publish_product('ean13', '6900873042720') |
|
861
|
|
|
self.assertEqual(0, res['errcode']) |
|
862
|
|
|
|
|
863
|
|
|
def test_scan_unpublish_product(self): |
|
864
|
|
|
with HTTMock(wechat_api_mock): |
|
865
|
|
|
res = self.client.scan.unpublish_product('ean13', '6900873042720') |
|
866
|
|
|
self.assertEqual(0, res['errcode']) |
|
867
|
|
|
|
|
868
|
|
|
def test_scan_set_test_whitelist(self): |
|
869
|
|
|
with HTTMock(wechat_api_mock): |
|
870
|
|
|
res = self.client.scan.set_test_whitelist(['openid1'], ['messense']) |
|
871
|
|
|
self.assertEqual(0, res['errcode']) |
|
872
|
|
|
|
|
873
|
|
|
def test_scan_get_product(self): |
|
874
|
|
|
with HTTMock(wechat_api_mock): |
|
875
|
|
|
res = self.client.scan.get_product('ean13', '6900873042720') |
|
876
|
|
|
assert 'brand_info' in res |
|
877
|
|
|
|
|
878
|
|
|
def test_scan_list_product(self): |
|
879
|
|
|
with HTTMock(wechat_api_mock): |
|
880
|
|
|
res = self.client.scan.list_product() |
|
881
|
|
|
self.assertEqual(2, res['total']) |
|
882
|
|
|
|
|
883
|
|
|
def test_scan_update_product(self): |
|
884
|
|
|
with HTTMock(wechat_api_mock): |
|
885
|
|
|
res = self.client.scan.update_product({ |
|
886
|
|
|
"keystandard": "ean13", |
|
887
|
|
|
"keystr": "6900000000000", |
|
888
|
|
|
}) |
|
889
|
|
|
self.assertEqual('5g0B4A90aqc', res['pid']) |
|
890
|
|
|
|
|
891
|
|
|
def test_scan_clear_product(self): |
|
892
|
|
|
with HTTMock(wechat_api_mock): |
|
893
|
|
|
res = self.client.scan.clear_product('ean13', '6900873042720') |
|
894
|
|
|
self.assertEqual(0, res['errcode']) |
|
895
|
|
|
|
|
896
|
|
|
def test_scan_check_ticket(self): |
|
897
|
|
|
with HTTMock(wechat_api_mock): |
|
898
|
|
|
res = self.client.scan.check_ticket('Ym1haDlvNXJqY3Ru1') |
|
899
|
|
|
self.assertEqual('otAzGjrS4AYCmeJM1GhEOcHXXTAo', res['openid']) |
|
900
|
|
|
|
|
901
|
|
|
def test_change_openid(self): |
|
902
|
|
|
with HTTMock(wechat_api_mock): |
|
903
|
|
|
res = self.client.user.change_openid( |
|
904
|
|
|
'xxxxx', ['oEmYbwN-n24jxvk4Sox81qedINkQ', 'oEmYbwH9uVd4RKJk7ZZg6SzL6tTo'] |
|
905
|
|
|
) |
|
906
|
|
|
self.assertEqual(2, len(res)) |
|
907
|
|
|
self.assertEqual('o2FwqwI9xCsVadFah_HtpPfaR-X4', res[0]['new_openid']) |
|
908
|
|
|
self.assertEqual('ori_openid error', res[1]['err_msg']) |
|
909
|
|
|
|
|
910
|
|
|
def test_code_to_session(self): |
|
911
|
|
|
with HTTMock(wechat_api_mock): |
|
912
|
|
|
res = self.client.wxa.code_to_session('023dUeGW1oeGOZ0JXvHW1SDVFW1dUeGu') |
|
913
|
|
|
self.assertIn('session_key', res) |
|
914
|
|
|
self.assertEqual('D1ZWEygStjuLCnZ9IN2l4Q==', res['session_key']) |
|
915
|
|
|
self.assertEqual('o16wA0b4AZKzgVJR3MBwoUdTfU_E', res['openid']) |
|
916
|
|
|
self.assertEqual('or4zX05h_Ykt4ju0TUfx3CQsvfTo', res['unionid']) |
|
917
|
|
|
|