Преглед на файлове

add unit tests for rest api

nico преди 8 години
родител
ревизия
bf7806fff3
променени са 1 файла, в които са добавени 152 реда и са изтрити 0 реда
  1. 152 0
      Tests/test_rest_api.py

+ 152 - 0
Tests/test_rest_api.py

@@ -0,0 +1,152 @@
+import json
+import unittest
+
+import requests
+import time
+from flask import Flask
+
+from core.ConfigurationManager import BrainLoader
+from core.ConfigurationManager import SettingLoader
+from core.RestAPI.FlaskAPI import FlaskAPI
+
+
+class TestRestAPI(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """
+        executed once at the beginning of the test
+        """
+        # rest api config
+        sl = SettingLoader.Instance()
+        sl.settings.rest_api.password_protected = False
+        sl.settings.active = True
+        sl.settings.port = 5000
+        # prepare a test brain
+        brain_to_test = "Tests/brains/brain_test.yml"
+        brain_loader = BrainLoader.Instance(file_path=brain_to_test)
+        brain = brain_loader.brain
+
+        app = Flask(__name__)
+        cls.flask_api = FlaskAPI(app, port=5000, brain=brain)
+        cls.flask_api.start()
+        time.sleep(1)
+
+    @classmethod
+    def tearDownClass(cls):
+        """
+        executed once at the end of the test
+        """
+        url = "http://127.0.0.1:5000/shutdown/"
+        requests.post(url=url)
+
+    def setUp(self):
+        self.base_url = "http://127.0.0.1:5000"
+
+    def test_get_synapses(self):
+        url = self.base_url+"/synapses/"
+        result = requests.get(url=url)
+
+        expected_content = {
+            "synapses": [
+                {
+                    "name": "test",
+                    "neurons": [
+                        {
+                            "say": {
+                                "message": [
+                                    "test message"
+                                ]
+                            }
+                        }
+                    ],
+                    "signals": [
+                        {
+                            "order": "test_order"
+                        }
+                    ]
+                },
+                {
+                    "name": "test2",
+                    "neurons": [
+                        {
+                            "say": {
+                                "message": [
+                                    "test message"
+                                ]
+                            }
+                        }
+                    ],
+                    "signals": [
+                        {
+                            "order": "test_order_2"
+                        }
+                    ]
+                },
+                {
+                    "includes": [
+                        "included_brain_test.yml"
+                    ]
+                },
+                {
+                    "name": "test3",
+                    "neurons": [
+                        {
+                            "say": {
+                                "message": [
+                                    "test message"
+                                ]
+                            }
+                        }
+                    ],
+                    "signals": [
+                        {
+                            "order": "test_order_3"
+                        }
+                    ]
+                }
+            ]
+        }
+
+        self.assertEqual(expected_content, json.loads(result.content))
+
+    def test_get_one_synapse(self):
+        url = self.base_url+"/synapses/test"
+        result = requests.get(url=url)
+
+        expected_content = {
+            "synapses": {
+                "name": "test",
+                "neurons": [
+                    {
+                        "say": {
+                            "message": [
+                                "test message"
+                            ]
+                        }
+                    }
+                ],
+                "signals": [
+                    {
+                        "order": "test_order"
+                    }
+                ]
+            }
+        }
+
+        self.assertEqual(expected_content, json.loads(result.content))
+
+    def test_synapse_not_found(self):
+        url = self.base_url + "/synapses/test-none"
+        result = requests.get(url=url)
+
+        expected_content = {
+            "error": {
+                "synapse name not found": "test-none"
+            }
+        }
+
+        self.assertEqual(expected_content, json.loads(result.content))
+
+if __name__ == '__main__':
+    unittest.main()