test_rest_api.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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. # prepare a test brain
  25. brain_to_test = full_path_brain_to_test
  26. brain_loader = BrainLoader(file_path=brain_to_test)
  27. brain = brain_loader.brain
  28. self.app = Flask(__name__)
  29. self.flask_api = FlaskAPI(self.app, port=5000, brain=brain)
  30. self.flask_api.app.config['TESTING'] = True
  31. return self.flask_api.app
  32. # TODO all following test passes with 'python -m unittest Tests.TestRestAPI' but not with discover
  33. # def test_get_all_synapses(self):
  34. # url = "http://127.0.0.1:5000/synapses"
  35. #
  36. # result = requests.get(url=url)
  37. # expected_content = {
  38. # "synapses": [
  39. # {
  40. # "name": "test",
  41. # "neurons": [
  42. # {
  43. # "say": {
  44. # "message": [
  45. # "test message"
  46. # ]
  47. # }
  48. # }
  49. # ],
  50. # "signals": [
  51. # {
  52. # "order": "test_order"
  53. # }
  54. # ]
  55. # },
  56. # {
  57. # "name": "test2",
  58. # "neurons": [
  59. # {
  60. # "say": {
  61. # "message": [
  62. # "test message"
  63. # ]
  64. # }
  65. # }
  66. # ],
  67. # "signals": [
  68. # {
  69. # "order": "test_order_2"
  70. # }
  71. # ]
  72. # },
  73. # {
  74. # "includes": [
  75. # "included_brain_test.yml"
  76. # ]
  77. # },
  78. # {
  79. # "name": "test3",
  80. # "neurons": [
  81. # {
  82. # "say": {
  83. # "message": [
  84. # "test message"
  85. # ]
  86. # }
  87. # }
  88. # ],
  89. # "signals": [
  90. # {
  91. # "order": "test_order_3"
  92. # }
  93. # ]
  94. # }
  95. # ]
  96. # }
  97. #
  98. # self.assertEqual(result.status_code, 200)
  99. # self.assertEqual(expected_content, json.loads(result.content))
  100. #
  101. # def test_get_one_synapse(self):
  102. # url = "http://127.0.0.1:5000/synapses/test"
  103. # result = requests.get(url=url)
  104. #
  105. # expected_content = {
  106. # "synapses": {
  107. # "name": "test",
  108. # "neurons": [
  109. # {
  110. # "say": {
  111. # "message": [
  112. # "test message"
  113. # ]
  114. # }
  115. # }
  116. # ],
  117. # "signals": [
  118. # {
  119. # "order": "test_order"
  120. # }
  121. # ]
  122. # }
  123. # }
  124. #
  125. # self.assertEqual(expected_content, json.loads(result.content))
  126. #
  127. # def test_get_synapse_not_found(self):
  128. # url = "http://127.0.0.1:5000/synapses/test-none"
  129. # result = requests.get(url=url)
  130. #
  131. # expected_content = {
  132. # "error": {
  133. # "synapse name not found": "test-none"
  134. # }
  135. # }
  136. #
  137. # self.assertEqual(expected_content, json.loads(result.content))
  138. # self.assertEqual(result.status_code, 404)
  139. #
  140. # def test_run_synapse_by_name(self):
  141. # url = "http://127.0.0.1:5000/synapses/test"
  142. # result = requests.post(url=url)
  143. #
  144. # expected_content = {
  145. # "synapses": {
  146. # "name": "test",
  147. # "neurons": [
  148. # {
  149. # "say": {
  150. # "message": [
  151. # "test message"
  152. # ]
  153. # }
  154. # }
  155. # ],
  156. # "signals": [
  157. # {
  158. # "order": "test_order"
  159. # }
  160. # ]
  161. # }
  162. # }
  163. #
  164. # self.assertEqual(expected_content, json.loads(result.content))
  165. # self.assertEqual(result.status_code, 201)
  166. #
  167. # def test_post_synapse_not_found(self):
  168. # url = "http://127.0.0.1:5000/synapses/test-none"
  169. # result = requests.post(url=url)
  170. #
  171. # expected_content = {
  172. # "error": {
  173. # "synapse name not found": "test-none"
  174. # }
  175. # }
  176. #
  177. # self.assertEqual(expected_content, json.loads(result.content))
  178. # self.assertEqual(result.status_code, 404)
  179. #
  180. # def test_run_synapse_with_order(self):
  181. # url = "http://127.0.0.1:5000/order/"
  182. # headers = {"Content-Type": "application/json"}
  183. # data = {"order": "test_order"}
  184. # result = requests.post(url=url, headers=headers, json=data)
  185. #
  186. # expected_content = {
  187. # "synapses": [
  188. # {
  189. # "name": "test",
  190. # "neurons": [
  191. # {
  192. # "name": "say",
  193. # "parameters": "{'message': ['test message']}"
  194. # }
  195. # ],
  196. # "signals": [
  197. # {
  198. # "order": "test_order"
  199. # }
  200. # ]
  201. # }
  202. # ]
  203. # }
  204. #
  205. # self.assertEqual(expected_content, json.loads(result.content))
  206. # self.assertEqual(result.status_code, 201)
  207. #
  208. # def test_post_synapse_by_order_not_found(self):
  209. # url = "http://127.0.0.1:5000/order/"
  210. # data = {"order": "non existing order"}
  211. # headers = {"Content-Type": "application/json"}
  212. # result = requests.post(url=url, headers=headers, json=data)
  213. #
  214. # expected_content = {'error': {'error': "The given order doesn't match any synapses"}}
  215. #
  216. # self.assertEqual(expected_content, json.loads(result.content))
  217. # self.assertEqual(result.status_code, 400)
  218. if __name__ == '__main__':
  219. unittest.main()