From 10613091d3da1b178ed6dab8b006d1cb62756789 Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Thu, 20 Nov 2025 22:13:28 -0600 Subject: [PATCH 1/2] fix: black ci errors --- test/test_datasource.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_datasource.py b/test/test_datasource.py index 7f4cca75..56eb11ab 100644 --- a/test/test_datasource.py +++ b/test/test_datasource.py @@ -895,7 +895,8 @@ def test_publish_description(server: TSC.Server) -> None: ds_elem = body.find(".//datasource") assert ds_elem is not None assert ds_elem.attrib["description"] == "Sample description" - + + def test_get_datasource_no_owner(server: TSC.Server) -> None: with requests_mock.mock() as m: m.get(server.datasources.baseurl, text=GET_NO_OWNER.read_text()) From 9e4bdb697d2a489a8401190acf854ab10522e51e Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Thu, 13 Nov 2025 21:38:57 -0600 Subject: [PATCH 2/2] chore: pytestify server info --- test/test_server_info.py | 143 ++++++++++++++++++++------------------- 1 file changed, 75 insertions(+), 68 deletions(-) diff --git a/test/test_server_info.py b/test/test_server_info.py index fa1472c9..af911508 100644 --- a/test/test_server_info.py +++ b/test/test_server_info.py @@ -1,75 +1,82 @@ -import os.path +from pathlib import Path import unittest +import pytest import requests_mock import tableauserverclient as TSC from tableauserverclient.server.endpoint.exceptions import NonXMLResponseError -TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), "assets") - -SERVER_INFO_GET_XML = os.path.join(TEST_ASSET_DIR, "server_info_get.xml") -SERVER_INFO_25_XML = os.path.join(TEST_ASSET_DIR, "server_info_25.xml") -SERVER_INFO_404 = os.path.join(TEST_ASSET_DIR, "server_info_404.xml") -SERVER_INFO_AUTH_INFO_XML = os.path.join(TEST_ASSET_DIR, "server_info_auth_info.xml") -SERVER_INFO_WRONG_SITE = os.path.join(TEST_ASSET_DIR, "server_info_wrong_site.html") - - -class ServerInfoTests(unittest.TestCase): - def setUp(self): - self.server = TSC.Server("http://test", False) - self.baseurl = self.server.server_info.baseurl - self.server.version = "2.4" - - def test_server_info_get(self): - with open(SERVER_INFO_GET_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get(self.server.server_info.baseurl, text=response_xml) - actual = self.server.server_info.get() - - self.assertEqual("10.1.0", actual.product_version) - self.assertEqual("10100.16.1024.2100", actual.build_number) - self.assertEqual("3.10", actual.rest_api_version) - - def test_server_info_use_highest_version_downgrades(self): - with open(SERVER_INFO_AUTH_INFO_XML, "rb") as f: - # This is the auth.xml endpoint present back to 9.0 Servers - auth_response_xml = f.read().decode("utf-8") - with open(SERVER_INFO_404, "rb") as f: - # 10.1 serverInfo response - si_response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - # Return a 404 for serverInfo so we can pretend this is an old Server - m.get(self.server.server_address + "/api/2.4/serverInfo", text=si_response_xml, status_code=404) - m.get(self.server.server_address + "/auth?format=xml", text=auth_response_xml) - self.server.use_server_version() - # does server-version[9.2] lookup in PRODUCT_TO_REST_VERSION - self.assertEqual(self.server.version, "2.2") - - def test_server_info_use_highest_version_upgrades(self): - with open(SERVER_INFO_GET_XML, "rb") as f: - si_response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get(self.server.server_address + "/api/2.8/serverInfo", text=si_response_xml) - # Pretend we're old - self.server.version = "2.8" - self.server.use_server_version() - # Did we upgrade to 3.10? - self.assertEqual(self.server.version, "3.10") - - def test_server_use_server_version_flag(self): - with open(SERVER_INFO_25_XML, "rb") as f: - si_response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get("http://test/api/2.4/serverInfo", text=si_response_xml) - server = TSC.Server("http://test", use_server_version=True) - self.assertEqual(server.version, "2.5") - - def test_server_wrong_site(self): - with open(SERVER_INFO_WRONG_SITE, "rb") as f: - response = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get(self.server.server_info.baseurl, text=response, status_code=404) - with self.assertRaises(NonXMLResponseError): - self.server.server_info.get() +TEST_ASSET_DIR = Path(__file__).parent / "assets" + +SERVER_INFO_GET_XML = TEST_ASSET_DIR / "server_info_get.xml" +SERVER_INFO_25_XML = TEST_ASSET_DIR / "server_info_25.xml" +SERVER_INFO_404 = TEST_ASSET_DIR / "server_info_404.xml" +SERVER_INFO_AUTH_INFO_XML = TEST_ASSET_DIR / "server_info_auth_info.xml" +SERVER_INFO_WRONG_SITE = TEST_ASSET_DIR / "server_info_wrong_site.html" + + +@pytest.fixture(scope="function") +def server(): + """Fixture to create a TSC.Server instance for testing.""" + server = TSC.Server("http://test", False) + + # Fake signin + server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67" + server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" + server.version = "2.4" + + return server + + +def test_server_info_get(server: TSC.Server) -> None: + response_xml = SERVER_INFO_GET_XML.read_text() + with requests_mock.mock() as m: + m.get(server.server_info.baseurl, text=response_xml) + actual = server.server_info.get() + + assert actual is not None + assert "10.1.0" == actual.product_version + assert "10100.16.1024.2100" == actual.build_number + assert "3.10" == actual.rest_api_version + + +def test_server_info_use_highest_version_downgrades(server: TSC.Server) -> None: + # This is the auth.xml endpoint present back to 9.0 Servers + auth_response_xml = SERVER_INFO_AUTH_INFO_XML.read_text() + # 10.1 serverInfo response + si_response_xml = SERVER_INFO_404.read_text() + with requests_mock.mock() as m: + # Return a 404 for serverInfo so we can pretend this is an old Server + m.get(server.server_address + "/api/2.4/serverInfo", text=si_response_xml, status_code=404) + m.get(server.server_address + "/auth?format=xml", text=auth_response_xml) + server.use_server_version() + # does server-version[9.2] lookup in PRODUCT_TO_REST_VERSION + assert server.version == "2.2" + + +def test_server_info_use_highest_version_upgrades(server: TSC.Server) -> None: + si_response_xml = SERVER_INFO_GET_XML.read_text() + with requests_mock.mock() as m: + m.get(server.server_address + "/api/2.8/serverInfo", text=si_response_xml) + # Pretend we're old + server.version = "2.8" + server.use_server_version() + # Did we upgrade to 3.10? + assert server.version == "3.10" + + +def test_server_use_server_version_flag(server: TSC.Server) -> None: + si_response_xml = SERVER_INFO_25_XML.read_text() + with requests_mock.mock() as m: + m.get("http://test/api/2.4/serverInfo", text=si_response_xml) + server = TSC.Server("http://test", use_server_version=True) + assert server.version == "2.5" + + +def test_server_wrong_site(server: TSC.Server) -> None: + response = SERVER_INFO_WRONG_SITE.read_text() + with requests_mock.mock() as m: + m.get(server.server_info.baseurl, text=response, status_code=404) + with pytest.raises(NonXMLResponseError): + server.server_info.get()