PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/test/test.py

https://gitlab.com/wilane/tropo-webapi-python
Python | 342 lines | 322 code | 13 blank | 7 comment | 8 complexity | 8970d8300777e57ba38203cb5bd5c2c2 MD5 | raw file
  1. #!/usr/bin/env python
  2. try:
  3. import cjson as jsonlib
  4. jsonlib.dumps = jsonlib.encode
  5. jsonlib.loads = jsonlib.decode
  6. except ImportError:
  7. try:
  8. from django.utils import simplejson as jsonlib
  9. except ImportError:
  10. try:
  11. import simplejson as jsonlib
  12. except ImportError:
  13. import json as jsonlib
  14. import unittest
  15. import sys
  16. sys.path = ['..'] + sys.path
  17. from tropo import Choices, Say, Tropo
  18. class TestTropoPython(unittest.TestCase):
  19. """
  20. Class implementing a set of unit tests for TropoPython.
  21. """
  22. TO = "8005551212"
  23. MY_PHONE = "6021234567"
  24. RECORDING_URL = "/receive_recording.py"
  25. ID = "foo"
  26. S3_URL = "http://s3.amazonaws.com/xxx_s3_bucket/hello.wav"
  27. def test_ask(self):
  28. """
  29. Test the "ask" Tropo class method.
  30. """
  31. tropo = Tropo()
  32. tropo.ask("[5 digits]",
  33. say = Say("Please enter a 5 digit zip code").json)
  34. rendered = tropo.RenderJson()
  35. pretty_rendered = tropo.RenderJson(pretty=True)
  36. print "===============test_ask================="
  37. print "render json: %s" % pretty_rendered
  38. rendered_obj = jsonlib.loads(rendered)
  39. wanted_json = '{"tropo": [{"ask": {"say": {"value": "Please enter a 5 digit zip code"}, "choices": {"value": "[5 digits]"}}}]}'
  40. wanted_obj = jsonlib.loads(wanted_json)
  41. # print "test_ask: %s" % tropo.RenderJson()
  42. self.assertEqual(rendered_obj, wanted_obj)
  43. def test_call(self):
  44. """
  45. Test the "call" Tropo class method.
  46. """
  47. tropo = Tropo()
  48. tropo.call(self.MY_PHONE, channel='TEXT', network='SMS')
  49. tropo.say ("Wish you were here")
  50. rendered = tropo.RenderJson()
  51. pretty_rendered = tropo.RenderJson(pretty=True)
  52. print ("============test_call=============")
  53. print "render json: %s" % pretty_rendered
  54. rendered_obj = jsonlib.loads(rendered)
  55. wanted_json = '{"tropo": [{"call": {"to": "%s", "network": "SMS", "channel": "TEXT"}}, {"say": {"value": "Wish you were here"}}]}' % self.MY_PHONE
  56. wanted_obj = jsonlib.loads(wanted_json)
  57. # print "test_call: %s" % tropo.RenderJson()
  58. self.assertEqual(rendered_obj, wanted_obj)
  59. def test_conference(self):
  60. """
  61. Test the "conference" Tropo class method.
  62. """
  63. tropo = Tropo()
  64. tropo.conference(self.ID, playTones=True, mute=False,
  65. name="Staff Meeting")
  66. rendered = tropo.RenderJson()
  67. pretty_rendered = tropo.RenderJson(pretty=True)
  68. print "===============test_conference================="
  69. print "render json: %s" % pretty_rendered
  70. rendered_obj = jsonlib.loads(rendered)
  71. wanted_json = '{"tropo": [{"conference": {"playTones": true, "mute": false, "name": "Staff Meeting", "id": "foo"}}]}'
  72. print "wanted_json: %s" % wanted_json
  73. wanted_obj = jsonlib.loads(wanted_json)
  74. # print "test_conference: %s" % tropo.RenderJson()
  75. self.assertEqual(rendered_obj, wanted_obj)
  76. def test_hangup(self):
  77. """
  78. Test the "hangup" Tropo class method.
  79. """
  80. tropo = Tropo()
  81. tropo.hangup()
  82. rendered = tropo.RenderJson()
  83. pretty_rendered = tropo.RenderJson(pretty=True)
  84. print "===============test_hangup================="
  85. print "render json: %s" % pretty_rendered
  86. # print "test_hangup: %s" % tropo.RenderJson()
  87. rendered_obj = jsonlib.loads(rendered)
  88. wanted_json = '{"tropo": [{"hangup": {}}]}'
  89. wanted_obj = jsonlib.loads(wanted_json)
  90. self.assertEqual(rendered_obj, wanted_obj)
  91. def test_message(self):
  92. """
  93. Test the "message" Tropo class method.
  94. """
  95. tropo = Tropo()
  96. tropo.message("Hello World", self.MY_PHONE, channel='TEXT', network='SMS', timeout=5)
  97. rendered = tropo.RenderJson()
  98. pretty_rendered = tropo.RenderJson(pretty=True)
  99. print "===============test_message================="
  100. print "render json: %s" % pretty_rendered
  101. # print "test_message: %s" % tropo.RenderJson()
  102. rendered_obj = jsonlib.loads(rendered)
  103. wanted_json = ' {"tropo": [{"message": {"to": "%s", "say": {"value": "Hello World"}, "network": "SMS", "timeout": 5, "channel": "TEXT"}}]}' % self.MY_PHONE
  104. wanted_obj = jsonlib.loads(wanted_json)
  105. self.assertEqual(rendered_obj, wanted_obj)
  106. def test_on(self):
  107. """
  108. Test the "on" Tropo class method.
  109. """
  110. tropo = Tropo()
  111. tropo.on(event="continue",
  112. next="/weather.py?uri=end",
  113. say="Please hold.")
  114. rendered = tropo.RenderJson()
  115. pretty_rendered = tropo.RenderJson(pretty=True)
  116. print "===============test_on================="
  117. print "render json: %s" % pretty_rendered
  118. # print "test_on: %s" % tropo.RenderJson()
  119. rendered_obj = jsonlib.loads(rendered)
  120. wanted_json = ' {"tropo": [{"on": {"say": {"value": "Please hold."}, "event": "continue", "next": "/weather.py?uri=end"}}]}'
  121. wanted_obj = jsonlib.loads(wanted_json)
  122. self.assertEqual(rendered_obj, wanted_obj)
  123. def test_record(self):
  124. """
  125. Test the "record" Tropo class method.
  126. """
  127. tropo = Tropo()
  128. url = "/receive_recording.py"
  129. choices_obj = Choices("", terminator="#").json
  130. tropo.record(say="Tell us about yourself", url=url,
  131. choices=choices_obj)
  132. rendered = tropo.RenderJson()
  133. pretty_rendered = tropo.RenderJson(pretty=True)
  134. print "===============test_record================="
  135. print "render json: %s" % pretty_rendered
  136. # print "test_record: %s" % tropo.RenderJson()
  137. rendered_obj = jsonlib.loads(rendered)
  138. wanted_json = ' {"tropo": [{"record": {"url": "/receive_recording.py", "say": {"value": "Tell us about yourself"}, "choices": {"terminator": "#", "value": ""}}}]}'
  139. wanted_obj = jsonlib.loads(wanted_json)
  140. self.assertEqual(rendered_obj, wanted_obj)
  141. def test_redirect(self):
  142. """
  143. Test the "redirect" Tropo class method.
  144. """
  145. tropo = Tropo()
  146. tropo.redirect(self.MY_PHONE)
  147. rendered = tropo.RenderJson()
  148. pretty_rendered = tropo.RenderJson(pretty=True)
  149. print "===============test_redirect================="
  150. print "render json: %s" % pretty_rendered
  151. print "Wanted_Json %s" % tropo.RenderJson()
  152. rendered_obj = jsonlib.loads(rendered)
  153. wanted_json = '{"tropo": [{"redirect": {"to": "%s"}}]}' % self.MY_PHONE
  154. wanted_obj = jsonlib.loads(wanted_json)
  155. # print "test_redirect: %s" % tropo.RenderJson()
  156. self.assertEqual(rendered_obj, wanted_obj)
  157. def test_reject(self):
  158. """
  159. Test the "reject" Tropo class method.
  160. """
  161. tropo = Tropo()
  162. tropo.reject()
  163. rendered = tropo.RenderJson()
  164. pretty_rendered = tropo.RenderJson(pretty=True)
  165. print "===============test_reject================="
  166. print "render json: %s" % pretty_rendered
  167. print "Want %s" % tropo.RenderJson()
  168. rendered_obj = jsonlib.loads(rendered)
  169. wanted_json = '{"tropo": [{"reject": {}}]}'
  170. wanted_obj = jsonlib.loads(wanted_json)
  171. # print "test_reject: %s" % tropo.RenderJson()
  172. self.assertEqual(rendered_obj, wanted_obj)
  173. def test_say(self):
  174. """
  175. Test the "say" Tropo class method.
  176. """
  177. tropo = Tropo()
  178. tropo.say("Hello, World")
  179. rendered = tropo.RenderJson()
  180. pretty_rendered = tropo.RenderJson(pretty=True)
  181. print "===============test_say================="
  182. print "render json: %s" % pretty_rendered
  183. # print "test_say: %s" % tropo.RenderJson()
  184. rendered_obj = jsonlib.loads(rendered)
  185. wanted_json = '{"tropo": [{"say": {"value": "Hello, World"}}]}'
  186. wanted_obj = jsonlib.loads(wanted_json)
  187. self.assertEqual(rendered_obj, wanted_obj)
  188. def test_list_say(self):
  189. """
  190. Test the "say" Tropo class method, when a list of Strings is passed to it.
  191. """
  192. tropo = Tropo()
  193. tropo.say(["Hello, World", "How ya doing?"])
  194. rendered = tropo.RenderJson()
  195. pretty_rendered = tropo.RenderJson(pretty=True)
  196. print "===============test_list_say================="
  197. print "render json: %s" % pretty_rendered
  198. # print "test_say: %s" % tropo.RenderJson()
  199. rendered_obj = jsonlib.loads(rendered)
  200. wanted_json = '{"tropo": [{"say": [{"value": "Hello, World"}, {"value": "How ya doing?"}]}]}'
  201. wanted_obj = jsonlib.loads(wanted_json)
  202. self.assertEqual(rendered_obj, wanted_obj)
  203. def test_startRecording(self):
  204. """
  205. Test the "startRecording" Tropo class method.
  206. """
  207. tropo = Tropo()
  208. tropo.startRecording(self.RECORDING_URL)
  209. rendered = tropo.RenderJson()
  210. pretty_rendered = tropo.RenderJson(pretty=True)
  211. print "===============test_startRecording================="
  212. print "render json: %s" % pretty_rendered
  213. # print "test_startRecording: %s" % tropo.RenderJson()
  214. rendered_obj = jsonlib.loads(rendered)
  215. wanted_json = '{"tropo": [{"startRecording": {"url": "/receive_recording.py"}}]}'
  216. wanted_obj = jsonlib.loads(wanted_json)
  217. self.assertEqual(rendered_obj, wanted_obj)
  218. def test_stopRecording(self):
  219. """
  220. Test the "stopRecording" Tropo class method.
  221. """
  222. tropo = Tropo()
  223. tropo.stopRecording()
  224. rendered = tropo.RenderJson()
  225. pretty_rendered = tropo.RenderJson(pretty=True)
  226. print "===============test_stopRecording================="
  227. print "render json: %s" % pretty_rendered
  228. # print "test_stopRecording: %s" % tropo.RenderJson()
  229. rendered_obj = jsonlib.loads(rendered)
  230. wanted_json = ' {"tropo": [{"stopRecording": {}}]}'
  231. wanted_obj = jsonlib.loads(wanted_json)
  232. self.assertEqual(rendered_obj, wanted_obj)
  233. def test_transfer(self):
  234. """
  235. Test the "transfer" Tropo class method.
  236. """
  237. tropo = Tropo()
  238. tropo.say ("One moment please.")
  239. tropo.transfer(self.MY_PHONE)
  240. tropo.say("Hi. I am a robot")
  241. rendered = tropo.RenderJson()
  242. pretty_rendered = tropo.RenderJson(pretty=True)
  243. print "===============test_transfer================="
  244. print "render json: %s" % pretty_rendered
  245. # print "test_transfer: %s" % tropo.RenderJson()
  246. rendered_obj = jsonlib.loads(rendered)
  247. wanted_json = '{"tropo": [{"say": {"value": "One moment please."}}, {"transfer": {"to": "6021234567"}}, {"say": {"value": "Hi. I am a robot"}}]}'
  248. wanted_obj = jsonlib.loads(wanted_json)
  249. self.assertEqual(rendered_obj, wanted_obj)
  250. if __name__ == '__main__':
  251. """
  252. Unit tests.
  253. """
  254. if (0):
  255. TO = "8005551212"
  256. ID = "foo"
  257. URL = "http://s3.amazonaws.com/xxx_s3_bucket/hello.wav"
  258. tropo = Tropo()
  259. tropo.ask("[5 digits]",
  260. say = Say("Please enter a 5 digit zip code").json)
  261. tropo.call (TO)
  262. tropo.conference(ID)
  263. tropo.hangup()
  264. tropo.message ("Hello, World", TO)
  265. tropo.on(event="continue",
  266. next="http://example.com/weather.py",
  267. say="Please hold.")
  268. tropo.record(say="Please say something for posterity",
  269. url=URL,
  270. choices = Choices("", terminator="#").json)
  271. tropo.redirect(ID)
  272. tropo.reject(ID)
  273. tropo.startRecording(URL)
  274. tropo.stopRecording()
  275. tropo.transfer(TO)
  276. tropo.message("Hello, World",
  277. TO,
  278. channel='TEXT',
  279. network='SMS')
  280. else:
  281. unittest.main()