11import unittest
2- import urllib .parse as urlparse
2+ from urllib .parse import urlparse , urljoin
33from unittest .mock import patch
44
55import keboola .http_client .http as client
@@ -228,7 +228,7 @@ def test_update_existing_auth_header(self):
228228 def test_build_url_rel_path (self ):
229229 url = 'https://example.com/'
230230 cl = client .HttpClient (url )
231- self .assertEqual (urlparse . urljoin (url , 'storage' ), cl ._build_url ('storage' ))
231+ self .assertEqual (urljoin (url , 'storage' ), cl ._build_url ('storage' ))
232232
233233 def test_build_url_abs_path (self ):
234234 url = 'https://example.com/'
@@ -248,3 +248,36 @@ def test_build_url_base_url_appends_slash(self):
248248 url = 'https://example.com'
249249 cl = client .HttpClient (url )
250250 self .assertEqual ('https://example.com/' , cl .base_url )
251+
252+ def test_build_url_with_spaces (self ):
253+ base_url = "http://example.com/"
254+ cl = client .HttpClient (base_url )
255+
256+ result = cl ._build_url ("path/with spaces" )
257+ expected_path = "path/with%20spaces"
258+ parsed = urlparse (result )
259+ self .assertEqual (parsed .path , f"/{ expected_path } " )
260+ self .assertEqual (parsed .netloc , "example.com" )
261+ self .assertEqual (parsed .scheme , "http" )
262+
263+ result = cl ._build_url ("path?param=space test" )
264+ expected_query = "param=space test"
265+ parsed = urlparse (result )
266+ self .assertEqual (parsed .query , expected_query )
267+ self .assertEqual (parsed .path , "/path" )
268+ self .assertEqual (parsed .netloc , "example.com" )
269+ self .assertEqual (parsed .scheme , "http" )
270+
271+ absolute_result = cl ._build_url ("http://example.com/absolute path" , is_absolute_path = True )
272+ expected_absolute = "http://example.com/absolute%20path"
273+ self .assertEqual (absolute_result , expected_absolute )
274+
275+ # test based on SUPPORT-9780
276+ def test_build_url_with_complex_path (self ):
277+ base_url = "http://example.com/"
278+ cl = client .HttpClient (base_url )
279+
280+ result = cl ._build_url ("ucetni-denik/(datUcto>=2024-10-01 and datUcto<2024-10-30)" )
281+ expected_path = "ucetni-denik/(datUcto%3E=2024-10-01%20and%20datUcto%3C2024-10-30)"
282+ parsed = urlparse (result )
283+ self .assertEqual (parsed .path , f"/{ expected_path } " )
0 commit comments