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/3] 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 891889332a63a66c7ea6fea55082a1952f7b1a40 Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:02:17 -0600 Subject: [PATCH 2/3] chore: pytestify test_site --- test/test_site.py | 573 ++++++++++++++++++++++++---------------------- 1 file changed, 293 insertions(+), 280 deletions(-) diff --git a/test/test_site.py b/test/test_site.py index 034e7c84..e976bc1d 100644 --- a/test/test_site.py +++ b/test/test_site.py @@ -1,6 +1,5 @@ from itertools import product -import os.path -import unittest +from pathlib import Path from defusedxml import ElementTree as ET import pytest @@ -11,286 +10,300 @@ from . import _utils -TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), "assets") - -GET_XML = os.path.join(TEST_ASSET_DIR, "site_get.xml") -GET_BY_ID_XML = os.path.join(TEST_ASSET_DIR, "site_get_by_id.xml") -GET_BY_NAME_XML = os.path.join(TEST_ASSET_DIR, "site_get_by_name.xml") -UPDATE_XML = os.path.join(TEST_ASSET_DIR, "site_update.xml") -CREATE_XML = os.path.join(TEST_ASSET_DIR, "site_create.xml") -SITE_AUTH_CONFIG_XML = os.path.join(TEST_ASSET_DIR, "site_auth_configurations.xml") - - -class SiteTests(unittest.TestCase): - def setUp(self) -> None: - self.server = TSC.Server("http://test", False) - self.server.version = "3.10" - - # Fake signin - self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" - self.server._site_id = "0626857c-1def-4503-a7d8-7907c3ff9d9f" - self.baseurl = self.server.sites.baseurl - - # sites APIs can only be called on the site being logged in to - self.logged_in_site = self.server.site_id - - def test_get(self) -> None: - with open(GET_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get(self.baseurl, text=response_xml) - all_sites, pagination_item = self.server.sites.get() - - self.assertEqual(2, pagination_item.total_available) - self.assertEqual("dad65087-b08b-4603-af4e-2887b8aafc67", all_sites[0].id) - self.assertEqual("Active", all_sites[0].state) - self.assertEqual("Default", all_sites[0].name) - self.assertEqual("ContentOnly", all_sites[0].admin_mode) - self.assertEqual(False, all_sites[0].revision_history_enabled) - self.assertEqual(True, all_sites[0].subscribe_others_enabled) - self.assertEqual(25, all_sites[0].revision_limit) - self.assertEqual(None, all_sites[0].num_users) - self.assertEqual(None, all_sites[0].storage) - self.assertEqual(True, all_sites[0].cataloging_enabled) - self.assertEqual(False, all_sites[0].editing_flows_enabled) - self.assertEqual(False, all_sites[0].scheduling_flows_enabled) - self.assertEqual(True, all_sites[0].allow_subscription_attachments) - self.assertEqual("6b7179ba-b82b-4f0f-91ed-812074ac5da6", all_sites[1].id) - self.assertEqual("Active", all_sites[1].state) - self.assertEqual("Samples", all_sites[1].name) - self.assertEqual("ContentOnly", all_sites[1].admin_mode) - self.assertEqual(False, all_sites[1].revision_history_enabled) - self.assertEqual(True, all_sites[1].subscribe_others_enabled) - self.assertEqual(False, all_sites[1].guest_access_enabled) - self.assertEqual(True, all_sites[1].cache_warmup_enabled) - self.assertEqual(True, all_sites[1].commenting_enabled) - self.assertEqual(True, all_sites[1].cache_warmup_enabled) - self.assertEqual(False, all_sites[1].request_access_enabled) - self.assertEqual(True, all_sites[1].run_now_enabled) - self.assertEqual(1, all_sites[1].tier_explorer_capacity) - self.assertEqual(2, all_sites[1].tier_creator_capacity) - self.assertEqual(1, all_sites[1].tier_viewer_capacity) - self.assertEqual(False, all_sites[1].flows_enabled) - self.assertEqual(None, all_sites[1].data_acceleration_mode) - - def test_get_before_signin(self) -> None: - self.server._auth_token = None - self.assertRaises(TSC.NotSignedInError, self.server.sites.get) - - def test_get_by_id(self) -> None: - with open(GET_BY_ID_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get(self.baseurl + "/" + self.logged_in_site, text=response_xml) - single_site = self.server.sites.get_by_id(self.logged_in_site) - - self.assertEqual(self.logged_in_site, single_site.id) - self.assertEqual("Active", single_site.state) - self.assertEqual("Default", single_site.name) - self.assertEqual("ContentOnly", single_site.admin_mode) - self.assertEqual(False, single_site.revision_history_enabled) - self.assertEqual(True, single_site.subscribe_others_enabled) - self.assertEqual(False, single_site.disable_subscriptions) - self.assertEqual(False, single_site.data_alerts_enabled) - self.assertEqual(False, single_site.commenting_mentions_enabled) - self.assertEqual(True, single_site.catalog_obfuscation_enabled) - - def test_get_by_id_missing_id(self) -> None: - self.assertRaises(ValueError, self.server.sites.get_by_id, "") - - def test_get_by_name(self) -> None: - with open(GET_BY_NAME_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.get(self.baseurl + "/testsite?key=name", text=response_xml) - single_site = self.server.sites.get_by_name("testsite") - - self.assertEqual(self.logged_in_site, single_site.id) - self.assertEqual("Active", single_site.state) - self.assertEqual("testsite", single_site.name) - self.assertEqual("ContentOnly", single_site.admin_mode) - self.assertEqual(False, single_site.revision_history_enabled) - self.assertEqual(True, single_site.subscribe_others_enabled) - self.assertEqual(False, single_site.disable_subscriptions) - - def test_get_by_name_missing_name(self) -> None: - self.assertRaises(ValueError, self.server.sites.get_by_name, "") - - @pytest.mark.filterwarnings("ignore:Tiered license level is set") - @pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") - def test_update(self) -> None: - with open(UPDATE_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.put(self.baseurl + "/" + self.logged_in_site, text=response_xml) - single_site = TSC.SiteItem( - name="Tableau", - content_url="tableau", - admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, - user_quota=15, - storage_quota=1000, - disable_subscriptions=True, - revision_history_enabled=False, - data_acceleration_mode="disable", - flow_auto_save_enabled=True, - web_extraction_enabled=False, - metrics_content_type_enabled=True, - notify_site_admins_on_throttle=False, - authoring_enabled=True, - custom_subscription_email_enabled=True, - custom_subscription_email="test@test.com", - custom_subscription_footer_enabled=True, - custom_subscription_footer="example_footer", - ask_data_mode="EnabledByDefault", - named_sharing_enabled=False, - mobile_biometrics_enabled=True, - sheet_image_enabled=False, - derived_permissions_enabled=True, - user_visibility_mode="FULL", - use_default_time_zone=False, - time_zone="America/Los_Angeles", - auto_suspend_refresh_enabled=True, - auto_suspend_refresh_inactivity_window=55, - tier_creator_capacity=5, - tier_explorer_capacity=5, - tier_viewer_capacity=5, - ) - single_site._id = self.logged_in_site - self.server.sites.parent_srv = self.server - single_site = self.server.sites.update(single_site) - - self.assertEqual(self.logged_in_site, single_site.id) - self.assertEqual("tableau", single_site.content_url) - self.assertEqual("Suspended", single_site.state) - self.assertEqual("Tableau", single_site.name) - self.assertEqual("ContentAndUsers", single_site.admin_mode) - self.assertEqual(True, single_site.revision_history_enabled) - self.assertEqual(13, single_site.revision_limit) - self.assertEqual(True, single_site.disable_subscriptions) - self.assertEqual(None, single_site.user_quota) - self.assertEqual(5, single_site.tier_creator_capacity) - self.assertEqual(5, single_site.tier_explorer_capacity) - self.assertEqual(5, single_site.tier_viewer_capacity) - self.assertEqual("disable", single_site.data_acceleration_mode) - self.assertEqual(True, single_site.flows_enabled) - self.assertEqual(True, single_site.cataloging_enabled) - self.assertEqual(True, single_site.flow_auto_save_enabled) - self.assertEqual(False, single_site.web_extraction_enabled) - self.assertEqual(True, single_site.metrics_content_type_enabled) - self.assertEqual(False, single_site.notify_site_admins_on_throttle) - self.assertEqual(True, single_site.authoring_enabled) - self.assertEqual(True, single_site.custom_subscription_email_enabled) - self.assertEqual("test@test.com", single_site.custom_subscription_email) - self.assertEqual(True, single_site.custom_subscription_footer_enabled) - self.assertEqual("example_footer", single_site.custom_subscription_footer) - self.assertEqual("EnabledByDefault", single_site.ask_data_mode) - self.assertEqual(False, single_site.named_sharing_enabled) - self.assertEqual(True, single_site.mobile_biometrics_enabled) - self.assertEqual(False, single_site.sheet_image_enabled) - self.assertEqual(True, single_site.derived_permissions_enabled) - self.assertEqual("FULL", single_site.user_visibility_mode) - self.assertEqual(False, single_site.use_default_time_zone) - self.assertEqual("America/Los_Angeles", single_site.time_zone) - self.assertEqual(True, single_site.auto_suspend_refresh_enabled) - self.assertEqual(55, single_site.auto_suspend_refresh_inactivity_window) - - def test_update_missing_id(self) -> None: - single_site = TSC.SiteItem("test", "test") - self.assertRaises(TSC.MissingRequiredFieldError, self.server.sites.update, single_site) - - def test_null_site_quota(self) -> None: - test_site = TSC.SiteItem("testname", "testcontenturl", tier_explorer_capacity=1, user_quota=None) - assert test_site.tier_explorer_capacity == 1 - with self.assertRaises(ValueError): - test_site.user_quota = 1 - test_site.tier_explorer_capacity = None +TEST_ASSET_DIR = Path(__file__).parent / "assets" + +GET_XML = TEST_ASSET_DIR / "site_get.xml" +GET_BY_ID_XML = TEST_ASSET_DIR / "site_get_by_id.xml" +GET_BY_NAME_XML = TEST_ASSET_DIR / "site_get_by_name.xml" +UPDATE_XML = TEST_ASSET_DIR / "site_update.xml" +CREATE_XML = TEST_ASSET_DIR / "site_create.xml" +SITE_AUTH_CONFIG_XML = TEST_ASSET_DIR / "site_auth_configurations.xml" + + +@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 = "0626857c-1def-4503-a7d8-7907c3ff9d9f" + server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" + server.version = "3.10" + + return server + + +def test_get(server: TSC.Server) -> None: + response_xml = GET_XML.read_text() + with requests_mock.mock() as m: + m.get(server.sites.baseurl, text=response_xml) + all_sites, pagination_item = server.sites.get() + + assert 2 == pagination_item.total_available + assert "dad65087-b08b-4603-af4e-2887b8aafc67" == all_sites[0].id + assert "Active" == all_sites[0].state + assert "Default" == all_sites[0].name + assert "ContentOnly" == all_sites[0].admin_mode + assert all_sites[0].revision_history_enabled is False + assert all_sites[0].subscribe_others_enabled is True + assert 25 == all_sites[0].revision_limit + assert None == all_sites[0].num_users + assert None == all_sites[0].storage + assert all_sites[0].cataloging_enabled is True + assert all_sites[0].editing_flows_enabled is False + assert all_sites[0].scheduling_flows_enabled is False + assert all_sites[0].allow_subscription_attachments is True + assert "6b7179ba-b82b-4f0f-91ed-812074ac5da6" == all_sites[1].id + assert "Active" == all_sites[1].state + assert "Samples" == all_sites[1].name + assert "ContentOnly" == all_sites[1].admin_mode + assert all_sites[1].revision_history_enabled is False + assert all_sites[1].subscribe_others_enabled is True + assert all_sites[1].guest_access_enabled is False + assert all_sites[1].cache_warmup_enabled is True + assert all_sites[1].commenting_enabled is True + assert all_sites[1].cache_warmup_enabled is True + assert all_sites[1].request_access_enabled is False + assert all_sites[1].run_now_enabled is True + assert 1 == all_sites[1].tier_explorer_capacity + assert 2 == all_sites[1].tier_creator_capacity + assert 1 == all_sites[1].tier_viewer_capacity + assert all_sites[1].flows_enabled is False + assert None == all_sites[1].data_acceleration_mode + + +def test_get_before_signin(server: TSC.Server) -> None: + server._auth_token = None + with pytest.raises(TSC.NotSignedInError): + server.sites.get() + + +def test_get_by_id(server: TSC.Server) -> None: + response_xml = GET_BY_ID_XML.read_text() + with requests_mock.mock() as m: + m.get(server.sites.baseurl + "/" + server.site_id, text=response_xml) + single_site = server.sites.get_by_id(server.site_id) + + assert server.site_id == single_site.id + assert "Active" == single_site.state + assert "Default" == single_site.name + assert "ContentOnly" == single_site.admin_mode + assert single_site.revision_history_enabled is False + assert single_site.subscribe_others_enabled is True + assert single_site.disable_subscriptions is False + assert single_site.data_alerts_enabled is False + assert single_site.commenting_mentions_enabled is False + assert single_site.catalog_obfuscation_enabled is True + + +def test_get_by_id_missing_id(server: TSC.Server) -> None: + with pytest.raises(ValueError): + server.sites.get_by_id("") + + +def test_get_by_name(server: TSC.Server) -> None: + response_xml = GET_BY_NAME_XML.read_text() + with requests_mock.mock() as m: + m.get(server.sites.baseurl + "/testsite?key=name", text=response_xml) + single_site = server.sites.get_by_name("testsite") + + assert server.site_id == single_site.id + assert "Active" == single_site.state + assert "testsite" == single_site.name + assert "ContentOnly" == single_site.admin_mode + assert single_site.revision_history_enabled is False + assert single_site.subscribe_others_enabled is True + assert single_site.disable_subscriptions is False + + +def test_get_by_name_missing_name(server: TSC.Server) -> None: + with pytest.raises(ValueError): + server.sites.get_by_name("") + + +@pytest.mark.filterwarnings("ignore:Tiered license level is set") +@pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") +def test_update(server: TSC.Server) -> None: + response_xml = UPDATE_XML.read_text() + with requests_mock.mock() as m: + m.put(server.sites.baseurl + "/" + server.site_id, text=response_xml) + single_site = TSC.SiteItem( + name="Tableau", + content_url="tableau", + admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, + user_quota=15, + storage_quota=1000, + disable_subscriptions=True, + revision_history_enabled=False, + data_acceleration_mode="disable", + flow_auto_save_enabled=True, + web_extraction_enabled=False, + metrics_content_type_enabled=True, + notify_site_admins_on_throttle=False, + authoring_enabled=True, + custom_subscription_email_enabled=True, + custom_subscription_email="test@test.com", + custom_subscription_footer_enabled=True, + custom_subscription_footer="example_footer", + ask_data_mode="EnabledByDefault", + named_sharing_enabled=False, + mobile_biometrics_enabled=True, + sheet_image_enabled=False, + derived_permissions_enabled=True, + user_visibility_mode="FULL", + use_default_time_zone=False, + time_zone="America/Los_Angeles", + auto_suspend_refresh_enabled=True, + auto_suspend_refresh_inactivity_window=55, + tier_creator_capacity=5, + tier_explorer_capacity=5, + tier_viewer_capacity=5, + ) + single_site._id = server.site_id + server.sites.parent_srv = server + single_site = server.sites.update(single_site) + + assert server.site_id == single_site.id + assert "tableau" == single_site.content_url + assert "Suspended" == single_site.state + assert "Tableau" == single_site.name + assert "ContentAndUsers" == single_site.admin_mode + assert single_site.revision_history_enabled is True + assert 13 == single_site.revision_limit + assert single_site.disable_subscriptions is True + assert None == single_site.user_quota + assert 5 == single_site.tier_creator_capacity + assert 5 == single_site.tier_explorer_capacity + assert 5 == single_site.tier_viewer_capacity + assert "disable" == single_site.data_acceleration_mode + assert single_site.flows_enabled is True + assert single_site.cataloging_enabled is True + assert single_site.flow_auto_save_enabled is True + assert single_site.web_extraction_enabled is False + assert single_site.metrics_content_type_enabled is True + assert single_site.notify_site_admins_on_throttle is False + assert single_site.authoring_enabled is True + assert single_site.custom_subscription_email_enabled is True + assert "test@test.com" == single_site.custom_subscription_email + assert single_site.custom_subscription_footer_enabled is True + assert "example_footer" == single_site.custom_subscription_footer + assert "EnabledByDefault" == single_site.ask_data_mode + assert single_site.named_sharing_enabled is False + assert single_site.mobile_biometrics_enabled is True + assert single_site.sheet_image_enabled is False + assert single_site.derived_permissions_enabled is True + assert "FULL" == single_site.user_visibility_mode + assert single_site.use_default_time_zone is False + assert "America/Los_Angeles" == single_site.time_zone + assert single_site.auto_suspend_refresh_enabled is True + assert 55 == single_site.auto_suspend_refresh_inactivity_window + + +def test_update_missing_id(server: TSC.Server) -> None: + single_site = TSC.SiteItem("test", "test") + with pytest.raises(TSC.MissingRequiredFieldError): + server.sites.update(single_site) + + +def test_null_site_quota(server: TSC.Server) -> None: + test_site = TSC.SiteItem("testname", "testcontenturl", tier_explorer_capacity=1, user_quota=None) + assert test_site.tier_explorer_capacity == 1 + with pytest.raises(ValueError): + test_site.user_quota = 1 + test_site.tier_explorer_capacity = None + test_site.user_quota = 1 + + +def test_replace_license_tiers_with_user_quota(server: TSC.Server) -> None: + test_site = TSC.SiteItem("testname", "testcontenturl", tier_explorer_capacity=1, user_quota=None) + assert test_site.tier_explorer_capacity == 1 + with pytest.raises(ValueError): test_site.user_quota = 1 + test_site.replace_license_tiers_with_user_quota(1) + assert 1 == test_site.user_quota + assert test_site.tier_explorer_capacity is None + - def test_replace_license_tiers_with_user_quota(self) -> None: - test_site = TSC.SiteItem("testname", "testcontenturl", tier_explorer_capacity=1, user_quota=None) - assert test_site.tier_explorer_capacity == 1 - with self.assertRaises(ValueError): - test_site.user_quota = 1 - test_site.replace_license_tiers_with_user_quota(1) - self.assertEqual(1, test_site.user_quota) - self.assertIsNone(test_site.tier_explorer_capacity) - - @pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") - def test_create(self) -> None: - with open(CREATE_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - with requests_mock.mock() as m: - m.post(self.baseurl, text=response_xml) - new_site = TSC.SiteItem( - name="Tableau", - content_url="tableau", - admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, - user_quota=15, - storage_quota=1000, - disable_subscriptions=True, - ) - new_site = self.server.sites.create(new_site) - - new_site._tier_viewer_capacity = None - new_site._tier_creator_capacity = None - new_site._tier_explorer_capacity = None - self.assertEqual("0626857c-1def-4503-a7d8-7907c3ff9d9f", new_site.id) - self.assertEqual("tableau", new_site.content_url) - self.assertEqual("Tableau", new_site.name) - self.assertEqual("Active", new_site.state) - self.assertEqual("ContentAndUsers", new_site.admin_mode) - self.assertEqual(False, new_site.revision_history_enabled) - self.assertEqual(True, new_site.subscribe_others_enabled) - self.assertEqual(True, new_site.disable_subscriptions) - self.assertEqual(15, new_site.user_quota) - - def test_delete(self) -> None: - with requests_mock.mock() as m: - m.delete(self.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f", status_code=204) - self.server.sites.delete("0626857c-1def-4503-a7d8-7907c3ff9d9f") - - def test_delete_missing_id(self) -> None: - self.assertRaises(ValueError, self.server.sites.delete, "") - - def test_encrypt(self) -> None: - with requests_mock.mock() as m: - m.post(self.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f/encrypt-extracts", status_code=200) - self.server.sites.encrypt_extracts("0626857c-1def-4503-a7d8-7907c3ff9d9f") - - def test_recrypt(self) -> None: - with requests_mock.mock() as m: - m.post(self.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f/reencrypt-extracts", status_code=200) - self.server.sites.re_encrypt_extracts("0626857c-1def-4503-a7d8-7907c3ff9d9f") - - def test_decrypt(self) -> None: - with requests_mock.mock() as m: - m.post(self.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f/decrypt-extracts", status_code=200) - self.server.sites.decrypt_extracts("0626857c-1def-4503-a7d8-7907c3ff9d9f") - - def test_list_auth_configurations(self) -> None: - self.server.version = "3.24" - self.baseurl = self.server.sites.baseurl - with open(SITE_AUTH_CONFIG_XML, "rb") as f: - response_xml = f.read().decode("utf-8") - - assert self.baseurl == self.server.sites.baseurl - - with requests_mock.mock() as m: - m.get(f"{self.baseurl}/{self.server.site_id}/site-auth-configurations", status_code=200, text=response_xml) - configs = self.server.sites.list_auth_configurations() - - assert len(configs) == 2, "Expected 2 auth configurations" - - assert configs[0].auth_setting == "OIDC" - assert configs[0].enabled - assert configs[0].idp_configuration_id == "00000000-0000-0000-0000-000000000000" - assert configs[0].idp_configuration_name == "Initial Salesforce" - assert configs[0].known_provider_alias == "Salesforce" - assert configs[1].auth_setting == "SAML" - assert configs[1].enabled - assert configs[1].idp_configuration_id == "11111111-1111-1111-1111-111111111111" - assert configs[1].idp_configuration_name == "Initial SAML" - assert configs[1].known_provider_alias is None +@pytest.mark.filterwarnings("ignore:FlowsEnabled has been removed") +def test_create(server: TSC.Server) -> None: + response_xml = CREATE_XML.read_text() + with requests_mock.mock() as m: + m.post(server.sites.baseurl, text=response_xml) + new_site = TSC.SiteItem( + name="Tableau", + content_url="tableau", + admin_mode=TSC.SiteItem.AdminMode.ContentAndUsers, + user_quota=15, + storage_quota=1000, + disable_subscriptions=True, + ) + new_site = server.sites.create(new_site) + + new_site._tier_viewer_capacity = None + new_site._tier_creator_capacity = None + new_site._tier_explorer_capacity = None + assert "0626857c-1def-4503-a7d8-7907c3ff9d9f" == new_site.id + assert "tableau" == new_site.content_url + assert "Tableau" == new_site.name + assert "Active" == new_site.state + assert "ContentAndUsers" == new_site.admin_mode + assert new_site.revision_history_enabled is False + assert new_site.subscribe_others_enabled is True + assert new_site.disable_subscriptions is True + assert 15 == new_site.user_quota + + +def test_delete(server: TSC.Server) -> None: + with requests_mock.mock() as m: + m.delete(server.sites.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f", status_code=204) + server.sites.delete("0626857c-1def-4503-a7d8-7907c3ff9d9f") + + +def test_delete_missing_id(server: TSC.Server) -> None: + with pytest.raises(ValueError): + server.sites.delete("") + + +def test_encrypt(server: TSC.Server) -> None: + with requests_mock.mock() as m: + m.post(server.sites.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f/encrypt-extracts", status_code=200) + server.sites.encrypt_extracts("0626857c-1def-4503-a7d8-7907c3ff9d9f") + + +def test_recrypt(server: TSC.Server) -> None: + with requests_mock.mock() as m: + m.post(server.sites.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f/reencrypt-extracts", status_code=200) + server.sites.re_encrypt_extracts("0626857c-1def-4503-a7d8-7907c3ff9d9f") + + +def test_decrypt(server: TSC.Server) -> None: + with requests_mock.mock() as m: + m.post(server.sites.baseurl + "/0626857c-1def-4503-a7d8-7907c3ff9d9f/decrypt-extracts", status_code=200) + server.sites.decrypt_extracts("0626857c-1def-4503-a7d8-7907c3ff9d9f") + + +def test_list_auth_configurations(server: TSC.Server) -> None: + server.version = "3.24" + response_xml = SITE_AUTH_CONFIG_XML.read_text() + + assert server.sites.baseurl == server.sites.baseurl + + with requests_mock.mock() as m: + m.get(f"{server.sites.baseurl}/{server.site_id}/site-auth-configurations", status_code=200, text=response_xml) + configs = server.sites.list_auth_configurations() + + assert len(configs) == 2, "Expected 2 auth configurations" + + assert configs[0].auth_setting == "OIDC" + assert configs[0].enabled + assert configs[0].idp_configuration_id == "00000000-0000-0000-0000-000000000000" + assert configs[0].idp_configuration_name == "Initial Salesforce" + assert configs[0].known_provider_alias == "Salesforce" + assert configs[1].auth_setting == "SAML" + assert configs[1].enabled + assert configs[1].idp_configuration_id == "11111111-1111-1111-1111-111111111111" + assert configs[1].idp_configuration_name == "Initial SAML" + assert configs[1].known_provider_alias is None @pytest.mark.parametrize("capture", [True, False, None]) From c391d589609c74254ca7303d0ba20f108ee97861 Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:07:08 -0600 Subject: [PATCH 3/3] chore: pytestify test_site_model --- test/test_site_model.py | 104 +++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 48 deletions(-) diff --git a/test/test_site_model.py b/test/test_site_model.py index 60ad9c5e..14914b87 100644 --- a/test/test_site_model.py +++ b/test/test_site_model.py @@ -1,65 +1,73 @@ -import unittest +import pytest import tableauserverclient as TSC -class SiteModelTests(unittest.TestCase): - def test_invalid_name(self): - self.assertRaises(ValueError, TSC.SiteItem, None, "url") - self.assertRaises(ValueError, TSC.SiteItem, "", "url") - site = TSC.SiteItem("site", "url") - with self.assertRaises(ValueError): - site.name = None +def test_invalid_name(): + with pytest.raises(ValueError): + TSC.SiteItem(None, "url") + with pytest.raises(ValueError): + TSC.SiteItem("", "url") + site = TSC.SiteItem("site", "url") + with pytest.raises(ValueError): + site.name = None - with self.assertRaises(ValueError): - site.name = "" + with pytest.raises(ValueError): + site.name = "" - def test_invalid_admin_mode(self): - site = TSC.SiteItem("site", "url") - with self.assertRaises(ValueError): - site.admin_mode = "Hello" - def test_invalid_content_url(self): - with self.assertRaises(ValueError): - site = TSC.SiteItem(name="蚵仔煎", content_url="蚵仔煎") +def test_invalid_admin_mode(): + site = TSC.SiteItem("site", "url") + with pytest.raises(ValueError): + site.admin_mode = "Hello" - with self.assertRaises(ValueError): - site = TSC.SiteItem(name="蚵仔煎", content_url=None) - def test_set_valid_content_url(self): - # Default Site - site = TSC.SiteItem(name="Default", content_url="") - self.assertEqual(site.content_url, "") +def test_invalid_content_url(): + with pytest.raises(ValueError): + site = TSC.SiteItem(name="蚵仔煎", content_url="蚵仔煎") - # Unicode Name and ascii content_url - site = TSC.SiteItem(name="蚵仔煎", content_url="omlette") - self.assertEqual(site.content_url, "omlette") + with pytest.raises(ValueError): + site = TSC.SiteItem(name="蚵仔煎", content_url=None) - def test_invalid_disable_subscriptions(self): - site = TSC.SiteItem("site", "url") - with self.assertRaises(ValueError): - site.disable_subscriptions = "Hello" - with self.assertRaises(ValueError): - site.disable_subscriptions = None +def test_set_valid_content_url(): + # Default Site + site = TSC.SiteItem(name="Default", content_url="") + assert site.content_url == "" - def test_invalid_revision_history_enabled(self): - site = TSC.SiteItem("site", "url") - with self.assertRaises(ValueError): - site.revision_history_enabled = "Hello" + # Unicode Name and ascii content_url + site = TSC.SiteItem(name="蚵仔煎", content_url="omlette") + assert site.content_url == "omlette" - with self.assertRaises(ValueError): - site.revision_history_enabled = None - def test_invalid_state(self): - site = TSC.SiteItem("site", "url") - with self.assertRaises(ValueError): - site.state = "Hello" +def test_invalid_disable_subscriptions(): + site = TSC.SiteItem("site", "url") + with pytest.raises(ValueError): + site.disable_subscriptions = "Hello" - def test_invalid_subscribe_others_enabled(self): - site = TSC.SiteItem("site", "url") - with self.assertRaises(ValueError): - site.subscribe_others_enabled = "Hello" + with pytest.raises(ValueError): + site.disable_subscriptions = None - with self.assertRaises(ValueError): - site.subscribe_others_enabled = None + +def test_invalid_revision_history_enabled(): + site = TSC.SiteItem("site", "url") + with pytest.raises(ValueError): + site.revision_history_enabled = "Hello" + + with pytest.raises(ValueError): + site.revision_history_enabled = None + + +def test_invalid_state(): + site = TSC.SiteItem("site", "url") + with pytest.raises(ValueError): + site.state = "Hello" + + +def test_invalid_subscribe_others_enabled(): + site = TSC.SiteItem("site", "url") + with pytest.raises(ValueError): + site.subscribe_others_enabled = "Hello" + + with pytest.raises(ValueError): + site.subscribe_others_enabled = None