Skip to content

Commit

Permalink
Add more tests to cover session start, resume, and end
Browse files Browse the repository at this point in the history
  • Loading branch information
Vincent Geddes committed Oct 22, 2013
1 parent 44184d3 commit afcc8bb
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 16 deletions.
138 changes: 131 additions & 7 deletions vumi/transports/trueafrican/tests/test_transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,27 +44,151 @@ def reply(r):
@inlineCallbacks
def test_session_init(self):
client = self.service_client()
resp_d = client.callRemote('USSD.INIT',
{'session': '32423',
'msisdn': '+27724385170',
'shortcode': '*23#'})
msg = yield self.reply_to_message("Hello!")
resp_d = client.callRemote(
'USSD.INIT',
{'session': '1',
'msisdn': '+27724385170',
'shortcode': '*23#'}
)
msg = yield self.reply_to_message("Oh Hai!")

# verify the transport -> application message
self.assertEqual(msg['transport_name'], self.transport_name)
self.assertEqual(msg['transport_type'], "ussd")
self.assertEqual(msg['session_event'],
TransportUserMessage.SESSION_NEW)
self.assertEqual(msg['from_addr'], '+27724385170')
self.assertEqual(msg['to_addr'], '*23#')
self.assertEqual(msg['content'], None)

resp = yield resp_d
self.assertEqual(
resp,
{
'message': 'Oh Hai!',
'session': '1',
'status': 'OK',
'type': 'cont'
}
)

@inlineCallbacks
def test_session_resume(self):
client = self.service_client()

# initiate session
resp_d = client.callRemote(
'USSD.INIT',
{'session': '1',
'msisdn': '+27724385170',
'shortcode': '*23#'}
)
yield self.reply_to_message("ping")
yield resp_d
yield self.clear_dispatched_messages()

# resume session
resp_d = client.callRemote(
'USSD.CONT',
{'session': '1',
'response': 'pong'}
)
msg = yield self.reply_to_message("ping")
# verify the transport -> application message
self.assertEqual(msg['transport_name'], self.transport_name)
self.assertEqual(msg['transport_type'], "ussd")
self.assertEqual(msg['session_event'],
TransportUserMessage.SESSION_RESUME)
self.assertEqual(msg['from_addr'], '+27724385170')
self.assertEqual(msg['to_addr'], '*23#')
self.assertEqual(msg['content'], 'pong')

resp = yield resp_d
self.assertEqual(
resp,
{
'message': 'Hello!',
'session': '32423',
'message': 'ping',
'session': '1',
'status': 'OK',
'type': 'cont'
}
)

@inlineCallbacks
def test_session_end_user_initiated(self):
client = self.service_client()

# initiate session
resp_d = client.callRemote(
'USSD.INIT',
{'session': '1',
'msisdn': '+27724385170',
'shortcode': '*23#'}
)
yield self.reply_to_message("ping")
yield resp_d
yield self.clear_dispatched_messages()

# user initiated session termination
resp_d = client.callRemote(
'USSD.END',
{'session': '1'}
)

[msg] = yield self.wait_for_dispatched_messages(1)
self.assertEqual(msg['transport_name'], self.transport_name)
self.assertEqual(msg['transport_type'], "ussd")
self.assertEqual(msg['session_event'],
TransportUserMessage.SESSION_CLOSE)
self.assertEqual(msg['from_addr'], '+27724385170')
self.assertEqual(msg['to_addr'], '*23#')
self.assertEqual(msg['content'], None)

resp = yield resp_d
self.assertEqual(
resp,
{
'status': 'OK',
}
)

@inlineCallbacks
def test_session_end_application_initiated(self):
client = self.service_client()

# initiate session
resp_d = client.callRemote(
'USSD.INIT',
{'session': '1',
'msisdn': '+27724385170',
'shortcode': '*23#'}
)
yield self.reply_to_message("ping")
yield resp_d
yield self.clear_dispatched_messages()

# end session
resp_d = client.callRemote(
'USSD.CONT',
{'session': '1',
'response': 'o rly?'}
)
yield self.reply_to_message(
"kthxbye",
session_event=TransportUserMessage.SESSION_CLOSE
)

resp = yield resp_d
self.assertEqual(
resp,
{
'message': 'kthxbye',
'session': '1',
'status': 'OK',
'type': 'end'
}
)

@inlineCallbacks
def test_nack(self):
msg = self.mkmsg_out()
Expand Down
19 changes: 10 additions & 9 deletions vumi/transports/trueafrican/transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,13 @@ def ussd_session_init(self, session_data):
msisdn,
to_addr)

@inlineCallbacks
def ussd_session_cont(self, session_data):
""" handler for USSD.CONT """
session_id = session_data['session']
content = session_data['response']
return self.transport.handle_session_resume(session_id,
content)

@inlineCallbacks
def ussd_session_end(self, session_data):
""" handler for USSD.END """
session_id = session_data['session']
Expand Down Expand Up @@ -98,7 +96,7 @@ class TrueAfricanUssdTransport(Transport):
CONFIG_CLASS = TrueAfricanUssdTransportConfig

TRANSPORT_TYPE = 'ussd'
SESSION_KEY_PREFIX = "vumi:transport:trueafrican:ussd"
SESSION_KEY_PREFIX = 'vumi:transport:trueafrican:ussd'

SESSION_STATE_MAP = {
TransportUserMessage.SESSION_NONE: 'cont',
Expand Down Expand Up @@ -202,7 +200,7 @@ def handle_session_resume(self, session_id, content):
message_id=request_id,
content=content,
to_addr=session['to_addr'],
from_addr=session['msisdn'],
from_addr=session['from_addr'],
session_event=session_event,
transport_name=self.transport_name,
transport_type=self.TRANSPORT_TYPE,
Expand All @@ -218,19 +216,22 @@ def handle_session_end(self, session_id):
returnValue(self.response_for_error())
session_event = TransportUserMessage.SESSION_CLOSE
transport_metadata = {'session_id': session_id}
request_id = self.generate_message_id()
self.publish_message(
message_id=request_id,
message_id=self.generate_message_id(),
content=None,
to_addr=session['to_addr'],
from_addr=session['msisdn'],
from_addr=session['from_addr'],
session_event=session_event,
transport_name=self.transport_name,
transport_type=self.TRANSPORT_TYPE,
transport_metadata=transport_metadata,
)
r = yield self.track_request(request_id)
returnValue(r)
# send a response immediately, and don't (n)ack
# since this is not application-initiated
response = {
'status': 'OK',
}
returnValue(response)

def handle_outbound_message(self, message):
in_reply_to = message['in_reply_to']
Expand Down

0 comments on commit afcc8bb

Please sign in to comment.