示例#1
0
 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)
示例#2
0
 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'))
示例#3
0
 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')
示例#4
0
 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)
示例#5
0
 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()
示例#6
0
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()
示例#7
0
    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)
示例#8
0
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)
示例#9
0
    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'])
示例#10
0
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())
示例#11
0
 def setUp(self):
     u = WechatUser(openid='miao',
                    nickname='miaomiao',
                    subscribe=True,
                    last_login=timezone.now())
     u.save()
示例#12
0
 def setUp(self):
     post_save.disconnect(dispatch_uid='update-scheduler')
     self.user = WechatUser(openid='fake_user', nickname='fake_user')
     self.user.save()
示例#13
0
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)
示例#14
0
 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)
示例#15
0
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())
示例#16
0
 def setUp(self):
     post_save.disconnect(dispatch_uid='update-scheduler')
     self.user = WechatUser(openid='fake_user', nickname='fake_user')
     self.user.save()
示例#17
0
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())