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 5684b5ad00262c16f8fb6cffbb90a38b8b4b3c84 Mon Sep 17 00:00:00 2001 From: Jordan Woods <13803242+jorwoods@users.noreply.github.com> Date: Sun, 9 Nov 2025 22:35:33 -0600 Subject: [PATCH 2/2] chore: pytestify regressions --- test/test_regression_tests.py | 153 +++++++++++++++++----------------- 1 file changed, 77 insertions(+), 76 deletions(-) diff --git a/test/test_regression_tests.py b/test/test_regression_tests.py index 62e30159..21fbf384 100644 --- a/test/test_regression_tests.py +++ b/test/test_regression_tests.py @@ -1,4 +1,3 @@ -import unittest from unittest import mock import tableauserverclient.server.request_factory as factory @@ -6,78 +5,80 @@ from tableauserverclient.filesys_helpers import to_filename, make_download_path -class BugFix257(unittest.TestCase): - def test_empty_request_works(self): - result = factory.EmptyRequest().empty_req() - self.assertEqual(b"", result) - - -class FileSysHelpers(unittest.TestCase): - def test_to_filename(self): - invalid = [ - "23brhafbjrjhkbbea.txt", - "a_b_C.txt", - "windows space.txt", - "abc#def.txt", - "t@bL3A()", - ] - - valid = [ - "23brhafbjrjhkbbea.txt", - "a_b_C.txt", - "windows space.txt", - "abcdef.txt", - "tbL3A", - ] - - self.assertTrue(all([(to_filename(i) == v) for i, v in zip(invalid, valid)])) - - def test_make_download_path(self): - no_file_path = (None, "file.ext") - has_file_path_folder = ("/root/folder/", "file.ext") - has_file_path_file = ("outx", "file.ext") - - self.assertEqual("file.ext", make_download_path(*no_file_path)) - self.assertEqual("outx.ext", make_download_path(*has_file_path_file)) - - with mock.patch("os.path.isdir") as mocked_isdir: - mocked_isdir.return_value = True - self.assertEqual("/root/folder/file.ext", make_download_path(*has_file_path_folder)) - - -class LoggingTest(unittest.TestCase): - def test_redact_password_string(self): - redacted = redact_xml( - "this is password: my_super_secret_passphrase_which_nobody_should_ever_see password: value" - ) - assert redacted.find("value") == -1 - assert redacted.find("secret") == -1 - assert redacted.find("ever_see") == -1 - assert redacted.find("my_super_secret_passphrase_which_nobody_should_ever_see") == -1 - - def test_redact_password_bytes(self): - redacted = redact_xml( - b"" - ) - assert redacted.find(b"value") == -1 - assert redacted.find(b"secret") == -1 - - def test_redact_password_with_special_char(self): - redacted = redact_xml( - " " - ) - assert redacted.find("my_s per_secre>_passphrase_which_nobody_should_ever_see with password: value") == -1 - - def test_redact_password_not_xml(self): - redacted = redact_xml( - " " - ) - assert redacted.find("my_s per_secre>_passphrase_which_nobody_should_ever_see") == -1 - - def test_redact_password_really_not_xml(self): - redacted = redact_xml( - "value='this is a nondescript text line which is public' password='my_s per_secre>_passphrase_which_nobody_should_ever_see with password: value and then a cookie " - ) - assert redacted.find("my_s per_secre>_passphrase_which_nobody_should_ever_see") == -1 - assert redacted.find("passphrase") == -1, redacted - assert redacted.find("cookie") == -1, redacted +def test_empty_request_works(): + result = factory.EmptyRequest().empty_req() + assert b"" == result + + +def test_to_filename(): + invalid = [ + "23brhafbjrjhkbbea.txt", + "a_b_C.txt", + "windows space.txt", + "abc#def.txt", + "t@bL3A()", + ] + + valid = [ + "23brhafbjrjhkbbea.txt", + "a_b_C.txt", + "windows space.txt", + "abcdef.txt", + "tbL3A", + ] + + assert all([(to_filename(i) == v) for i, v in zip(invalid, valid)]) + + +def test_make_download_path(): + no_file_path = (None, "file.ext") + has_file_path_folder = ("/root/folder/", "file.ext") + has_file_path_file = ("outx", "file.ext") + + assert "file.ext" == make_download_path(*no_file_path) + assert "outx.ext" == make_download_path(*has_file_path_file) + + with mock.patch("os.path.isdir") as mocked_isdir: + mocked_isdir.return_value = True + assert "/root/folder/file.ext" == make_download_path(*has_file_path_folder) + + +def test_redact_password_string(): + redacted = redact_xml( + "this is password: my_super_secret_passphrase_which_nobody_should_ever_see password: value" + ) + assert redacted.find("value") == -1 + assert redacted.find("secret") == -1 + assert redacted.find("ever_see") == -1 + assert redacted.find("my_super_secret_passphrase_which_nobody_should_ever_see") == -1 + + +def test_redact_password_bytes(): + redacted = redact_xml( + b"" + ) + assert redacted.find(b"value") == -1 + assert redacted.find(b"secret") == -1 + + +def test_redact_password_with_special_char(): + redacted = redact_xml( + " " + ) + assert redacted.find("my_s per_secre>_passphrase_which_nobody_should_ever_see with password: value") == -1 + + +def test_redact_password_not_xml(): + redacted = redact_xml( + " " + ) + assert redacted.find("my_s per_secre>_passphrase_which_nobody_should_ever_see") == -1 + + +def test_redact_password_really_not_xml(): + redacted = redact_xml( + "value='this is a nondescript text line which is public' password='my_s per_secre>_passphrase_which_nobody_should_ever_see with password: value and then a cookie " + ) + assert redacted.find("my_s per_secre>_passphrase_which_nobody_should_ever_see") == -1 + assert redacted.find("passphrase") == -1, redacted + assert redacted.find("cookie") == -1, redacted