Skip to content

Commit 1b16b4d

Browse files
committed
chore: pytestify pager
1 parent 4417beb commit 1b16b4d

File tree

1 file changed

+115
-113
lines changed

1 file changed

+115
-113
lines changed

test/test_pager.py

Lines changed: 115 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,32 @@
11
import contextlib
22
import os
3-
import unittest
3+
from pathlib import Path
44
import xml.etree.ElementTree as ET
55

6+
import pytest
67
import requests_mock
78

89
import tableauserverclient as TSC
910
from tableauserverclient.config import config
1011

11-
TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), "assets")
12+
TEST_ASSET_DIR = Path(__file__).parent / "assets"
1213

13-
GET_VIEW_XML = os.path.join(TEST_ASSET_DIR, "view_get.xml")
14-
GET_XML_PAGE1 = os.path.join(TEST_ASSET_DIR, "workbook_get_page_1.xml")
15-
GET_XML_PAGE2 = os.path.join(TEST_ASSET_DIR, "workbook_get_page_2.xml")
16-
GET_XML_PAGE3 = os.path.join(TEST_ASSET_DIR, "workbook_get_page_3.xml")
14+
GET_VIEW_XML = TEST_ASSET_DIR / "view_get.xml"
15+
GET_XML_PAGE1 = TEST_ASSET_DIR / "workbook_get_page_1.xml"
16+
GET_XML_PAGE2 = TEST_ASSET_DIR / "workbook_get_page_2.xml"
17+
GET_XML_PAGE3 = TEST_ASSET_DIR / "workbook_get_page_3.xml"
18+
19+
20+
@pytest.fixture(scope="function")
21+
def server():
22+
"""Fixture to create a TSC.Server instance for testing."""
23+
server = TSC.Server("http://test", False)
24+
25+
# Fake signin
26+
server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
27+
server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
28+
29+
return server
1730

1831

1932
@contextlib.contextmanager
@@ -27,110 +40,99 @@ def set_env(**environ):
2740
os.environ.update(old_environ)
2841

2942

30-
class PagerTests(unittest.TestCase):
31-
def setUp(self):
32-
self.server = TSC.Server("http://test", False)
33-
34-
# Fake sign in
35-
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
36-
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
37-
38-
self.baseurl = self.server.workbooks.baseurl
39-
40-
def test_pager_with_no_options(self) -> None:
41-
with open(GET_XML_PAGE1, "rb") as f:
42-
page_1 = f.read().decode("utf-8")
43-
with open(GET_XML_PAGE2, "rb") as f:
44-
page_2 = f.read().decode("utf-8")
45-
with open(GET_XML_PAGE3, "rb") as f:
46-
page_3 = f.read().decode("utf-8")
47-
with requests_mock.mock() as m:
48-
# Register Pager with default request options
49-
m.get(self.baseurl, text=page_1)
50-
51-
# Register Pager with some pages
52-
m.get(self.baseurl + "?pageNumber=1&pageSize=1", text=page_1)
53-
m.get(self.baseurl + "?pageNumber=2&pageSize=1", text=page_2)
54-
m.get(self.baseurl + "?pageNumber=3&pageSize=1", text=page_3)
55-
56-
# No options should get all 3
57-
workbooks = list(TSC.Pager(self.server.workbooks))
58-
self.assertTrue(len(workbooks) == 3)
59-
60-
# Let's check that workbook items aren't duplicates
61-
wb1, wb2, wb3 = workbooks
62-
self.assertEqual(wb1.name, "Page1Workbook")
63-
self.assertEqual(wb2.name, "Page2Workbook")
64-
self.assertEqual(wb3.name, "Page3Workbook")
65-
66-
def test_pager_with_options(self) -> None:
67-
with open(GET_XML_PAGE1, "rb") as f:
68-
page_1 = f.read().decode("utf-8")
69-
with open(GET_XML_PAGE2, "rb") as f:
70-
page_2 = f.read().decode("utf-8")
71-
with open(GET_XML_PAGE3, "rb") as f:
72-
page_3 = f.read().decode("utf-8")
73-
with requests_mock.mock() as m:
74-
# Register Pager with some pages
75-
m.get(self.baseurl + "?pageNumber=1&pageSize=1", complete_qs=True, text=page_1)
76-
m.get(self.baseurl + "?pageNumber=2&pageSize=1", complete_qs=True, text=page_2)
77-
m.get(self.baseurl + "?pageNumber=3&pageSize=1", complete_qs=True, text=page_3)
78-
m.get(self.baseurl + "?pageNumber=1&pageSize=3", complete_qs=True, text=page_1)
79-
80-
# Starting on page 2 should get 2 out of 3
81-
opts = TSC.RequestOptions(2, 1)
82-
workbooks = list(TSC.Pager(self.server.workbooks, opts))
83-
self.assertTrue(len(workbooks) == 2)
84-
85-
# Check that the workbooks are the 2 we think they should be
86-
wb2, wb3 = workbooks
87-
self.assertEqual(wb2.name, "Page2Workbook")
88-
self.assertEqual(wb3.name, "Page3Workbook")
89-
90-
# Starting on 1 with pagesize of 3 should get all 3
91-
opts = TSC.RequestOptions(1, 3)
92-
workbooks = list(TSC.Pager(self.server.workbooks, opts))
93-
self.assertTrue(len(workbooks) == 3)
94-
wb1, wb2, wb3 = workbooks
95-
self.assertEqual(wb1.name, "Page1Workbook")
96-
self.assertEqual(wb2.name, "Page2Workbook")
97-
self.assertEqual(wb3.name, "Page3Workbook")
98-
99-
# Starting on 3 with pagesize of 1 should get the last item
100-
opts = TSC.RequestOptions(3, 1)
101-
workbooks = list(TSC.Pager(self.server.workbooks, opts))
102-
self.assertTrue(len(workbooks) == 1)
103-
# Should have the last workbook
104-
wb3 = workbooks.pop()
105-
self.assertEqual(wb3.name, "Page3Workbook")
106-
107-
def test_pager_with_env_var(self) -> None:
108-
with set_env(TSC_PAGE_SIZE="1000"):
109-
assert config.PAGE_SIZE == 1000
110-
loop = TSC.Pager(self.server.workbooks)
111-
assert loop._options.pagesize == 1000
112-
113-
def test_queryset_with_env_var(self) -> None:
114-
with set_env(TSC_PAGE_SIZE="1000"):
115-
assert config.PAGE_SIZE == 1000
116-
loop = self.server.workbooks.all()
117-
assert loop.request_options.pagesize == 1000
118-
119-
def test_pager_view(self) -> None:
120-
with open(GET_VIEW_XML, "rb") as f:
121-
view_xml = f.read().decode("utf-8")
122-
with requests_mock.mock() as m:
123-
m.get(self.server.views.baseurl, text=view_xml)
124-
for view in TSC.Pager(self.server.views):
125-
assert view.name is not None
126-
127-
def test_queryset_no_matches(self) -> None:
128-
elem = ET.Element("tsResponse", xmlns="http://tableau.com/api")
129-
ET.SubElement(elem, "pagination", totalAvailable="0")
130-
ET.SubElement(elem, "groups")
131-
xml = ET.tostring(elem).decode("utf-8")
132-
with requests_mock.mock() as m:
133-
m.get(self.server.groups.baseurl, text=xml)
134-
all_groups = self.server.groups.all()
135-
groups = list(all_groups)
136-
assert len(groups) == 0
43+
def test_pager_with_no_options(server: TSC.Server) -> None:
44+
page_1 = GET_XML_PAGE1.read_text()
45+
page_2 = GET_XML_PAGE2.read_text()
46+
page_3 = GET_XML_PAGE3.read_text()
47+
with requests_mock.mock() as m:
48+
# Register Pager with default request options
49+
m.get(server.workbooks.baseurl, text=page_1)
50+
51+
# Register Pager with some pages
52+
m.get(server.workbooks.baseurl + "?pageNumber=1&pageSize=1", text=page_1)
53+
m.get(server.workbooks.baseurl + "?pageNumber=2&pageSize=1", text=page_2)
54+
m.get(server.workbooks.baseurl + "?pageNumber=3&pageSize=1", text=page_3)
55+
56+
# No options should get all 3
57+
workbooks = list(TSC.Pager(server.workbooks))
58+
assert len(workbooks) == 3
59+
60+
# Let's check that workbook items aren't duplicates
61+
wb1, wb2, wb3 = workbooks
62+
assert wb1.name == "Page1Workbook"
63+
assert wb2.name == "Page2Workbook"
64+
assert wb3.name == "Page3Workbook"
65+
66+
67+
def test_pager_with_options(server: TSC.Server) -> None:
68+
page_1 = GET_XML_PAGE1.read_text()
69+
page_2 = GET_XML_PAGE2.read_text()
70+
page_3 = GET_XML_PAGE3.read_text()
71+
with requests_mock.mock() as m:
72+
# Register Pager with some pages
73+
m.get(server.workbooks.baseurl + "?pageNumber=1&pageSize=1", complete_qs=True, text=page_1)
74+
m.get(server.workbooks.baseurl + "?pageNumber=2&pageSize=1", complete_qs=True, text=page_2)
75+
m.get(server.workbooks.baseurl + "?pageNumber=3&pageSize=1", complete_qs=True, text=page_3)
76+
m.get(server.workbooks.baseurl + "?pageNumber=1&pageSize=3", complete_qs=True, text=page_1)
77+
78+
# Starting on page 2 should get 2 out of 3
79+
opts = TSC.RequestOptions(2, 1)
80+
workbooks = list(TSC.Pager(server.workbooks, opts))
81+
assert len(workbooks) == 2
82+
83+
# Check that the workbooks are the 2 we think they should be
84+
wb2, wb3 = workbooks
85+
assert wb2.name == "Page2Workbook"
86+
assert wb3.name == "Page3Workbook"
87+
88+
# Starting on 1 with pagesize of 3 should get all 3
89+
opts = TSC.RequestOptions(1, 3)
90+
workbooks = list(TSC.Pager(server.workbooks, opts))
91+
assert len(workbooks) == 3
92+
wb1, wb2, wb3 = workbooks
93+
assert wb1.name == "Page1Workbook"
94+
assert wb2.name == "Page2Workbook"
95+
assert wb3.name == "Page3Workbook"
96+
97+
# Starting on 3 with pagesize of 1 should get the last item
98+
opts = TSC.RequestOptions(3, 1)
99+
workbooks = list(TSC.Pager(server.workbooks, opts))
100+
assert len(workbooks) == 1
101+
# Should have the last workbook
102+
wb3 = workbooks.pop()
103+
assert wb3.name == "Page3Workbook"
104+
105+
106+
def test_pager_with_env_var(server: TSC.Server) -> None:
107+
with set_env(TSC_PAGE_SIZE="1000"):
108+
assert config.PAGE_SIZE == 1000
109+
loop = TSC.Pager(server.workbooks)
110+
assert loop._options.pagesize == 1000
111+
112+
113+
def test_queryset_with_env_var(server: TSC.Server) -> None:
114+
with set_env(TSC_PAGE_SIZE="1000"):
115+
assert config.PAGE_SIZE == 1000
116+
loop = server.workbooks.all()
117+
assert loop.request_options.pagesize == 1000
118+
119+
120+
def test_pager_view(server: TSC.Server) -> None:
121+
with open(GET_VIEW_XML, "rb") as f:
122+
view_xml = f.read().decode("utf-8")
123+
with requests_mock.mock() as m:
124+
m.get(server.views.baseurl, text=view_xml)
125+
for view in TSC.Pager(server.views):
126+
assert view.name is not None
127+
128+
129+
def test_queryset_no_matches(server: TSC.Server) -> None:
130+
elem = ET.Element("tsResponse", xmlns="http://tableau.com/api")
131+
ET.SubElement(elem, "pagination", totalAvailable="0")
132+
ET.SubElement(elem, "groups")
133+
xml = ET.tostring(elem).decode("utf-8")
134+
with requests_mock.mock() as m:
135+
m.get(server.groups.baseurl, text=xml)
136+
all_groups = server.groups.all()
137+
groups = list(all_groups)
138+
assert len(groups) == 0

0 commit comments

Comments
 (0)