| 
					
				 | 
			
			
				@@ -1,3 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import httpx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.app.entities.app_invoke_entities import InvokeFrom 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -14,7 +16,8 @@ from core.workflow.nodes.http_request import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     HttpRequestNodeBody, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     HttpRequestNodeData, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from core.workflow.nodes.http_request.executor import _plain_text_to_dict 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.workflow.nodes.http_request.entities import HttpRequestNodeTimeout 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.workflow.nodes.http_request.executor import Executor, _plain_text_to_dict 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from models.enums import UserFrom 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from models.workflow import WorkflowNodeExecutionStatus, WorkflowType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -200,3 +203,167 @@ def test_http_request_node_form_with_file(monkeypatch): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     assert result.status == WorkflowNodeExecutionStatus.SUCCEEDED 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     assert result.outputs is not None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     assert result.outputs["body"] == "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def test_executor_with_json_body_and_number_variable(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Prepare the variable pool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    variable_pool = VariablePool( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        system_variables={}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_inputs={}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    variable_pool.add(["pre_node_id", "number"], 42) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Prepare the node data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    node_data = HttpRequestNodeData( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        title="Test JSON Body with Number Variable", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        method="post", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        url="https://api.example.com/data", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        authorization=HttpRequestNodeAuthorization(type="no-auth"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        headers="Content-Type: application/json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params="", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        body=HttpRequestNodeBody( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            type="json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data=[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BodyData( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    key="", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type="text", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    value='{"number": {{#pre_node_id.number#}}}', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Initialize the Executor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    executor = Executor( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node_data=node_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        timeout=HttpRequestNodeTimeout(connect=10, read=30, write=30), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        variable_pool=variable_pool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Check the executor's data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.method == "post" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.url == "https://api.example.com/data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.headers == {"Content-Type": "application/json"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.params == {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.json == {"number": 42} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.data is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.files is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.content is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Check the raw request (to_log method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    raw_request = executor.to_log() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "POST /data HTTP/1.1" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "Host: api.example.com" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "Content-Type: application/json" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '{"number": 42}' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def test_executor_with_json_body_and_object_variable(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Prepare the variable pool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    variable_pool = VariablePool( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        system_variables={}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_inputs={}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    variable_pool.add(["pre_node_id", "object"], {"name": "John Doe", "age": 30, "email": "john@example.com"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Prepare the node data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    node_data = HttpRequestNodeData( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        title="Test JSON Body with Object Variable", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        method="post", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        url="https://api.example.com/data", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        authorization=HttpRequestNodeAuthorization(type="no-auth"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        headers="Content-Type: application/json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params="", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        body=HttpRequestNodeBody( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            type="json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data=[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BodyData( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    key="", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type="text", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    value="{{#pre_node_id.object#}}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Initialize the Executor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    executor = Executor( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node_data=node_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        timeout=HttpRequestNodeTimeout(connect=10, read=30, write=30), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        variable_pool=variable_pool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Check the executor's data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.method == "post" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.url == "https://api.example.com/data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.headers == {"Content-Type": "application/json"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.params == {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.json == {"name": "John Doe", "age": 30, "email": "john@example.com"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.data is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.files is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.content is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Check the raw request (to_log method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    raw_request = executor.to_log() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "POST /data HTTP/1.1" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "Host: api.example.com" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "Content-Type: application/json" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"name": "John Doe"' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"age": 30' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"email": "john@example.com"' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def test_executor_with_json_body_and_nested_object_variable(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Prepare the variable pool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    variable_pool = VariablePool( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        system_variables={}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_inputs={}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    variable_pool.add(["pre_node_id", "object"], {"name": "John Doe", "age": 30, "email": "john@example.com"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Prepare the node data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    node_data = HttpRequestNodeData( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        title="Test JSON Body with Nested Object Variable", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        method="post", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        url="https://api.example.com/data", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        authorization=HttpRequestNodeAuthorization(type="no-auth"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        headers="Content-Type: application/json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params="", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        body=HttpRequestNodeBody( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            type="json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data=[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BodyData( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    key="", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type="text", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    value='{"object": {{#pre_node_id.object#}}}', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Initialize the Executor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    executor = Executor( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node_data=node_data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        timeout=HttpRequestNodeTimeout(connect=10, read=30, write=30), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        variable_pool=variable_pool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Check the executor's data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.method == "post" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.url == "https://api.example.com/data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.headers == {"Content-Type": "application/json"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.params == {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.json == {"object": {"name": "John Doe", "age": 30, "email": "john@example.com"}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.data is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.files is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert executor.content is None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # Check the raw request (to_log method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    raw_request = executor.to_log() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "POST /data HTTP/1.1" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "Host: api.example.com" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert "Content-Type: application/json" in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"object": {' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"name": "John Doe"' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"age": 30' in raw_request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assert '"email": "john@example.com"' in raw_request 
			 |