-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(http_request): improve parameter initialization and reorganize te…
…sts (#10297)
- Loading branch information
Showing
3 changed files
with
203 additions
and
170 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
198 changes: 198 additions & 0 deletions
198
api/tests/unit_tests/core/workflow/nodes/http_request/test_http_request_executor.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,198 @@ | ||
from core.workflow.entities.variable_pool import VariablePool | ||
from core.workflow.nodes.http_request import ( | ||
BodyData, | ||
HttpRequestNodeAuthorization, | ||
HttpRequestNodeBody, | ||
HttpRequestNodeData, | ||
) | ||
from core.workflow.nodes.http_request.entities import HttpRequestNodeTimeout | ||
from core.workflow.nodes.http_request.executor import Executor | ||
|
||
|
||
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 | ||
|
||
|
||
def test_extract_selectors_from_template_with_newline(): | ||
variable_pool = VariablePool() | ||
variable_pool.add(("node_id", "custom_query"), "line1\nline2") | ||
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="test: {{#node_id.custom_query#}}", | ||
body=HttpRequestNodeBody( | ||
type="none", | ||
data=[], | ||
), | ||
) | ||
|
||
executor = Executor( | ||
node_data=node_data, | ||
timeout=HttpRequestNodeTimeout(connect=10, read=30, write=30), | ||
variable_pool=variable_pool, | ||
) | ||
|
||
assert executor.params == {"test": "line1\nline2"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters