From 62e9d84fd6c32bb38e5418fb5050e4b5c1878cc5 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Thu, 29 May 2025 12:55:48 -0700 Subject: [PATCH] fix url encoding in the param part (#2520) --- skyvern/utils/url_validators.py | 1 + tests/unit_tests/__init__.py | 0 tests/unit_tests/test_url_validators.py | 29 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 tests/unit_tests/__init__.py create mode 100644 tests/unit_tests/test_url_validators.py diff --git a/skyvern/utils/url_validators.py b/skyvern/utils/url_validators.py index 8100ac05..f858f34a 100644 --- a/skyvern/utils/url_validators.py +++ b/skyvern/utils/url_validators.py @@ -65,4 +65,5 @@ def encode_url(url: str) -> str: parts = list(urlsplit(url)) # Encode the path while preserving "/" and "%" parts[2] = quote(parts[2], safe="/%") + parts[3] = quote(parts[3], safe="=&/%") return urlunsplit(parts) diff --git a/tests/unit_tests/__init__.py b/tests/unit_tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit_tests/test_url_validators.py b/tests/unit_tests/test_url_validators.py new file mode 100644 index 00000000..44d05458 --- /dev/null +++ b/tests/unit_tests/test_url_validators.py @@ -0,0 +1,29 @@ +from skyvern.utils.url_validators import encode_url + + +def test_encode_url_basic(): + """Test basic URL encoding with simple path""" + url = "https://example.com/path with spaces" + expected = "https://example.com/path%20with%20spaces" + assert encode_url(url) == expected + + +def test_encode_url_with_query_params(): + """Test URL encoding with query parameters""" + url = "https://example.com/search?q=hello world&type=test" + expected = "https://example.com/search?q=hello%20world&type=test" + assert encode_url(url) == expected + + +def test_encode_url_with_special_chars(): + """Test URL encoding with special characters""" + url = "https://example.com/path/with/special#chars?param=value&other=test@123" + expected = "https://example.com/path/with/special#chars?param=value&other=test@123" + assert encode_url(url) == expected + + +def test_encode_url_with_pre_encoded_chars(): + """Test URL encoding with pre-encoded characters in query parameters""" + url = "https://example.com/search?q=hello world&type=test%20test" + expected = "https://example.com/search?q=hello%20world&type=test%20test" + assert encode_url(url) == expected