def test_double_delivery_handling(self): transport = yield self.get_transport_with_access_token('foo') xml = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> """.strip() resp1_d = request(transport, 'POST', data=xml) [msg] = yield self.tx_helper.wait_for_dispatched_inbound(1) reply_msg = yield self.tx_helper.make_dispatch_reply( msg, 'foo') resp1 = yield resp1_d reply1 = WeChatXMLParser.parse(resp1.delivered_body) self.assertTrue(isinstance(reply1, TextMessage)) # this one should bounce straight away resp2 = yield request(transport, 'POST', data=xml) self.assertEqual(resp2.code, http.OK) reply2 = WeChatXMLParser.parse(resp2.delivered_body) self.assertEqual(reply1.to_xml(), reply2.to_xml()) # Nothing new was added self.assertEqual(1, len(self.tx_helper.get_dispatched_inbound()))
def test_double_delivery_handling(self): transport = yield self.get_transport_with_access_token('foo') xml = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> """.strip() resp1_d = request(transport, 'POST', data=xml) [msg] = yield self.tx_helper.wait_for_dispatched_inbound(1) yield self.tx_helper.make_dispatch_reply(msg, 'foo') resp1 = yield resp1_d reply1 = WeChatXMLParser.parse(resp1.delivered_body) self.assertTrue(isinstance(reply1, TextMessage)) # this one should bounce straight away resp2 = yield request(transport, 'POST', data=xml) self.assertEqual(resp2.code, http.OK) reply2 = WeChatXMLParser.parse(resp2.delivered_body) self.assertEqual(reply1.to_xml(), reply2.to_xml()) # Nothing new was added self.assertEqual(1, len(self.tx_helper.get_dispatched_inbound()))
def test_close_double_delivery_handling(self): transport = yield self.get_transport_with_access_token('foo') xml = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <MsgId>1234567890123456</MsgId> </xml> """.strip() resp1_d = request(transport, 'POST', data=xml % ('first',)) resp2_d = task.deferLater(reactor, 0.1, request, transport, 'POST', data=xml % ('second',)) [msg] = yield self.tx_helper.wait_for_dispatched_inbound(1) # the second request should return first resp2 = yield resp2_d self.assertEqual(resp2.code, http.OK) self.assertEqual(resp2.delivered_body, '') yield self.tx_helper.make_dispatch_reply(msg, 'foo') resp1 = yield resp1_d reply1 = WeChatXMLParser.parse(resp1.delivered_body) self.assertTrue(isinstance(reply1, TextMessage))
def test_inbound_text_message(self): transport = yield self.get_transport_with_access_token('foo') resp_d = request( transport, 'POST', data=""" <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> """.strip()) [msg] = yield self.tx_helper.wait_for_dispatched_inbound(1) reply_msg = yield self.tx_helper.make_dispatch_reply( msg, 'foo') resp = yield resp_d reply = WeChatXMLParser.parse(resp.delivered_body) self.assertEqual(reply.to_user_name, 'fromUser') self.assertEqual(reply.from_user_name, 'toUser') self.assertTrue(int(reply.create_time) > 1348831860) self.assertTrue(isinstance(reply, TextMessage)) [ack] = yield self.tx_helper.wait_for_dispatched_events(1) self.assertEqual(ack['event_type'], 'ack') self.assertEqual(ack['user_message_id'], reply_msg['message_id']) self.assertEqual(ack['sent_message_id'], reply_msg['message_id'])
def test_close_double_delivery_handling(self): transport = yield self.get_transport_with_access_token('foo') xml = """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <MsgId>1234567890123456</MsgId> </xml> """.strip() resp1_d = request(transport, 'POST', data=xml % ('first',)) resp2_d = task.deferLater(reactor, 0.1, request, transport, 'POST', data=xml % ('second',)) [msg] = yield self.tx_helper.wait_for_dispatched_inbound(1) # the second request should return first resp2 = yield resp2_d self.assertEqual(resp2.code, http.OK) self.assertEqual(resp2.delivered_body, '') reply_msg = yield self.tx_helper.make_dispatch_reply( msg, 'foo') resp1 = yield resp1_d reply1 = WeChatXMLParser.parse(resp1.delivered_body) self.assertTrue(isinstance(reply1, TextMessage))
def test_event_message_parse(self): msg = WeChatXMLParser.parse(""" <xml> <ToUserName> <![CDATA[toUser]]> </ToUserName> <FromUserName> <![CDATA[fromUser]]> </FromUserName> <CreateTime>1395130515</CreateTime> <MsgType> <![CDATA[event]]> </MsgType> <Event> <![CDATA[subscribe]]> </Event> <EventKey> <![CDATA[]]> </EventKey> </xml> """) self.assertEqual(msg.to_user_name, 'toUser') self.assertEqual(msg.from_user_name, 'fromUser') self.assertEqual(msg.create_time, '1395130515') self.assertEqual(msg.event, 'subscribe') self.assertEqual(msg.event_key, '')
def handle_request(self, request): d = request.notifyFinish() d.addBoth( lambda _: self.transport.handle_finished_request(request)) wc_msg = WeChatXMLParser.parse(request.content.read()) return self.transport.handle_raw_inbound_message(request, wc_msg)
def test_event_message_parse(self): msg = WeChatXMLParser.parse( """ <xml> <ToUserName> <![CDATA[toUser]]> </ToUserName> <FromUserName> <![CDATA[fromUser]]> </FromUserName> <CreateTime>1395130515</CreateTime> <MsgType> <![CDATA[event]]> </MsgType> <Event> <![CDATA[subscribe]]> </Event> <EventKey> <![CDATA[]]> </EventKey> </xml> """) self.assertEqual(msg.to_user_name, 'toUser') self.assertEqual(msg.from_user_name, 'fromUser') self.assertEqual(msg.create_time, '1395130515') self.assertEqual(msg.event, 'subscribe') self.assertEqual(msg.event_key, '')
def test_text_message_parse(self): msg = WeChatXMLParser.parse(""" <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> """) self.assertEqual(msg.to_user_name, 'toUser') self.assertEqual(msg.from_user_name, 'fromUser') self.assertEqual(msg.create_time, '1348831860') self.assertEqual(msg.msg_id, '1234567890123456') self.assertEqual(msg.content, 'this is a test') self.assertTrue(isinstance(msg, TextMessage))
def test_text_message_parse(self): msg = WeChatXMLParser.parse( """ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> """) self.assertEqual(msg.to_user_name, 'toUser') self.assertEqual(msg.from_user_name, 'fromUser') self.assertEqual(msg.create_time, '1348831860') self.assertEqual(msg.msg_id, '1234567890123456') self.assertEqual(msg.content, 'this is a test') self.assertTrue(isinstance(msg, TextMessage))
def handle_request(self, request): d = request.notifyFinish() d.addBoth(lambda _: self.transport.handle_finished_request(request)) wc_msg = WeChatXMLParser.parse(request.content.read()) return self.transport.handle_raw_inbound_message(request, wc_msg)