Skip to content

Commit 234b5d6

Browse files
committed
chore: pytestify favorites
1 parent cba111a commit 234b5d6

File tree

2 files changed

+141
-125
lines changed

2 files changed

+141
-125
lines changed

pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ repository = "https://github.com/tableau/server-client-python"
3333

3434
[project.optional-dependencies]
3535
test = ["black==24.8", "build", "mypy==1.4", "pytest>=7.0", "pytest-cov", "pytest-subtests",
36-
"requests-mock>=1.0,<2.0"]
37-
36+
"requests-mock>=1.0,<2.0", "types-requests>=2.32.4.20250913"]
3837
[tool.black]
3938
line-length = 120
4039
target-version = ['py39', 'py310', 'py311', 'py312', 'py313']

test/test_favorites.py

Lines changed: 140 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,148 @@
1+
from pathlib import Path
12
import unittest
23

4+
import pytest
35
import requests_mock
46

57
import tableauserverclient as TSC
68
from tableauserverclient.datetime_helpers import parse_datetime
79
from ._utils import read_xml_asset
810

9-
GET_FAVORITES_XML = "favorites_get.xml"
10-
ADD_FAVORITE_WORKBOOK_XML = "favorites_add_workbook.xml"
11-
ADD_FAVORITE_VIEW_XML = "favorites_add_view.xml"
12-
ADD_FAVORITE_DATASOURCE_XML = "favorites_add_datasource.xml"
13-
ADD_FAVORITE_PROJECT_XML = "favorites_add_project.xml"
14-
15-
16-
class FavoritesTests(unittest.TestCase):
17-
def setUp(self):
18-
self.server = TSC.Server("http://test", False)
19-
self.server.version = "2.5"
20-
21-
# Fake signin
22-
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
23-
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
24-
25-
self.baseurl = self.server.favorites.baseurl
26-
self.user = TSC.UserItem("alice", TSC.UserItem.Roles.Viewer)
27-
self.user._id = "dd2239f6-ddf1-4107-981a-4cf94e415794"
28-
29-
def test_get(self) -> None:
30-
response_xml = read_xml_asset(GET_FAVORITES_XML)
31-
with requests_mock.mock() as m:
32-
m.get(f"{self.baseurl}/{self.user.id}", text=response_xml)
33-
self.server.favorites.get(self.user)
34-
self.assertIsNotNone(self.user._favorites)
35-
self.assertEqual(len(self.user.favorites["workbooks"]), 1)
36-
self.assertEqual(len(self.user.favorites["views"]), 1)
37-
self.assertEqual(len(self.user.favorites["projects"]), 1)
38-
self.assertEqual(len(self.user.favorites["datasources"]), 1)
39-
40-
workbook = self.user.favorites["workbooks"][0]
41-
print("favorited: ")
42-
print(workbook)
43-
view = self.user.favorites["views"][0]
44-
datasource = self.user.favorites["datasources"][0]
45-
project = self.user.favorites["projects"][0]
46-
47-
self.assertEqual(workbook.id, "6d13b0ca-043d-4d42-8c9d-3f3313ea3a00")
48-
self.assertEqual(view.id, "d79634e1-6063-4ec9-95ff-50acbf609ff5")
49-
self.assertEqual(datasource.id, "e76a1461-3b1d-4588-bf1b-17551a879ad9")
50-
self.assertEqual(project.id, "1d0304cd-3796-429f-b815-7258370b9b74")
51-
52-
collection = self.user.favorites["collections"][0]
53-
54-
assert collection.id == "8c57cb8a-d65f-4a32-813e-5a3f86e8f94e"
55-
assert collection.name == "sample collection"
56-
assert collection.description == "description for sample collection"
57-
assert collection.total_item_count == 3
58-
assert collection.permissioned_item_count == 2
59-
assert collection.visibility == "Private"
60-
assert collection.created_at == parse_datetime("2016-08-11T21:22:40Z")
61-
assert collection.updated_at == parse_datetime("2016-08-11T21:34:17Z")
62-
63-
def test_add_favorite_workbook(self) -> None:
64-
response_xml = read_xml_asset(ADD_FAVORITE_WORKBOOK_XML)
65-
workbook = TSC.WorkbookItem("")
66-
workbook._id = "6d13b0ca-043d-4d42-8c9d-3f3313ea3a00"
67-
workbook.name = "Superstore"
68-
with requests_mock.mock() as m:
69-
m.put(f"{self.baseurl}/{self.user.id}", text=response_xml)
70-
self.server.favorites.add_favorite_workbook(self.user, workbook)
71-
72-
def test_add_favorite_view(self) -> None:
73-
response_xml = read_xml_asset(ADD_FAVORITE_VIEW_XML)
74-
view = TSC.ViewItem()
75-
view._id = "d79634e1-6063-4ec9-95ff-50acbf609ff5"
76-
view._name = "ENDANGERED SAFARI"
77-
with requests_mock.mock() as m:
78-
m.put(f"{self.baseurl}/{self.user.id}", text=response_xml)
79-
self.server.favorites.add_favorite_view(self.user, view)
80-
81-
def test_add_favorite_datasource(self) -> None:
82-
response_xml = read_xml_asset(ADD_FAVORITE_DATASOURCE_XML)
83-
datasource = TSC.DatasourceItem("ee8c6e70-43b6-11e6-af4f-f7b0d8e20760")
84-
datasource._id = "e76a1461-3b1d-4588-bf1b-17551a879ad9"
85-
datasource.name = "SampleDS"
86-
with requests_mock.mock() as m:
87-
m.put(f"{self.baseurl}/{self.user.id}", text=response_xml)
88-
self.server.favorites.add_favorite_datasource(self.user, datasource)
89-
90-
def test_add_favorite_project(self) -> None:
91-
self.server.version = "3.1"
92-
baseurl = self.server.favorites.baseurl
93-
response_xml = read_xml_asset(ADD_FAVORITE_PROJECT_XML)
94-
project = TSC.ProjectItem("Tableau")
95-
project._id = "1d0304cd-3796-429f-b815-7258370b9b74"
96-
with requests_mock.mock() as m:
97-
m.put(f"{baseurl}/{self.user.id}", text=response_xml)
98-
self.server.favorites.add_favorite_project(self.user, project)
99-
100-
def test_delete_favorite_workbook(self) -> None:
101-
workbook = TSC.WorkbookItem("")
102-
workbook._id = "6d13b0ca-043d-4d42-8c9d-3f3313ea3a00"
103-
workbook.name = "Superstore"
104-
with requests_mock.mock() as m:
105-
m.delete(f"{self.baseurl}/{self.user.id}/workbooks/{workbook.id}")
106-
self.server.favorites.delete_favorite_workbook(self.user, workbook)
107-
108-
def test_delete_favorite_view(self) -> None:
109-
view = TSC.ViewItem()
110-
view._id = "d79634e1-6063-4ec9-95ff-50acbf609ff5"
111-
view._name = "ENDANGERED SAFARI"
112-
with requests_mock.mock() as m:
113-
m.delete(f"{self.baseurl}/{self.user.id}/views/{view.id}")
114-
self.server.favorites.delete_favorite_view(self.user, view)
115-
116-
def test_delete_favorite_datasource(self) -> None:
117-
datasource = TSC.DatasourceItem("ee8c6e70-43b6-11e6-af4f-f7b0d8e20760")
118-
datasource._id = "e76a1461-3b1d-4588-bf1b-17551a879ad9"
119-
datasource.name = "SampleDS"
120-
with requests_mock.mock() as m:
121-
m.delete(f"{self.baseurl}/{self.user.id}/datasources/{datasource.id}")
122-
self.server.favorites.delete_favorite_datasource(self.user, datasource)
123-
124-
def test_delete_favorite_project(self) -> None:
125-
self.server.version = "3.1"
126-
baseurl = self.server.favorites.baseurl
127-
project = TSC.ProjectItem("Tableau")
128-
project._id = "1d0304cd-3796-429f-b815-7258370b9b74"
129-
with requests_mock.mock() as m:
130-
m.delete(f"{baseurl}/{self.user.id}/projects/{project.id}")
131-
self.server.favorites.delete_favorite_project(self.user, project)
11+
TEST_ASSET_DIR = Path(__file__).parent / "assets"
12+
13+
GET_FAVORITES_XML = TEST_ASSET_DIR / "favorites_get.xml"
14+
ADD_FAVORITE_WORKBOOK_XML = TEST_ASSET_DIR / "favorites_add_workbook.xml"
15+
ADD_FAVORITE_VIEW_XML = TEST_ASSET_DIR / "favorites_add_view.xml"
16+
ADD_FAVORITE_DATASOURCE_XML = TEST_ASSET_DIR / "favorites_add_datasource.xml"
17+
ADD_FAVORITE_PROJECT_XML = TEST_ASSET_DIR / "favorites_add_project.xml"
18+
19+
20+
@pytest.fixture(scope="function")
21+
def server() -> TSC.Server:
22+
server = TSC.Server("http://test", False)
23+
# Fake signin
24+
server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
25+
server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
26+
server.version = "3.5"
27+
28+
return server
29+
30+
31+
@pytest.fixture(scope="function")
32+
def user() -> TSC.UserItem:
33+
user = TSC.UserItem("alice", TSC.UserItem.Roles.Viewer)
34+
user._id = "dd2239f6-ddf1-4107-981a-4cf94e415794"
35+
return user
36+
37+
38+
def test_get(server: TSC.Server, user: TSC.UserItem) -> None:
39+
response_xml = GET_FAVORITES_XML.read_text()
40+
with requests_mock.mock() as m:
41+
m.get(f"{server.favorites.baseurl}/{user.id}", text=response_xml)
42+
server.favorites.get(user)
43+
assert user._favorites is not None
44+
assert len(user.favorites["workbooks"]) == 1
45+
assert len(user.favorites["views"]) == 1
46+
assert len(user.favorites["projects"]) == 1
47+
assert len(user.favorites["datasources"]) == 1
48+
49+
workbook = user.favorites["workbooks"][0]
50+
print("favorited: ")
51+
print(workbook)
52+
view = user.favorites["views"][0]
53+
datasource = user.favorites["datasources"][0]
54+
project = user.favorites["projects"][0]
55+
56+
assert workbook.id == "6d13b0ca-043d-4d42-8c9d-3f3313ea3a00"
57+
assert view.id == "d79634e1-6063-4ec9-95ff-50acbf609ff5"
58+
assert datasource.id == "e76a1461-3b1d-4588-bf1b-17551a879ad9"
59+
assert project.id == "1d0304cd-3796-429f-b815-7258370b9b74"
60+
61+
collection = user.favorites["collections"][0]
62+
63+
assert collection.id == "8c57cb8a-d65f-4a32-813e-5a3f86e8f94e"
64+
assert collection.name == "sample collection"
65+
assert collection.description == "description for sample collection"
66+
assert collection.total_item_count == 3
67+
assert collection.permissioned_item_count == 2
68+
assert collection.visibility == "Private"
69+
assert collection.created_at == parse_datetime("2016-08-11T21:22:40Z")
70+
assert collection.updated_at == parse_datetime("2016-08-11T21:34:17Z")
71+
72+
73+
def test_add_favorite_workbook(server: TSC.Server, user: TSC.UserItem) -> None:
74+
response_xml = ADD_FAVORITE_WORKBOOK_XML.read_text()
75+
workbook = TSC.WorkbookItem("")
76+
workbook._id = "6d13b0ca-043d-4d42-8c9d-3f3313ea3a00"
77+
workbook.name = "Superstore"
78+
with requests_mock.mock() as m:
79+
m.put(f"{server.favorites.baseurl}/{user.id}", text=response_xml)
80+
server.favorites.add_favorite_workbook(user, workbook)
81+
82+
83+
def test_add_favorite_view(server: TSC.Server, user: TSC.UserItem) -> None:
84+
response_xml = ADD_FAVORITE_VIEW_XML.read_text()
85+
view = TSC.ViewItem()
86+
view._id = "d79634e1-6063-4ec9-95ff-50acbf609ff5"
87+
view._name = "ENDANGERED SAFARI"
88+
with requests_mock.mock() as m:
89+
m.put(f"{server.favorites.baseurl}/{user.id}", text=response_xml)
90+
server.favorites.add_favorite_view(user, view)
91+
92+
93+
def test_add_favorite_datasource(server: TSC.Server, user: TSC.UserItem) -> None:
94+
response_xml = ADD_FAVORITE_DATASOURCE_XML.read_text()
95+
datasource = TSC.DatasourceItem("ee8c6e70-43b6-11e6-af4f-f7b0d8e20760")
96+
datasource._id = "e76a1461-3b1d-4588-bf1b-17551a879ad9"
97+
datasource.name = "SampleDS"
98+
with requests_mock.mock() as m:
99+
m.put(f"{server.favorites.baseurl}/{user.id}", text=response_xml)
100+
server.favorites.add_favorite_datasource(user, datasource)
101+
102+
103+
def test_add_favorite_project(server: TSC.Server, user: TSC.UserItem) -> None:
104+
server.version = "3.1"
105+
baseurl = server.favorites.baseurl
106+
response_xml = ADD_FAVORITE_PROJECT_XML.read_text()
107+
project = TSC.ProjectItem("Tableau")
108+
project._id = "1d0304cd-3796-429f-b815-7258370b9b74"
109+
with requests_mock.mock() as m:
110+
m.put(f"{baseurl}/{user.id}", text=response_xml)
111+
server.favorites.add_favorite_project(user, project)
112+
113+
114+
def test_delete_favorite_workbook(server: TSC.Server, user: TSC.UserItem) -> None:
115+
workbook = TSC.WorkbookItem("")
116+
workbook._id = "6d13b0ca-043d-4d42-8c9d-3f3313ea3a00"
117+
workbook.name = "Superstore"
118+
with requests_mock.mock() as m:
119+
m.delete(f"{server.favorites.baseurl}/{user.id}/workbooks/{workbook.id}")
120+
server.favorites.delete_favorite_workbook(user, workbook)
121+
122+
123+
def test_delete_favorite_view(server: TSC.Server, user: TSC.UserItem) -> None:
124+
view = TSC.ViewItem()
125+
view._id = "d79634e1-6063-4ec9-95ff-50acbf609ff5"
126+
view._name = "ENDANGERED SAFARI"
127+
with requests_mock.mock() as m:
128+
m.delete(f"{server.favorites.baseurl}/{user.id}/views/{view.id}")
129+
server.favorites.delete_favorite_view(user, view)
130+
131+
132+
def test_delete_favorite_datasource(server: TSC.Server, user: TSC.UserItem) -> None:
133+
datasource = TSC.DatasourceItem("ee8c6e70-43b6-11e6-af4f-f7b0d8e20760")
134+
datasource._id = "e76a1461-3b1d-4588-bf1b-17551a879ad9"
135+
datasource.name = "SampleDS"
136+
with requests_mock.mock() as m:
137+
m.delete(f"{server.favorites.baseurl}/{user.id}/datasources/{datasource.id}")
138+
server.favorites.delete_favorite_datasource(user, datasource)
139+
140+
141+
def test_delete_favorite_project(server: TSC.Server, user: TSC.UserItem) -> None:
142+
server.version = "3.1"
143+
baseurl = server.favorites.baseurl
144+
project = TSC.ProjectItem("Tableau")
145+
project._id = "1d0304cd-3796-429f-b815-7258370b9b74"
146+
with requests_mock.mock() as m:
147+
m.delete(f"{baseurl}/{user.id}/projects/{project.id}")
148+
server.favorites.delete_favorite_project(user, project)

0 commit comments

Comments
 (0)