Skip to content

Commit

Permalink
Add linkID and other optional fields to mtech_kenya transport.
Browse files Browse the repository at this point in the history
  • Loading branch information
jerith committed Oct 18, 2013
1 parent d9bc1ba commit 8f3bfa0
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 3 deletions.
12 changes: 9 additions & 3 deletions vumi/transports/mtech_kenya/mtech_kenya.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class MTechKenyaTransport(HttpRpcTransport):
CONFIG_CLASS = MTechKenyaTransportConfig

EXPECTED_FIELDS = set(["shortCode", "MSISDN", "MESSAGE", "messageID"])
IGNORED_FIELDS = set()
OPTIONAL_FIELDS = set(["linkID", "gateway", "message_type"])

KNOWN_ERROR_RESPONSE_CODES = {
401: 'Invalid username or password',
Expand All @@ -48,6 +48,9 @@ def handle_outbound_message(self, message):
'MSISDN': message['to_addr'],
'MESSAGE': message['content'],
}
link_id = message['transport_metadata'].get('linkID')
if link_id is not None:
params['linkID'] = link_id
url = '%s?%s' % (config.outbound_url, urlencode(params))
log.msg("Making HTTP request: %s" % (url,))
response = yield http_request_full(url, '', method='POST')
Expand All @@ -63,20 +66,23 @@ def handle_outbound_message(self, message):
@inlineCallbacks
def handle_raw_inbound_message(self, message_id, request):
values, errors = self.get_field_values(
request, self.EXPECTED_FIELDS, self.IGNORED_FIELDS)
request, self.EXPECTED_FIELDS, self.OPTIONAL_FIELDS)
if errors:
log.msg('Unhappy incoming message: %s' % (errors,))
yield self.finish_request(message_id, json.dumps(errors), code=400)
return
log.msg(('MTechKenyaTransport sending from %(MSISDN)s to '
'%(shortCode)s message "%(MESSAGE)s"') % values)
transport_metadata = {'transport_message_id': values['messageID']}
if values.get('linkID') is not None:
transport_metadata['linkID'] = values['linkID']
yield self.publish_message(
message_id=message_id,
content=values['MESSAGE'],
to_addr=values['shortCode'],
from_addr=values['MSISDN'],
transport_type=self.transport_type,
transport_metadata={'transport_message_id': values['messageID']},
transport_metadata=transport_metadata,
)
yield self.finish_request(
message_id, json.dumps({'message_id': message_id}))
37 changes: 37 additions & 0 deletions vumi/transports/mtech_kenya/tests/test_mtech_kenya.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,3 +162,40 @@ def test_outbound_bad_msisdn(self):
[nack] = yield self.wait_for_dispatched_events(1)
self.assertEqual('nack', nack['event_type'])
self.assertEqual('Invalid mobile number', nack['nack_reason'])

@inlineCallbacks
def test_inbound_linkid(self):
url = self.mkurl('hello', linkID='link123')
response = yield http_request(url, '', method='POST')
[msg] = self.get_dispatched_messages()
self.assertEqual(msg['transport_name'], self.transport_name)
self.assertEqual(msg['to_addr'], "12345")
self.assertEqual(msg['from_addr'], "2371234567")
self.assertEqual(msg['content'], "hello")
self.assertEqual(msg['transport_metadata'], {
'transport_message_id': '1234567',
'linkID': 'link123',
})
self.assertEqual(json.loads(response),
{'message_id': msg['message_id']})

@inlineCallbacks
def test_outbound_linkid(self):
msg = self.mkmsg_out(to_addr="2371234567", transport_metadata={
'linkID': 'link123',
})
yield self.dispatch(msg)
req = yield self.cellulant_sms_calls.get()
self.assertEqual(req.path, '/')
self.assertEqual(req.method, 'POST')
self.assertEqual({
'user': ['testuser'],
'pass': ['testpass'],
'messageID': [msg['message_id']],
'shortCode': ['9292'],
'MSISDN': ['2371234567'],
'MESSAGE': ['hello world'],
'linkID': ['link123'],
}, req.args)
[ack] = yield self.wait_for_dispatched_events(1)
self.assertEqual('ack', ack['event_type'])

0 comments on commit 8f3bfa0

Please sign in to comment.