Skip to content

Commit 436e84b

Browse files
committed
chore: pytestify requests
1 parent 4417beb commit 436e84b

File tree

1 file changed

+57
-53
lines changed

1 file changed

+57
-53
lines changed

test/test_requests.py

Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,65 @@
1-
import re
2-
import unittest
1+
from urllib.parse import parse_qs
32

3+
import pytest
44
import requests
55
import requests_mock
66

77
import tableauserverclient as TSC
88
from tableauserverclient.server.endpoint.exceptions import InternalServerError, NonXMLResponseError
99

1010

11-
class RequestTests(unittest.TestCase):
12-
def setUp(self):
13-
self.server = TSC.Server("http://test", False)
14-
15-
# Fake sign in
16-
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
17-
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
18-
19-
self.baseurl = self.server.workbooks.baseurl
20-
21-
def test_make_get_request(self):
22-
with requests_mock.mock() as m:
23-
m.get(requests_mock.ANY)
24-
url = "http://test/api/2.3/sites/dad65087-b08b-4603-af4e-2887b8aafc67/workbooks"
25-
opts = TSC.RequestOptions(pagesize=13, pagenumber=15)
26-
resp = self.server.workbooks.get_request(url, request_object=opts)
27-
28-
self.assertTrue(re.search("pagesize=13", resp.request.query))
29-
self.assertTrue(re.search("pagenumber=15", resp.request.query))
30-
31-
def test_make_post_request(self):
32-
with requests_mock.mock() as m:
33-
m.post(requests_mock.ANY)
34-
url = "http://test/api/2.3/sites/dad65087-b08b-4603-af4e-2887b8aafc67/workbooks"
35-
resp = self.server.workbooks._make_request(
36-
requests.post,
37-
url,
38-
content=b"1337",
39-
auth_token="j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM",
40-
content_type="multipart/mixed",
41-
)
42-
self.assertEqual(resp.request.headers["x-tableau-auth"], "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM")
43-
self.assertEqual(resp.request.headers["content-type"], "multipart/mixed")
44-
self.assertTrue(re.search("Tableau Server Client", resp.request.headers["user-agent"]))
45-
self.assertEqual(resp.request.body, b"1337")
46-
47-
# Test that 500 server errors are handled properly
48-
def test_internal_server_error(self):
49-
self.server.version = "3.2"
50-
server_response = "500: Internal Server Error"
51-
with requests_mock.mock() as m:
52-
m.register_uri("GET", self.server.server_info.baseurl, status_code=500, text=server_response)
53-
self.assertRaisesRegex(InternalServerError, server_response, self.server.server_info.get)
54-
55-
# Test that non-xml server errors are handled properly
56-
def test_non_xml_error(self):
57-
self.server.version = "3.2"
58-
server_response = "this is not xml"
59-
with requests_mock.mock() as m:
60-
m.register_uri("GET", self.server.server_info.baseurl, status_code=499, text=server_response)
61-
self.assertRaisesRegex(NonXMLResponseError, server_response, self.server.server_info.get)
11+
@pytest.fixture(scope="function")
12+
def server():
13+
"""Fixture to create a TSC.Server instance for testing."""
14+
server = TSC.Server("http://test", False)
15+
16+
# Fake signin
17+
server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
18+
server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
19+
20+
return server
21+
22+
def test_make_get_request(server: TSC.Server) -> None:
23+
with requests_mock.mock() as m:
24+
m.get(requests_mock.ANY)
25+
url = "http://test/api/2.3/sites/dad65087-b08b-4603-af4e-2887b8aafc67/workbooks"
26+
opts = TSC.RequestOptions(pagesize=13, pagenumber=15)
27+
resp = server.workbooks.get_request(url, request_object=opts)
28+
29+
query = parse_qs(resp.request.query)
30+
assert query.get("pagesize") == ["13"]
31+
assert query.get("pagenumber") == ["15"]
32+
33+
def test_make_post_request(server: TSC.Server) -> None:
34+
with requests_mock.mock() as m:
35+
m.post(requests_mock.ANY)
36+
url = "http://test/api/2.3/sites/dad65087-b08b-4603-af4e-2887b8aafc67/workbooks"
37+
resp = server.workbooks._make_request(
38+
requests.post,
39+
url,
40+
content=b"1337",
41+
auth_token="j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM",
42+
content_type="multipart/mixed",
43+
)
44+
assert resp.request.headers["x-tableau-auth"] == "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
45+
assert resp.request.headers["content-type"] == "multipart/mixed"
46+
assert "Tableau Server Client" in resp.request.headers["user-agent"]
47+
assert resp.request.body == b"1337"
48+
49+
# Test that 500 server errors are handled properly
50+
def test_internal_server_error(server: TSC.Server) -> None:
51+
server.version = "3.2"
52+
server_response = "500: Internal Server Error"
53+
with requests_mock.mock() as m:
54+
m.register_uri("GET", server.server_info.baseurl, status_code=500, text=server_response)
55+
with pytest.raises(InternalServerError, match=server_response):
56+
server.server_info.get()
57+
58+
# Test that non-xml server errors are handled properly
59+
def test_non_xml_error(server: TSC.Server) -> None:
60+
server.version = "3.2"
61+
server_response = "this is not xml"
62+
with requests_mock.mock() as m:
63+
m.register_uri("GET", server.server_info.baseurl, status_code=499, text=server_response)
64+
with pytest.raises(NonXMLResponseError, match=server_response):
65+
server.server_info.get()

0 commit comments

Comments
 (0)