瀏覽代碼

add test for sending json data

nico 8 年之前
父節點
當前提交
4072e30e6b
共有 4 個文件被更改,包括 64 次插入5 次删除
  1. 1 1
      manual_testing.py
  2. 57 2
      neurons/uri/tests/test_uri_neuron.py
  3. 1 0
      neurons/uri/tests/uri_test_brain.yml
  4. 5 2
      neurons/uri/uri.py

+ 1 - 1
manual_testing.py

@@ -12,7 +12,7 @@ logger.setLevel(logging.DEBUG)
 brain_to_test = "neurons/uri/tests/uri_test_brain.yml"
 bl = BrainLoader.Instance(file_path=brain_to_test)
 
-order = "test-post-url"
+order = "test-delete-url"
 
 oa = OrderAnalyser(order, brain=bl.brain)
 

+ 57 - 2
neurons/uri/tests/test_uri_neuron.py

@@ -1,3 +1,4 @@
+import json
 import unittest
 
 from httpretty import httpretty
@@ -112,9 +113,9 @@ class TestUri(unittest.TestCase):
         self.assertEqual(uri_neuron.text, expected_content)
 
     def testParameters(self):
-        def run_test(parameters):
+        def run_test(parameters_to_test):
             with self.assertRaises(InvalidParameterException):
-                Uri(**parameters)
+                Uri(**parameters_to_test)
 
         parameters = dict()
         run_test(parameters)
@@ -144,5 +145,59 @@ class TestUri(unittest.TestCase):
         }
         run_test(parameters)
 
+    def testPostJsonFromFile(self):
+        """
+        Tet that we are able to send json data through a file
+        :return:
+        """
+        def request_callback(request, url, headers):
+            data = json.loads(request.body)
+            if "title" in data and "body" in data and "userId" in data:
+                return 200, headers, "all key received from URL %s" % url
+
+            return 400, headers, "server did not receive all keys from URL %s" % url
+
+        httpretty.enable()
+        httpretty.register_uri(httpretty.POST, self.test_url, body=request_callback)
+
+        parameters = {
+            "url": self.test_url,
+            "method": "POST",
+            "data_from_file": "data_post_test.json",
+            "headers": {
+                "Content-Type": 'application/json'
+            }
+        }
+
+        uri_neuron = Uri(**parameters)
+        self.assertEqual(uri_neuron.status_code, 200)
+
+    def testPostJson(self):
+        """
+        Tet that we are able to send json data directly from the data variable
+        :return:
+        """
+        def request_callback(request, url, headers):
+            data = json.loads(request.body)
+            if "title" in data and "body" in data and "userId" in data:
+                return 200, headers, "all key received from URL %s" % url
+
+            return 400, headers, "server did not receive all keys from URL %s" % url
+
+        httpretty.enable()
+        httpretty.register_uri(httpretty.POST, self.test_url, body=request_callback)
+
+        parameters = {
+            "url": self.test_url,
+            "method": "POST",
+            "data": "{\"id\": 1,\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}",
+            "headers": {
+                "Content-Type": 'application/json'
+            }
+        }
+
+        uri_neuron = Uri(**parameters)
+        self.assertEqual(uri_neuron.status_code, 200)
+
 if __name__ == '__main__':
     unittest.main()

+ 1 - 0
neurons/uri/tests/uri_test_brain.yml

@@ -52,5 +52,6 @@
       - uri:
           url: "http://jsonplaceholder.typicode.com/posts/1"
           method: DELETE
+          timeout: 2
           say_template:
             - "{% if status_code==200 %}delete complete{% else %}fail to delete{% endif %}"

+ 5 - 2
neurons/uri/uri.py

@@ -111,6 +111,9 @@ class Uri(NeuronModule):
         if self.data is not None:
             returned_parameters["data"] = self.data
 
+        if self.data_from_file is not None:
+            returned_parameters["data"] = self.data_from_file
+
         logger.debug(self.neuron_name + " parameters: %s" % returned_parameters)
 
         return returned_parameters
@@ -153,7 +156,7 @@ class Uri(NeuronModule):
         # data must be loadable with json
         if self.data is not None:
             try:
-                self.data = json.loads(self.data)
+                json.loads(self.data)
             except ValueError, e:
                 raise InvalidParameterException("error in \"data\" parameter: %s" % e)
 
@@ -164,7 +167,7 @@ class Uri(NeuronModule):
                 raise InvalidParameterException("error in \"data_file\". File does not exist: %s" % self.data_from_file)
             # then try to load the json from the file
             try:
-                self.data_from_file = json.loads(self.readfile(self.data_from_file))
+                self.data_from_file = self.readfile(self.data_from_file)
             except ValueError, e:
                 raise InvalidParameterException("error in \"data\" parameter: %s" % e)