Skip to content

Commit 352e4aa

Browse files
committed
chore: pytestify metadata
1 parent e648cd4 commit 352e4aa

File tree

1 file changed

+87
-79
lines changed

1 file changed

+87
-79
lines changed

test/test_metadata.py

Lines changed: 87 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
import json
2-
import os.path
2+
from pathlib import Path
33
import unittest
44

5+
import pytest
56
import requests_mock
67

78
import tableauserverclient as TSC
89
from tableauserverclient.server.endpoint.exceptions import GraphQLError
910

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

12-
METADATA_QUERY_SUCCESS = os.path.join(TEST_ASSET_DIR, "metadata_query_success.json")
13-
METADATA_QUERY_ERROR = os.path.join(TEST_ASSET_DIR, "metadata_query_error.json")
14-
EXPECTED_PAGED_DICT = os.path.join(TEST_ASSET_DIR, "metadata_query_expected_dict.dict")
13+
METADATA_QUERY_SUCCESS = TEST_ASSET_DIR / "metadata_query_success.json"
14+
METADATA_QUERY_ERROR = TEST_ASSET_DIR / "metadata_query_error.json"
15+
EXPECTED_PAGED_DICT = TEST_ASSET_DIR / "metadata_query_expected_dict.dict"
1516

16-
METADATA_PAGE_1 = os.path.join(TEST_ASSET_DIR, "metadata_paged_1.json")
17-
METADATA_PAGE_2 = os.path.join(TEST_ASSET_DIR, "metadata_paged_2.json")
18-
METADATA_PAGE_3 = os.path.join(TEST_ASSET_DIR, "metadata_paged_3.json")
17+
METADATA_PAGE_1 = TEST_ASSET_DIR / "metadata_paged_1.json"
18+
METADATA_PAGE_2 = TEST_ASSET_DIR / "metadata_paged_2.json"
19+
METADATA_PAGE_3 = TEST_ASSET_DIR / "metadata_paged_3.json"
1920

2021
EXPECTED_DICT = {
2122
"publishedDatasources": [
@@ -29,74 +30,81 @@
2930
EXPECTED_DICT_ERROR = [{"message": "Reached time limit of PT5S for query execution.", "path": None, "extensions": None}]
3031

3132

32-
class MetadataTests(unittest.TestCase):
33-
def setUp(self):
34-
self.server = TSC.Server("http://test", False)
35-
self.baseurl = self.server.metadata.baseurl
36-
self.server.version = "3.5"
37-
38-
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
39-
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
40-
41-
def test_metadata_query(self):
42-
with open(METADATA_QUERY_SUCCESS, "rb") as f:
43-
response_json = json.loads(f.read().decode())
44-
with requests_mock.mock() as m:
45-
m.post(self.baseurl, json=response_json)
46-
actual = self.server.metadata.query("fake query")
47-
48-
datasources = actual["data"]
49-
50-
self.assertDictEqual(EXPECTED_DICT, datasources)
51-
52-
def test_paged_metadata_query(self):
53-
with open(EXPECTED_PAGED_DICT, "rb") as f:
54-
expected = eval(f.read())
55-
56-
# prepare the 3 pages of results
57-
with open(METADATA_PAGE_1, "rb") as f:
58-
result_1 = f.read().decode()
59-
with open(METADATA_PAGE_2, "rb") as f:
60-
result_2 = f.read().decode()
61-
with open(METADATA_PAGE_3, "rb") as f:
62-
result_3 = f.read().decode()
63-
64-
with requests_mock.mock() as m:
65-
m.post(
66-
self.baseurl,
67-
[
68-
{"text": result_1, "status_code": 200},
69-
{"text": result_2, "status_code": 200},
70-
{"text": result_3, "status_code": 200},
71-
],
72-
)
73-
74-
# validation checks for endCursor and hasNextPage,
75-
# but the query text doesn't matter for the test
76-
actual = self.server.metadata.paginated_query(
77-
"fake query endCursor hasNextPage", variables={"first": 1, "afterToken": None}
78-
)
79-
80-
self.assertDictEqual(expected, actual)
81-
82-
def test_metadata_query_ignore_error(self):
83-
with open(METADATA_QUERY_ERROR, "rb") as f:
84-
response_json = json.loads(f.read().decode())
85-
with requests_mock.mock() as m:
86-
m.post(self.baseurl, json=response_json)
87-
actual = self.server.metadata.query("fake query")
88-
datasources = actual["data"]
89-
90-
self.assertNotEqual(actual.get("errors", None), None)
91-
self.assertListEqual(EXPECTED_DICT_ERROR, actual["errors"])
92-
self.assertDictEqual(EXPECTED_DICT, datasources)
93-
94-
def test_metadata_query_abort_on_error(self):
95-
with open(METADATA_QUERY_ERROR, "rb") as f:
96-
response_json = json.loads(f.read().decode())
97-
with requests_mock.mock() as m:
98-
m.post(self.baseurl, json=response_json)
99-
100-
with self.assertRaises(GraphQLError) as e:
101-
self.server.metadata.query("fake query", abort_on_error=True)
102-
self.assertListEqual(e.error, EXPECTED_DICT_ERROR)
33+
@pytest.fixture(scope="function")
34+
def server():
35+
"""Fixture to create a TSC.Server instance for testing."""
36+
server = TSC.Server("http://test", False)
37+
38+
# Fake signin
39+
server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
40+
server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
41+
server.version = "3.5"
42+
43+
return server
44+
45+
46+
def test_metadata_query(server: TSC.Server) -> None:
47+
with open(METADATA_QUERY_SUCCESS, "rb") as f:
48+
response_json = json.loads(f.read().decode())
49+
with requests_mock.mock() as m:
50+
m.post(server.metadata.baseurl, json=response_json)
51+
actual = server.metadata.query("fake query")
52+
53+
datasources = actual["data"]
54+
55+
assert EXPECTED_DICT == datasources
56+
57+
58+
def test_paged_metadata_query(server: TSC.Server) -> None:
59+
with open(EXPECTED_PAGED_DICT, "rb") as f:
60+
expected = eval(f.read())
61+
62+
# prepare the 3 pages of results
63+
with open(METADATA_PAGE_1, "rb") as f:
64+
result_1 = f.read().decode()
65+
with open(METADATA_PAGE_2, "rb") as f:
66+
result_2 = f.read().decode()
67+
with open(METADATA_PAGE_3, "rb") as f:
68+
result_3 = f.read().decode()
69+
70+
with requests_mock.mock() as m:
71+
m.post(
72+
server.metadata.baseurl,
73+
[
74+
{"text": result_1, "status_code": 200},
75+
{"text": result_2, "status_code": 200},
76+
{"text": result_3, "status_code": 200},
77+
],
78+
)
79+
80+
# validation checks for endCursor and hasNextPage,
81+
# but the query text doesn't matter for the test
82+
actual = server.metadata.paginated_query(
83+
"fake query endCursor hasNextPage", variables={"first": 1, "afterToken": None}
84+
)
85+
86+
assert expected == actual
87+
88+
89+
def test_metadata_query_ignore_error(server: TSC.Server) -> None:
90+
with open(METADATA_QUERY_ERROR, "rb") as f:
91+
response_json = json.loads(f.read().decode())
92+
with requests_mock.mock() as m:
93+
m.post(server.metadata.baseurl, json=response_json)
94+
actual = server.metadata.query("fake query")
95+
datasources = actual["data"]
96+
97+
assert actual.get("errors", None) is not None
98+
assert EXPECTED_DICT_ERROR == actual["errors"]
99+
assert EXPECTED_DICT == datasources
100+
101+
102+
def test_metadata_query_abort_on_error(server: TSC.Server) -> None:
103+
with open(METADATA_QUERY_ERROR, "rb") as f:
104+
response_json = json.loads(f.read().decode())
105+
with requests_mock.mock() as m:
106+
m.post(server.metadata.baseurl, json=response_json)
107+
108+
with pytest.raises(GraphQLError) as e:
109+
server.metadata.query("fake query", abort_on_error=True)
110+
assert e.error == EXPECTED_DICT_ERROR # type: ignore[attr-defined]

0 commit comments

Comments
 (0)