Skip to content

Commit e3f1808

Browse files
committed
chore: pytestify favorites
1 parent cba111a commit e3f1808

File tree

2 files changed

+142
-128
lines changed

2 files changed

+142
-128
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: 141 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,146 @@
1-
import unittest
1+
from pathlib import Path
22

3+
import pytest
34
import requests_mock
45

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

0 commit comments

Comments
 (0)