diff --git a/tableauserverclient/server/request_factory.py b/tableauserverclient/server/request_factory.py index fc4694c01..b94659ca6 100644 --- a/tableauserverclient/server/request_factory.py +++ b/tableauserverclient/server/request_factory.py @@ -733,13 +733,13 @@ def update_req(self, site_item: "SiteItem", parent_srv: "Server | None" = None): site_item.custom_subscription_email_enabled ).lower() if site_item.custom_subscription_email is not None: - site_element.attrib["customSubscriptionEmail"] = str(site_item.custom_subscription_email).lower() + site_element.attrib["customSubscriptionEmail"] = str(site_item.custom_subscription_email) if site_item.custom_subscription_footer_enabled is not None: site_element.attrib["customSubscriptionFooterEnabled"] = str( site_item.custom_subscription_footer_enabled ).lower() if site_item.custom_subscription_footer is not None: - site_element.attrib["customSubscriptionFooter"] = str(site_item.custom_subscription_footer).lower() + site_element.attrib["customSubscriptionFooter"] = str(site_item.custom_subscription_footer) if site_item.ask_data_mode is not None: site_element.attrib["askDataMode"] = str(site_item.ask_data_mode) if site_item.named_sharing_enabled is not None: @@ -837,13 +837,13 @@ def create_req(self, site_item: "SiteItem", parent_srv: "Server | None" = None): site_item.custom_subscription_email_enabled ).lower() if site_item.custom_subscription_email is not None: - site_element.attrib["customSubscriptionEmail"] = str(site_item.custom_subscription_email).lower() + site_element.attrib["customSubscriptionEmail"] = str(site_item.custom_subscription_email) if site_item.custom_subscription_footer_enabled is not None: site_element.attrib["customSubscriptionFooterEnabled"] = str( site_item.custom_subscription_footer_enabled ).lower() if site_item.custom_subscription_footer is not None: - site_element.attrib["customSubscriptionFooter"] = str(site_item.custom_subscription_footer).lower() + site_element.attrib["customSubscriptionFooter"] = str(site_item.custom_subscription_footer) if site_item.ask_data_mode is not None: site_element.attrib["askDataMode"] = str(site_item.ask_data_mode) if site_item.named_sharing_enabled is not None: diff --git a/test/test_site.py b/test/test_site.py index e976bc1d2..5c7336254 100644 --- a/test/test_site.py +++ b/test/test_site.py @@ -205,6 +205,36 @@ def test_update_missing_id(server: TSC.Server) -> None: server.sites.update(single_site) +def test_update_subscription_email_and_footer_preserve_case() -> None: + # Regression for #1849: RequestFactory used to .lower() customSubscriptionEmail + # and customSubscriptionFooter, silently mangling caller intent. Footer + # especially, since it is displayed verbatim in outgoing subscription emails. + site = TSC.SiteItem(name="X", content_url="x") + site.custom_subscription_email = "Sales@Company.com" + site.custom_subscription_footer = "Sent by Tableau -- Confidential. See https://Example.com/Legal" + + xml_bytes = RequestFactory.Site.update_req(site) + xml_text = xml_bytes.decode("utf-8") + + assert 'customSubscriptionEmail="Sales@Company.com"' in xml_text, xml_text + assert ( + 'customSubscriptionFooter="Sent by Tableau -- Confidential. See https://Example.com/Legal"' in xml_text + ), xml_text + + +def test_create_subscription_email_and_footer_preserve_case() -> None: + # Same regression for the create-site path. + site = TSC.SiteItem(name="X", content_url="x") + site.custom_subscription_email = "Support@Company.com" + site.custom_subscription_footer = "COMPANY, Inc. -- All Rights Reserved." + + xml_bytes = RequestFactory.Site.create_req(site) + xml_text = xml_bytes.decode("utf-8") + + assert 'customSubscriptionEmail="Support@Company.com"' in xml_text, xml_text + assert 'customSubscriptionFooter="COMPANY, Inc. -- All Rights Reserved."' in xml_text, xml_text + + 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