test_rest_api.py 7.4 KB

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