@@ -30,6 +30,7 @@ def test_init_defaults(self):
3030 assert confluence .api_version == "1.0"
3131 assert confluence .api_root == "rest/api"
3232 assert confluence .cloud is False
33+ assert confluence .url == "https://test.confluence.com"
3334
3435 def test_init_custom_values (self ):
3536 """Test ConfluenceServer client initialization with custom values."""
@@ -43,6 +44,73 @@ def test_init_custom_values(self):
4344 assert confluence .api_version == "2.0"
4445 assert confluence .api_root == "custom/api/root"
4546
47+ def test_default_server_requests_preserve_legacy_urls (self ):
48+ confluence = ConfluenceServer (url = "https://test.confluence.com" , token = "test-token" )
49+ response = Response ()
50+ response .status_code = 200
51+ response .reason = "OK"
52+ response ._content = b'{"id": "123"}'
53+
54+ with patch .object (confluence ._session , "request" , return_value = response ) as mock_request :
55+ assert confluence .get_page_by_id ("123" ) == {"id" : "123" }
56+
57+ assert mock_request .call_args .kwargs ["url" ] == "https://test.confluence.com/rest/api/content/123"
58+
59+ @pytest .mark .parametrize (
60+ ("method" , "path" , "kwargs" , "expected_path" ),
61+ [
62+ ("post" , "rest/api/content" , {"data" : {}}, "rest/api/content" ),
63+ ("put" , "/rest/api/content/123" , {"data" : {}}, "rest/api/content/123" ),
64+ ("delete" , "rest/api/content/123" , {"params" : {}}, "rest/api/content/123" ),
65+ ],
66+ )
67+ def test_legacy_rooted_request_paths_are_not_prefixed_twice (self , method , path , kwargs , expected_path ):
68+ confluence = ConfluenceServer (url = "https://test.confluence.com" , token = "test-token" )
69+ response = Response ()
70+ response .status_code = 200
71+ response .reason = "OK"
72+
73+ with patch .object (confluence ._session , "request" , return_value = response ) as mock_request :
74+ getattr (confluence , method )(path = path , advanced_mode = True , ** kwargs )
75+
76+ assert mock_request .call_args .kwargs ["url" ] == f"https://test.confluence.com/{ expected_path } "
77+
78+ def test_explicit_server_api_version_applies_to_unrooted_resources (self ):
79+ confluence = ConfluenceServer (
80+ url = "https://test.confluence.com" ,
81+ token = "test-token" ,
82+ api_root = "custom/api/root" ,
83+ api_version = "2.0" ,
84+ )
85+ response = Response ()
86+ response .status_code = 200
87+ response .reason = "OK"
88+ response ._content = b'{"id": "123"}'
89+
90+ with patch .object (confluence ._session , "request" , return_value = response ) as mock_request :
91+ assert confluence .get_page_by_id ("123" ) == {"id" : "123" }
92+
93+ assert mock_request .call_args .kwargs ["url" ] == "https://test.confluence.com/custom/api/root/2.0/content/123"
94+
95+ def test_server_ui_exports_remain_site_relative (self ):
96+ confluence = ConfluenceServer (url = "https://test.confluence.com" , token = "test-token" )
97+ response = Response ()
98+ response .status_code = 200
99+ response .reason = "OK"
100+ response ._content = b"%PDF-1.4"
101+
102+ with patch .object (confluence ._session , "request" , return_value = response ) as mock_request :
103+ assert confluence .get_page_as_pdf ("123" ) == b"%PDF-1.4"
104+ pdf_url = mock_request .call_args .kwargs ["url" ]
105+
106+ mock_request .reset_mock ()
107+ response ._content = b"word export"
108+ assert confluence .get_page_as_word ("123" ) == b"word export"
109+ word_url = mock_request .call_args .kwargs ["url" ]
110+
111+ assert pdf_url == "https://test.confluence.com/spaces/flyingpdf/pdfpageexport.action?pageId=123"
112+ assert word_url == "https://test.confluence.com/exportword?pageId=123"
113+
46114 def test_bad_request_includes_confluence_validation_details (self , confluence_server ):
47115 response = Response ()
48116 response .status_code = 400
0 commit comments