def test_send_reply_message(self): '''send_reply_message should place the correct reply message on the correct queue''' channel = yield self.create_channel(self.service, self.redis, id='channel-id') in_msg = TransportUserMessage(from_addr='+2789', to_addr='+1234', transport_name='channel-id', transport_type='_', transport_metadata={'foo': 'bar'}) yield self.api.inbounds.store_vumi_message('channel-id', in_msg) msg = yield channel.send_reply_message( self.message_sender, self.outbounds, self.inbounds, { 'reply_to': in_msg['message_id'], 'content': 'testcontent', }) expected = in_msg.reply(content='testcontent') expected = conjoin(api_from_message(expected), { 'timestamp': msg['timestamp'], 'message_id': msg['message_id'] }) self.assertEqual(msg, expected) [dispatched] = self.get_dispatched_messages('channel-id.outbound') self.assertEqual(msg['message_id'], dispatched['message_id']) self.assertEqual(api_from_message(dispatched), expected)
def test_send_reply_message(self): '''send_reply_message should place the correct reply message on the correct queue''' yield self.create_channel( self.service, self.redis, TelnetServerTransport, id='channel-id') in_msg = TransportUserMessage( from_addr='+2789', to_addr='+1234', transport_name='channel-id', transport_type='_', transport_metadata={'foo': 'bar'}) yield self.api.inbounds.store_vumi_message('channel-id', in_msg) msg = yield Channel.send_reply_message( 'channel-id', self.message_sender, self.outbounds, self.inbounds, { 'reply_to': in_msg['message_id'], 'content': 'testcontent', }) expected = in_msg.reply(content='testcontent') expected = conjoin(api_from_message(expected), { 'timestamp': msg['timestamp'], 'message_id': msg['message_id'] }) self.assertEqual(msg, expected) [dispatched] = self.get_dispatched_messages('channel-id.outbound') self.assertEqual(msg['message_id'], dispatched['message_id']) self.assertEqual(api_from_message(dispatched), expected)
def make_request(self, session_type, session_id, reply=None, continue_session=True, expect_msg=True, defer_response=False, **kw): url_suffix = "session/%s/%s" % (session_id, session_type) method = self.SESSION_HTTP_METHOD.get(session_type, "POST") request_data = self.DEFAULT_SESSION_DATA[session_type].copy() request_data.update(kw) deferred_req = http_request(self.worker_url + url_suffix, json.dumps(request_data), method=method) if not expect_msg: msg = None else: [msg] = yield self.broker.wait_messages("vumi", "test_infobip.inbound", 1) self.broker.clear_messages("vumi", "test_infobip.inbound") msg = TransportUserMessage(**msg.payload) if reply is not None: reply_msg = msg.reply(reply, continue_session=continue_session) self.broker.publish_message("vumi", "test_infobip.outbound", reply_msg) if defer_response: response = deferred_req else: response = yield deferred_req returnValue((msg, response))
def test_inbound_resume_continue(self): url = "%s%s?%s" % ( self.transport_url, self.config['web_path'], urlencode({ 'ussdSessionId': 123, 'msisdn': 555, 'provider': 'web', 'request': 1, }) ) d = http_request(url, '', method='GET') msg, = yield self.wait_for_dispatched_messages(1) payload = msg.payload self.assertEqual(payload['transport_name'], self.transport_name) self.assertEqual(payload['transport_type'], "ussd") self.assertEqual(payload['transport_metadata'], {"session_id": "123"}) self.assertEqual(payload['session_event'], TransportUserMessage.SESSION_RESUME) self.assertEqual(payload['from_addr'], '555') self.assertEqual(payload['to_addr'], '') self.assertEqual(payload['content'], '1') tum = TransportUserMessage(**payload) rep = tum.reply("OK") self.dispatch(rep) response = yield d correct_response = '<request>\n\t<headertext>OK</headertext>\n\t' \ '<options>\n\t\t<option command="1" order="1" ' \ 'callback="http://localhost/foo" display="False" >' \ '</option>\n\t</options>\n</request>' self.assertEqual(response, correct_response)
def test_inbound_resume_close(self): args = "/?ussdSessionId=123&msisdn=555&provider=web&request=1" url = "%s%s?%s" % ( self.transport_url, self.config['web_path'], urlencode({ 'ussdSessionId': 123, 'msisdn': 555, 'provider': 'web', 'request': 1, }) ) d = http_request(url, '', method='GET') msg, = yield self.wait_for_dispatched_messages(1) payload = msg.payload self.assertEqual(payload['transport_name'], self.transport_name) self.assertEqual(payload['transport_type'], "ussd") self.assertEqual(payload['transport_metadata'], {"session_id": "123"}) self.assertEqual(payload['session_event'], TransportUserMessage.SESSION_RESUME) self.assertEqual(payload['from_addr'], '555') self.assertEqual(payload['to_addr'], '') self.assertEqual(payload['content'], '1') tum = TransportUserMessage(**payload) rep = tum.reply("OK", False) self.dispatch(rep) response = yield d correct_response = '<request>\n\t<headertext>OK' + \ '</headertext>\n</request>' self.assertEqual(response, correct_response)
def test_inbound(self): d = http_request(self.worker_url + "foo", '', method='GET') msg, = yield self.broker.wait_messages("vumi", "test_ok_transport.inbound", 1) payload = msg.payload tum = TransportUserMessage(**payload) rep = tum.reply("OK") self.broker.publish_message("vumi", "test_ok_transport.outbound", rep) response = yield d self.assertEqual(response, 'OK')
def test_transport_user_message_reply_no_group(self): msg = TransportUserMessage( to_addr='123', from_addr='456', transport_name='sphex', transport_type='sms', transport_metadata={'foo': 'bar'}, helper_metadata={'otherfoo': 'otherbar'}, ) reply = msg.reply(content='Hi!') self.assertEqual(reply['from_addr'], '123') self.assertEqual(reply['to_addr'], '456') self.assertEqual(reply['group'], None) self.assertEqual(reply['session_event'], reply.SESSION_NONE) self.assertEqual(reply['in_reply_to'], msg['message_id']) self.assertEqual(reply['transport_name'], msg['transport_name']) self.assertEqual(reply['transport_type'], msg['transport_type']) self.assertEqual(reply['transport_metadata'], msg['transport_metadata']) self.assertEqual(reply['helper_metadata'], msg['helper_metadata'])
def test_send_message_reply(self): '''Sending a reply message should fetch the relevant inbound message, use it to construct a reply message, and place the reply message on the queue for the channel''' channel = Channel( redis_manager=(yield self.get_redis()), config=(yield self.create_channel_config()), properties=self.create_channel_properties(), id='test-channel') yield channel.save() yield channel.start(self.service) in_msg = TransportUserMessage( from_addr='+2789', to_addr='+1234', transport_name='test-channel', transport_type='_', transport_metadata={'foo': 'bar'}) yield self.api.inbounds.store_vumi_message('test-channel', in_msg) expected = in_msg.reply(content='testcontent') expected = api_from_message(expected) resp = yield self.post('/channels/test-channel/messages/', { 'reply_to': in_msg['message_id'], 'content': 'testcontent', }) yield self.assert_response( resp, http.OK, 'message sent', omit(expected, 'timestamp', 'message_id'), ignore=['timestamp', 'message_id']) [message] = self.get_dispatched_messages('test-channel.outbound') message_id = (yield resp.json())['result']['message_id'] self.assertEqual(message['message_id'], message_id)
def test_send_message_reply(self): '''Sending a reply message should fetch the relevant inbound message, use it to construct a reply message, and place the reply message on the queue for the channel''' channel = Channel(redis_manager=(yield self.get_redis()), config=(yield self.create_channel_config()), properties=self.create_channel_properties(), id='test-channel') yield channel.save() yield channel.start(self.service) in_msg = TransportUserMessage(from_addr='+2789', to_addr='+1234', transport_name='test-channel', transport_type='_', transport_metadata={'foo': 'bar'}) yield self.api.inbounds.store_vumi_message('test-channel', in_msg) expected = in_msg.reply(content='testcontent') expected = api_from_message(expected) resp = yield self.post('/channels/test-channel/messages/', { 'reply_to': in_msg['message_id'], 'content': 'testcontent', }) yield self.assert_response(resp, http.OK, 'message sent', omit(expected, 'timestamp', 'message_id'), ignore=['timestamp', 'message_id']) [message] = self.get_dispatched_messages('test-channel.outbound') message_id = (yield resp.json())['result']['message_id'] self.assertEqual(message['message_id'], message_id)