def test_unauthorized_delete(self): u = WechatUser(openid='123', nickname='456') u.save() self.client.force_login(u) resp = self.client.delete( reverse('remind-detail', args=(self.r.pk.hex, ))) self.assertEqual(resp.status_code, 403)
def test_delete(self): u = WechatUser(openid='miao', nickname='456') u.save() self.client.force_login(u) resp = self.client.get(reverse('remind_delete', args=(self.r.pk.hex,))) self.assertEqual(resp.status_code, 302) self.assertEqual(resp.url, reverse('remind_list'))
def setUp(self): self.user = WechatUser(openid='FromUser', nickname='UserName') self.user.save() self.settings(WX_APPID='123').enable() wechat_client.appid = '123' # Disable scheduler post_save.disconnect(dispatch_uid='update-scheduler')
def test_participant_delete(self): WechatUser(openid='miao', nickname='miaomiaomiao').save() self.r.add_participant('123') u = WechatUser(openid='123', nickname='456') u.save() self.client.force_login(u) resp = self.client.delete(reverse('remind-detail', args=(self.r.pk.hex,))) self.assertEqual(resp.status_code, 204)
def setUp(self): self.user = WechatUser(openid='miao', nickname='456') self.user.save() self.r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc='吃饭饭') self.r.save()
class SharePostTestCase(TestCase): def setUp(self): self.user = WechatUser(openid='miao', nickname='miaomiao', subscribe=True, last_login=timezone.now()) self.user.save() @with_httmock(access_token_mock, create_qrcode_mock, get_qr_image_mock) def test_one_line_description(self): r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc='吃饭饭') image = draw_post(r, self.user) if DISPLAY_POST: image.show() @with_httmock(access_token_mock, create_qrcode_mock, get_qr_image_mock) def test_two_lines_description(self): r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc='吃饭饭' * 5) image = draw_post(r, self.user) if DISPLAY_POST: image.show() @with_httmock(access_token_mock, create_qrcode_mock, get_qr_image_mock) def test_many_lines_description(self): r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc='吃饭饭' * 50) image = draw_post(r, self.user) if DISPLAY_POST: image.show() @with_httmock(access_token_mock, create_qrcode_mock, get_qr_image_mock) def test_lines_with_carriage(self): desc = """2018 NEO编程日 第1站 时间:2018年1月13日13:00(签到)—18:30(下午)""" + \ """\n地点:上海浦东新区金科路长泰广场C座12层 """ r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc=desc) image = draw_post(r, self.user) if DISPLAY_POST: image.show()
def test_click_event_for_remind_today(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[CLICK]]></Event> <EventKey><![CDATA[time_remind_today]]></EventKey> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn('今天没有提醒', resp_xml) WechatUser(openid='abc', nickname='abc').save() r = Remind(time=timezone.now(), owner_id=self.user.pk, event='睡觉') r.save() resp_xml = handle_message(wechat_msg) self.assertIn(r.title(), resp_xml) self.assertIn(r.local_time_string('G:i'), resp_xml) r = Remind(time=timezone.now(), owner_id=self.user.pk, event='吃饭', participants=['abc']) r.save() self.assertEqual( WechatUser.objects.get(pk='abc').get_time_reminds().first(), r)
class RemindViewTestCase(TestCase): def setUp(self): self.user = WechatUser(openid='miao', nickname='456') self.user.save() self.r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc='吃饭饭') self.r.save() def test_anonymous_delete(self): resp = self.client.delete(reverse('remind-detail', args=(self.r.pk.hex, )), HTTP_X_REFERER='abc.com/#def') # self.assertEqual(resp.status_code, 302) self.assertEqual(resp.status_code, 401) self.assertIn('//open.weixin.qq.com/connect/oauth2/authorize', resp.get('WWW-Authenticate', '')) self.assertIn('state=abc.com%2F%23def', resp.get('WWW-Authenticate', '')) def test_unauthorized_delete(self): u = WechatUser(openid='123', nickname='456') u.save() self.client.force_login(u) resp = self.client.delete( reverse('remind-detail', args=(self.r.pk.hex, ))) self.assertEqual(resp.status_code, 403) def test_participant_delete(self): u = WechatUser(openid='123', nickname='456') u.save() self.r.add_participant('123') self.client.force_login(u) resp = self.client.delete( reverse('remind-detail', args=(self.r.pk.hex, ))) self.assertEqual(resp.status_code, 204) # self.assertEqual(resp.url, reverse('remind_list')) def test_delete(self): self.client.force_login(self.user) resp = self.client.delete( reverse('remind-detail', args=(self.r.pk.hex, ))) self.assertEqual(resp.status_code, 204)
def test_add_add_participant(self): WechatUser(openid='abc', nickname='abcabc', subscribe=True).save() r = Remind(time=timezone.now(), owner_id='miao', event='吃饭', desc='吃饭饭') r.save() r.add_participant('abc') r.add_participant('abc') self.assertEqual(r.participants, ['abc'])
class LoginTestCase(TestCase): def setUp(self): post_save.disconnect(dispatch_uid='update-scheduler') self.user = WechatUser(openid='fake_user', nickname='fake_user') self.user.save() # Disable scheduler def test_unlogged_in_user(self): resp = self.client.get(reverse('remind-list')) self.assertEqual(resp.status_code, 401) self.assertIn('//open.weixin.qq.com/connect/oauth2/authorize', resp.get('WWW-Authenticate', '')) resp = self.client.get(reverse('oauth_complete')) self.assertEqual(resp.status_code, 403) def test_log_in_existing_user(self): with HTTMock(oauth_access_token_mock()): resp = self.client.get(reverse('oauth_complete'), data={ 'code': 123, 'state': 'remind-list-blah' }) self.assertEqual(self.client.session['_auth_user_id'], self.user.pk) self.assertEqual(resp.status_code, 302) self.assertEqual('remind-list-blah', resp.url) def test_guest(self): guest_id = 'fake_user1xxx' with HTTMock(oauth_access_token_mock(guest_id)): resp = self.client.get(reverse('oauth_complete'), data={ 'code': 123, 'state': 'remind-list-blah' }) self.assertEqual(self.client.session['_auth_user_id'], guest_id) self.assertEqual(resp.status_code, 302) self.assertEqual('remind-list-blah', resp.url) self.assertFalse(WechatUser.objects.filter(pk=guest_id).exists())
def setUp(self): u = WechatUser(openid='miao', nickname='miaomiao', subscribe=True, last_login=timezone.now()) u.save()
def setUp(self): post_save.disconnect(dispatch_uid='update-scheduler') self.user = WechatUser(openid='fake_user', nickname='fake_user') self.user.save()
class MessageHandlerTestCase(TestCase): # Common strings remind_desc = '提醒我明天上午十点开会' instructions_to_use = '如需设置提醒' remind_base_on_location = '基于地理位置的提醒' mock = HTTMock(access_token_mock, semantic_parser_mock) @classmethod def setUpTestData(cls): cls.mock.__enter__() def setUp(self): self.user = WechatUser(openid='FromUser', nickname='UserName') self.user.save() self.settings(WX_APPID='123').enable() wechat_client.appid = '123' # Disable scheduler post_save.disconnect(dispatch_uid='update-scheduler') def build_wechat_msg(self, req_text): return parse_message(req_text) def test_text(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <MsgId>1234567890123456</MsgId> </xml> """ % self.remind_desc wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn('时间:', resp_xml) self.assertNotIn('重复:', resp_xml) def test_repeat_text(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <MsgId>1234567890123456</MsgId> </xml> """ % '每月20号提醒我还信用卡' wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn('时间:', resp_xml) self.assertIn('重复:', resp_xml) self.assertIn('每月', resp_xml) def test_image(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn(self.instructions_to_use, resp_xml) def test_voice(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <Format><![CDATA[Format]]></Format> <Recognition><![CDATA[%s]]></Recognition> <MsgId>1234567890123456</MsgId> </xml> """ % self.remind_desc wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn('时间:', resp_xml) def test_video(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[video]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId> <MsgId>1234567890123456</MsgId> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn(self.instructions_to_use, resp_xml) def test_shortvideo(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[shortvideo]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId> <MsgId>1234567890123456</MsgId> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn(self.instructions_to_use, resp_xml) def test_location(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn(self.remind_base_on_location, resp_xml) def test_link(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[link]]></MsgType> <Title><![CDATA[公众平台官网链接]]></Title> <Description><![CDATA[公众平台官网链接]]></Description> <Url><![CDATA[url]]></Url> <MsgId>1234567890123456</MsgId> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn(self.instructions_to_use, resp_xml) def test_subscribe_event(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn('直接输入文字或者语音就可以快速创建提醒', resp_xml) self.user.refresh_from_db() self.assertTrue(self.user.subscribe) def test_unsubscribe_event(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[unsubscribe]]></Event> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.user.refresh_from_db() self.assertFalse(self.user.subscribe) def test_location_event(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[LOCATION]]></Event> <Latitude>23.137466</Latitude> <Longitude>113.352425</Longitude> <Precision>119.385040</Precision> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn(self.remind_base_on_location, resp_xml) def test_click_event_for_remind_today(self): req_text = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[CLICK]]></Event> <EventKey><![CDATA[time_remind_today]]></EventKey> </xml> """ wechat_msg = self.build_wechat_msg(req_text) resp_xml = handle_message(wechat_msg) self.assertIn('今天没有提醒', resp_xml) WechatUser(openid='abc', nickname='abc').save() r = Remind(time=timezone.now(), owner_id=self.user.pk, event='睡觉') r.save() resp_xml = handle_message(wechat_msg) self.assertIn(r.title(), resp_xml) self.assertIn(r.local_time_string('G:i'), resp_xml) r = Remind(time=timezone.now(), owner_id=self.user.pk, event='吃饭', participants=['abc']) r.save() self.assertEqual(WechatUser.objects.get(pk='abc').get_time_reminds().first(), r)
def test_unauthorized_delete(self): u = WechatUser(openid='123', nickname='456') u.save() self.client.force_login(u) resp = self.client.delete(reverse('remind-detail', args=(self.r.pk.hex,))) self.assertEqual(resp.status_code, 403)
class LoginTestCase(TestCase): def setUp(self): post_save.disconnect(dispatch_uid='update-scheduler') self.user = WechatUser(openid='fake_user', nickname='fake_user') self.user.save() # Disable scheduler def test_unlogged_in_user(self): resp = self.client.get(reverse('remind_list')) self.assertEqual(resp.status_code, 302) self.assertIn('open.weixin.qq.com/connect/oauth2/authorize', resp.url) resp = self.client.get(reverse('oauth_complete')) self.assertEqual(resp.status_code, 403) def test_log_in_existing_user(self): @urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$', path='/sns/oauth2/access_token') def web_access_token_mock(url, request): content = { "access_token": "ACCESS_TOKEN", "expires_in": 7200, "refresh_token": "REFRESH_TOKEN", "openid": "fake_user", "scope": "SCOPE" } headers = { 'Content-Type': 'application/json' } return response(200, content, headers, request=request) with HTTMock(web_access_token_mock): resp = self.client.get(reverse('oauth_complete'), data={'code': 123, 'state': 'remind_list'}) self.assertEqual(self.client.session['_auth_user_id'], self.user.pk) self.assertEqual(resp.status_code, 302) self.assertEqual(reverse('remind_list'), resp.url) def test_guest(self): guest_id = 'fake_user1xxx' @urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$', path='/sns/oauth2/access_token') def web_access_token_mock(url, request): content = { "access_token": "ACCESS_TOKEN", "expires_in": 7200, "refresh_token": "REFRESH_TOKEN", "openid": guest_id, "scope": "SCOPE" } headers = { 'Content-Type': 'application/json' } return response(200, content, headers, request=request) with HTTMock(web_access_token_mock): resp = self.client.get(reverse('oauth_complete'), data={'code': 123, 'state': 'remind_list'}) self.assertEqual(self.client.session['_auth_user_id'], guest_id) self.assertEqual(resp.status_code, 302) self.assertEqual(reverse('remind_list'), resp.url) self.assertFalse(WechatUser.objects.filter(pk=guest_id).exists())
class LoginTestCase(TestCase): def setUp(self): post_save.disconnect(dispatch_uid='update-scheduler') self.user = WechatUser(openid='fake_user', nickname='fake_user') self.user.save() # Disable scheduler def test_unlogged_in_user(self): resp = self.client.get(reverse('remind-list')) self.assertEqual(resp.status_code, 401) self.assertIn('//open.weixin.qq.com/connect/oauth2/authorize', resp.get('WWW-Authenticate', '')) resp = self.client.get(reverse('oauth_complete')) self.assertEqual(resp.status_code, 403) def test_log_in_existing_user(self): @urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$', path='/sns/oauth2/access_token') def web_access_token_mock(url, request): content = { "access_token": "ACCESS_TOKEN", "expires_in": 7200, "refresh_token": "REFRESH_TOKEN", "openid": "fake_user", "scope": "SCOPE" } headers = { 'Content-Type': 'application/json' } return response(200, content, headers, request=request) with HTTMock(web_access_token_mock): resp = self.client.get(reverse('oauth_complete'), data={'code': 123, 'state': 'remind-list-blah'}) self.assertEqual(self.client.session['_auth_user_id'], self.user.pk) self.assertEqual(resp.status_code, 302) self.assertEqual('remind-list-blah', resp.url) def test_guest(self): guest_id = 'fake_user1xxx' @urlmatch(netloc=r'(.*\.)?api\.weixin\.qq\.com$', path='/sns/oauth2/access_token') def web_access_token_mock(url, request): content = { "access_token": "ACCESS_TOKEN", "expires_in": 7200, "refresh_token": "REFRESH_TOKEN", "openid": guest_id, "scope": "SCOPE" } headers = { 'Content-Type': 'application/json' } return response(200, content, headers, request=request) with HTTMock(web_access_token_mock): resp = self.client.get(reverse('oauth_complete'), data={'code': 123, 'state': 'remind-list-blah'}) self.assertEqual(self.client.session['_auth_user_id'], guest_id) self.assertEqual(resp.status_code, 302) self.assertEqual('remind-list-blah', resp.url) self.assertFalse(WechatUser.objects.filter(pk=guest_id).exists())