1010 TABLEAU_SITEADMIN_TOKEN=... TABLEAU_SITEADMIN_TOKEN_NAME=... \
1111 pytest test_e2e/test_projects_get_by_path.py -m e2e_admin -v
1212"""
13+
1314import pytest
1415import tableauserverclient as TSC
1516
17+ from test_e2e ._helpers import _unique
18+
1619# pytestmark is intentionally NOT set at module level because this file mixes
1720# @pytest.mark.e2e (publisher credentials) and @pytest.mark.e2e_admin (site-admin
1821# credentials) tests. A module-wide pytestmark would apply the same mark to every
@@ -43,8 +46,7 @@ def test_get_by_path_strips_leading_trailing_slashes(server, default_project):
4346 result = server .projects .get_by_path ("/Default/" )
4447 assert result is not None , "Expected to find project via path '/Default/', got None"
4548 assert result .id == default_project .id , (
46- f"Path '/Default/' resolved to project { result .id !r} "
47- f"but expected { default_project .id !r} "
49+ f"Path '/Default/' resolved to project { result .id !r} " f"but expected { default_project .id !r} "
4850 )
4951
5052
@@ -58,27 +60,21 @@ def test_get_by_path_returns_none_for_missing_project(server):
5860@pytest .mark .e2e_admin
5961def test_get_child_project_by_path (server_admin ):
6062 """get_by_path('Parent/Child') resolves to the correct nested child project."""
61- parent_name = "tsc-e2e-gbp-parent"
62- child_name = "tsc-e2e-gbp-child"
63+ parent_name = _unique ( "tsc-e2e-gbp-parent" )
64+ child_name = _unique ( "tsc-e2e-gbp-child" )
6365 parent = None
6466 child = None
6567 try :
6668 parent = server_admin .projects .create (TSC .ProjectItem (name = parent_name ))
67- child = server_admin .projects .create (
68- TSC .ProjectItem (name = child_name , parent_id = parent .id )
69- )
69+ child = server_admin .projects .create (TSC .ProjectItem (name = child_name , parent_id = parent .id ))
7070
7171 result = server_admin .projects .get_by_path (f"{ parent_name } /{ child_name } " )
7272
73- assert result is not None , (
74- f"Expected to find child project at path '{ parent_name } /{ child_name } ', got None"
75- )
76- assert result .id == child .id , (
77- f"get_by_path returned project { result .id !r} but expected child { child .id !r} "
78- )
79- assert result .parent_id == parent .id , (
80- f"Child project parent_id { result .parent_id !r} does not match parent { parent .id !r} "
81- )
73+ assert result is not None , f"Expected to find child project at path '{ parent_name } /{ child_name } ', got None"
74+ assert result .id == child .id , f"get_by_path returned project { result .id !r} but expected child { child .id !r} "
75+ assert (
76+ result .parent_id == parent .id
77+ ), f"Child project parent_id { result .parent_id !r} does not match parent { parent .id !r} "
8278 finally :
8379 if child is not None :
8480 server_admin .projects .delete (child .id )
@@ -89,17 +85,13 @@ def test_get_child_project_by_path(server_admin):
8985@pytest .mark .e2e_admin
9086def test_get_by_path_with_spaces_in_name (server_admin ):
9187 """get_by_path works correctly when the project name contains spaces."""
92- project_name = "TSC E2E Spaced Project"
88+ project_name = _unique ( "TSC E2E Spaced Project" )
9389 project = None
9490 try :
9591 project = server_admin .projects .create (TSC .ProjectItem (name = project_name ))
9692 result = server_admin .projects .get_by_path (project_name )
97- assert result is not None , (
98- f"Expected to find project '{ project_name } ' by path, got None"
99- )
100- assert result .name == project_name , (
101- f"Project name mismatch: expected { project_name !r} , got { result .name !r} "
102- )
93+ assert result is not None , f"Expected to find project '{ project_name } ' by path, got None"
94+ assert result .name == project_name , f"Project name mismatch: expected { project_name !r} , got { result .name !r} "
10395 assert result .id == project .id
10496 finally :
10597 if project is not None :
0 commit comments