test_rest_api.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. import os
  2. import unittest
  3. from flask import Flask
  4. from flask_testing import LiveServerTestCase
  5. from kalliope.core.Models import Singleton
  6. from kalliope.core.ConfigurationManager import BrainLoader
  7. from kalliope.core.ConfigurationManager import SettingLoader
  8. from kalliope.core.RestAPI.FlaskAPI import FlaskAPI
  9. class TestRestAPI(LiveServerTestCase):
  10. def create_app(self):
  11. """
  12. executed once at the beginning of the test
  13. """
  14. # be sure that the singleton haven't been loaded before
  15. Singleton._instances = {}
  16. current_path = os.getcwd()
  17. full_path_brain_to_test = current_path + os.sep + "Tests/brains/brain_test.yml"
  18. print full_path_brain_to_test
  19. # rest api config
  20. sl = SettingLoader()
  21. sl.settings.rest_api.password_protected = False
  22. sl.settings.active = True
  23. sl.settings.port = 5000
  24. sl.settings.allowed_cors_origin = "*"
  25. # prepare a test brain
  26. brain_to_test = full_path_brain_to_test
  27. brain_loader = BrainLoader(file_path=brain_to_test)
  28. brain = brain_loader.brain
  29. self.app = Flask(__name__)
  30. self.flask_api = FlaskAPI(self.app, port=5000, brain=brain)
  31. self.flask_api.app.config['TESTING'] = True
  32. return self.flask_api.app
  33. # TODO all following test passes with 'python -m unittest Tests.TestRestAPI' but not with discover
  34. # def test_get_all_synapses(self):
  35. # url = "http://127.0.0.1:5000/synapses"
  36. #
  37. # result = requests.get(url=url)
  38. # expected_content = {
  39. # "synapses": [
  40. # {
  41. # "name": "test",
  42. # "neurons": [
  43. # {
  44. # "say": {
  45. # "message": [
  46. # "test message"
  47. # ]
  48. # }
  49. # }
  50. # ],
  51. # "signals": [
  52. # {
  53. # "order": "test_order"
  54. # }
  55. # ]
  56. # },
  57. # {
  58. # "name": "test2",
  59. # "neurons": [
  60. # {
  61. # "say": {
  62. # "message": [
  63. # "test message"
  64. # ]
  65. # }
  66. # }
  67. # ],
  68. # "signals": [
  69. # {
  70. # "order": "test_order_2"
  71. # }
  72. # ]
  73. # },
  74. # {
  75. # "includes": [
  76. # "included_brain_test.yml"
  77. # ]
  78. # },
  79. # {
  80. # "name": "test3",
  81. # "neurons": [
  82. # {
  83. # "say": {
  84. # "message": [
  85. # "test message"
  86. # ]
  87. # }
  88. # }
  89. # ],
  90. # "signals": [
  91. # {
  92. # "order": "test_order_3"
  93. # }
  94. # ]
  95. # }
  96. # ]
  97. # }
  98. #
  99. # self.assertEqual(result.status_code, 200)
  100. # self.assertEqual(expected_content, json.loads(result.content))
  101. #
  102. # def test_get_one_synapse(self):
  103. # url = "http://127.0.0.1:5000/synapses/test"
  104. # result = requests.get(url=url)
  105. #
  106. # expected_content = {
  107. # "synapses": {
  108. # "name": "test",
  109. # "neurons": [
  110. # {
  111. # "say": {
  112. # "message": [
  113. # "test message"
  114. # ]
  115. # }
  116. # }
  117. # ],
  118. # "signals": [
  119. # {
  120. # "order": "test_order"
  121. # }
  122. # ]
  123. # }
  124. # }
  125. #
  126. # self.assertEqual(expected_content, json.loads(result.content))
  127. #
  128. # def test_get_synapse_not_found(self):
  129. # url = "http://127.0.0.1:5000/synapses/test-none"
  130. # result = requests.get(url=url)
  131. #
  132. # expected_content = {
  133. # "error": {
  134. # "synapse name not found": "test-none"
  135. # }
  136. # }
  137. #
  138. # self.assertEqual(expected_content, json.loads(result.content))
  139. # self.assertEqual(result.status_code, 404)
  140. #
  141. # def test_run_synapse_by_name(self):
  142. # url = "http://127.0.0.1:5000/synapses/test"
  143. # result = requests.post(url=url)
  144. #
  145. # expected_content = {
  146. # "synapses": {
  147. # "name": "test",
  148. # "neurons": [
  149. # {
  150. # "say": {
  151. # "message": [
  152. # "test message"
  153. # ]
  154. # }
  155. # }
  156. # ],
  157. # "signals": [
  158. # {
  159. # "order": "test_order"
  160. # }
  161. # ]
  162. # }
  163. # }
  164. #
  165. # self.assertEqual(expected_content, json.loads(result.content))
  166. # self.assertEqual(result.status_code, 201)
  167. #
  168. # def test_post_synapse_not_found(self):
  169. # url = "http://127.0.0.1:5000/synapses/test-none"
  170. # result = requests.post(url=url)
  171. #
  172. # expected_content = {
  173. # "error": {
  174. # "synapse name not found": "test-none"
  175. # }
  176. # }
  177. #
  178. # self.assertEqual(expected_content, json.loads(result.content))
  179. # self.assertEqual(result.status_code, 404)
  180. #
  181. # def test_run_synapse_with_order(self):
  182. # url = "http://127.0.0.1:5000/order/"
  183. # headers = {"Content-Type": "application/json"}
  184. # data = {"order": "test_order"}
  185. # result = requests.post(url=url, headers=headers, json=data)
  186. #
  187. # expected_content = {
  188. # "synapses": [
  189. # {
  190. # "name": "test",
  191. # "neurons": [
  192. # {
  193. # "name": "say",
  194. # "parameters": "{'message': ['test message']}"
  195. # }
  196. # ],
  197. # "signals": [
  198. # {
  199. # "order": "test_order"
  200. # }
  201. # ]
  202. # }
  203. # ]
  204. # }
  205. #
  206. # self.assertEqual(expected_content, json.loads(result.content))
  207. # self.assertEqual(result.status_code, 201)
  208. #
  209. # def test_post_synapse_by_order_not_found(self):
  210. # url = "http://127.0.0.1:5000/order/"
  211. # data = {"order": "non existing order"}
  212. # headers = {"Content-Type": "application/json"}
  213. # result = requests.post(url=url, headers=headers, json=data)
  214. #
  215. # expected_content = {'error': {'error': "The given order doesn't match any synapses"}}
  216. #
  217. # self.assertEqual(expected_content, json.loads(result.content))
  218. # self.assertEqual(result.status_code, 400)
  219. if __name__ == '__main__':
  220. unittest.main()