Skip to content

Commit fc46f70

Browse files
committed
chore: pytestify task
1 parent e648cd4 commit fc46f70

File tree

1 file changed

+181
-171
lines changed

1 file changed

+181
-171
lines changed

test/test_task.py

Lines changed: 181 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import os
2-
import unittest
31
from datetime import time
42
from pathlib import Path
53

4+
import pytest
65
import requests_mock
76

87
import tableauserverclient as TSC
@@ -11,179 +10,190 @@
1110

1211
TEST_ASSET_DIR = Path(__file__).parent / "assets"
1312

14-
GET_XML_NO_WORKBOOK = os.path.join(TEST_ASSET_DIR, "tasks_no_workbook_or_datasource.xml")
15-
GET_XML_WITH_WORKBOOK = os.path.join(TEST_ASSET_DIR, "tasks_with_workbook.xml")
16-
GET_XML_WITH_DATASOURCE = os.path.join(TEST_ASSET_DIR, "tasks_with_datasource.xml")
17-
GET_XML_WITH_WORKBOOK_AND_DATASOURCE = os.path.join(TEST_ASSET_DIR, "tasks_with_workbook_and_datasource.xml")
18-
GET_XML_DATAACCELERATION_TASK = os.path.join(TEST_ASSET_DIR, "tasks_with_dataacceleration_task.xml")
19-
GET_XML_RUN_NOW_RESPONSE = os.path.join(TEST_ASSET_DIR, "tasks_run_now_response.xml")
20-
GET_XML_CREATE_TASK_RESPONSE = os.path.join(TEST_ASSET_DIR, "tasks_create_extract_task.xml")
13+
GET_XML_NO_WORKBOOK = TEST_ASSET_DIR / "tasks_no_workbook_or_datasource.xml"
14+
GET_XML_WITH_WORKBOOK = TEST_ASSET_DIR / "tasks_with_workbook.xml"
15+
GET_XML_WITH_DATASOURCE = TEST_ASSET_DIR / "tasks_with_datasource.xml"
16+
GET_XML_WITH_WORKBOOK_AND_DATASOURCE = TEST_ASSET_DIR / "tasks_with_workbook_and_datasource.xml"
17+
GET_XML_DATAACCELERATION_TASK = TEST_ASSET_DIR / "tasks_with_dataacceleration_task.xml"
18+
GET_XML_RUN_NOW_RESPONSE = TEST_ASSET_DIR / "tasks_run_now_response.xml"
19+
GET_XML_CREATE_TASK_RESPONSE = TEST_ASSET_DIR / "tasks_create_extract_task.xml"
2120
GET_XML_WITHOUT_SCHEDULE = TEST_ASSET_DIR / "tasks_without_schedule.xml"
2221
GET_XML_WITH_INTERVAL = TEST_ASSET_DIR / "tasks_with_interval.xml"
2322

2423

25-
class TaskTests(unittest.TestCase):
26-
def setUp(self):
27-
self.server = TSC.Server("http://test", False)
28-
self.server.version = "3.19"
29-
30-
# Fake Signin
31-
self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
32-
self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
33-
34-
# default task type is extractRefreshes
35-
self.baseurl = "{}/{}".format(self.server.tasks.baseurl, "extractRefreshes")
36-
37-
def test_get_tasks_with_no_workbook(self):
38-
with open(GET_XML_NO_WORKBOOK, "rb") as f:
39-
response_xml = f.read().decode("utf-8")
40-
with requests_mock.mock() as m:
41-
m.get(self.baseurl, text=response_xml)
42-
all_tasks, pagination_item = self.server.tasks.get()
43-
44-
task = all_tasks[0]
45-
self.assertEqual(None, task.target)
46-
47-
def test_get_tasks_with_workbook(self):
48-
with open(GET_XML_WITH_WORKBOOK, "rb") as f:
49-
response_xml = f.read().decode("utf-8")
50-
with requests_mock.mock() as m:
51-
m.get(self.baseurl, text=response_xml)
52-
all_tasks, pagination_item = self.server.tasks.get()
53-
54-
task = all_tasks[0]
55-
self.assertEqual("c7a9327e-1cda-4504-b026-ddb43b976d1d", task.target.id)
56-
self.assertEqual("workbook", task.target.type)
57-
58-
def test_get_tasks_with_datasource(self):
59-
with open(GET_XML_WITH_DATASOURCE, "rb") as f:
60-
response_xml = f.read().decode("utf-8")
61-
with requests_mock.mock() as m:
62-
m.get(self.baseurl, text=response_xml)
63-
all_tasks, pagination_item = self.server.tasks.get()
64-
65-
task = all_tasks[0]
66-
self.assertEqual("c7a9327e-1cda-4504-b026-ddb43b976d1d", task.target.id)
67-
self.assertEqual("datasource", task.target.type)
68-
69-
def test_get_tasks_with_workbook_and_datasource(self):
70-
with open(GET_XML_WITH_WORKBOOK_AND_DATASOURCE, "rb") as f:
71-
response_xml = f.read().decode("utf-8")
72-
with requests_mock.mock() as m:
73-
m.get(self.baseurl, text=response_xml)
74-
all_tasks, pagination_item = self.server.tasks.get()
75-
76-
self.assertEqual("workbook", all_tasks[0].target.type)
77-
self.assertEqual("datasource", all_tasks[1].target.type)
78-
self.assertEqual("workbook", all_tasks[2].target.type)
79-
80-
def test_get_task_with_schedule(self):
81-
with open(GET_XML_WITH_WORKBOOK, "rb") as f:
82-
response_xml = f.read().decode("utf-8")
83-
with requests_mock.mock() as m:
84-
m.get(self.baseurl, text=response_xml)
85-
all_tasks, pagination_item = self.server.tasks.get()
86-
87-
task = all_tasks[0]
88-
self.assertEqual("c7a9327e-1cda-4504-b026-ddb43b976d1d", task.target.id)
89-
self.assertEqual("workbook", task.target.type)
90-
self.assertEqual("b60b4efd-a6f7-4599-beb3-cb677e7abac1", task.schedule_id)
91-
92-
def test_get_task_without_schedule(self):
93-
with requests_mock.mock() as m:
94-
m.get(self.baseurl, text=GET_XML_WITHOUT_SCHEDULE.read_text())
95-
all_tasks, pagination_item = self.server.tasks.get()
96-
97-
task = all_tasks[0]
98-
self.assertEqual("c7a9327e-1cda-4504-b026-ddb43b976d1d", task.target.id)
99-
self.assertEqual("datasource", task.target.type)
100-
101-
def test_get_task_with_interval(self):
102-
with requests_mock.mock() as m:
103-
m.get(self.baseurl, text=GET_XML_WITH_INTERVAL.read_text())
104-
all_tasks, pagination_item = self.server.tasks.get()
105-
106-
task = all_tasks[0]
107-
self.assertEqual("e4de0575-fcc7-4232-5659-be09bb8e7654", task.target.id)
108-
self.assertEqual("datasource", task.target.type)
109-
110-
def test_delete(self):
111-
with requests_mock.mock() as m:
112-
m.delete(self.baseurl + "/c7a9327e-1cda-4504-b026-ddb43b976d1d", status_code=204)
113-
self.server.tasks.delete("c7a9327e-1cda-4504-b026-ddb43b976d1d")
114-
115-
def test_delete_missing_id(self):
116-
self.assertRaises(ValueError, self.server.tasks.delete, "")
117-
118-
def test_get_materializeviews_tasks(self):
119-
with open(GET_XML_DATAACCELERATION_TASK, "rb") as f:
120-
response_xml = f.read().decode("utf-8")
121-
with requests_mock.mock() as m:
122-
m.get(f"{self.server.tasks.baseurl}/{TaskItem.Type.DataAcceleration}", text=response_xml)
123-
all_tasks, pagination_item = self.server.tasks.get(task_type=TaskItem.Type.DataAcceleration)
124-
125-
task = all_tasks[0]
126-
self.assertEqual("a462c148-fc40-4670-a8e4-39b7f0c58c7f", task.target.id)
127-
self.assertEqual("workbook", task.target.type)
128-
self.assertEqual("b22190b4-6ac2-4eed-9563-4afc03444413", task.schedule_id)
129-
self.assertEqual(parse_datetime("2019-12-09T22:30:00Z"), task.schedule_item.next_run_at)
130-
self.assertEqual(parse_datetime("2019-12-09T20:45:04Z"), task.last_run_at)
131-
self.assertEqual(TSC.TaskItem.Type.DataAcceleration, task.task_type)
132-
133-
def test_delete_data_acceleration(self):
134-
with requests_mock.mock() as m:
135-
m.delete(
136-
"{}/{}/{}".format(
137-
self.server.tasks.baseurl, TaskItem.Type.DataAcceleration, "c9cff7f9-309c-4361-99ff-d4ba8c9f5467"
138-
),
139-
status_code=204,
140-
)
141-
self.server.tasks.delete("c9cff7f9-309c-4361-99ff-d4ba8c9f5467", TaskItem.Type.DataAcceleration)
142-
143-
def test_get_by_id(self):
144-
with open(GET_XML_WITH_WORKBOOK, "rb") as f:
145-
response_xml = f.read().decode("utf-8")
146-
task_id = "f84901ac-72ad-4f9b-a87e-7a3500402ad6"
147-
with requests_mock.mock() as m:
148-
m.get(f"{self.baseurl}/{task_id}", text=response_xml)
149-
task = self.server.tasks.get_by_id(task_id)
150-
151-
self.assertEqual("c7a9327e-1cda-4504-b026-ddb43b976d1d", task.target.id)
152-
self.assertEqual("workbook", task.target.type)
153-
self.assertEqual("b60b4efd-a6f7-4599-beb3-cb677e7abac1", task.schedule_id)
154-
self.assertEqual(TSC.TaskItem.Type.ExtractRefresh, task.task_type)
155-
156-
def test_run_now(self):
157-
task_id = "f84901ac-72ad-4f9b-a87e-7a3500402ad6"
158-
task = TaskItem(task_id, TaskItem.Type.ExtractRefresh, 100)
159-
with open(GET_XML_RUN_NOW_RESPONSE, "rb") as f:
160-
response_xml = f.read().decode("utf-8")
161-
with requests_mock.mock() as m:
162-
m.post(f"{self.baseurl}/{task_id}/runNow", text=response_xml)
163-
job_response_content = self.server.tasks.run(task).decode("utf-8")
164-
165-
self.assertTrue("7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6" in job_response_content)
166-
self.assertTrue("RefreshExtract" in job_response_content)
167-
168-
def test_create_extract_task(self):
169-
monthly_interval = TSC.MonthlyInterval(start_time=time(23, 30), interval_value=15)
170-
monthly_schedule = TSC.ScheduleItem(
171-
None,
172-
None,
173-
None,
174-
None,
175-
monthly_interval,
176-
)
177-
target_item = TSC.Target("workbook_id", "workbook")
24+
@pytest.fixture(scope="function")
25+
def server():
26+
"""Fixture to create a TSC.Server instance for testing."""
27+
server = TSC.Server("http://test", False)
28+
29+
# Fake signin
30+
server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
31+
server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
32+
server.version = "3.19"
33+
34+
return server
35+
36+
37+
@pytest.fixture(scope="function")
38+
def baseurl(server: TSC.Server) -> str:
39+
return f"{server.tasks.baseurl}/extractRefreshes"
40+
41+
42+
def test_get_tasks_with_no_workbook(server: TSC.Server, baseurl: str) -> None:
43+
response_xml = GET_XML_NO_WORKBOOK.read_text()
44+
with requests_mock.mock() as m:
45+
m.get(baseurl, text=response_xml)
46+
all_tasks, pagination_item = server.tasks.get()
47+
48+
task = all_tasks[0]
49+
assert task.target is None
50+
51+
52+
def test_get_tasks_with_workbook(server: TSC.Server, baseurl: str) -> None:
53+
response_xml = GET_XML_WITH_WORKBOOK.read_text()
54+
with requests_mock.mock() as m:
55+
m.get(baseurl, text=response_xml)
56+
all_tasks, pagination_item = server.tasks.get()
57+
58+
task = all_tasks[0]
59+
assert "c7a9327e-1cda-4504-b026-ddb43b976d1d" == task.target.id
60+
assert "workbook" == task.target.type
61+
62+
63+
def test_get_tasks_with_datasource(server: TSC.Server, baseurl: str) -> None:
64+
response_xml = GET_XML_WITH_DATASOURCE.read_text()
65+
with requests_mock.mock() as m:
66+
m.get(baseurl, text=response_xml)
67+
all_tasks, pagination_item = server.tasks.get()
68+
69+
task = all_tasks[0]
70+
assert "c7a9327e-1cda-4504-b026-ddb43b976d1d" == task.target.id
71+
assert "datasource" == task.target.type
72+
73+
74+
def test_get_tasks_with_workbook_and_datasource(server: TSC.Server, baseurl: str) -> None:
75+
response_xml = GET_XML_WITH_WORKBOOK_AND_DATASOURCE.read_text()
76+
with requests_mock.mock() as m:
77+
m.get(baseurl, text=response_xml)
78+
all_tasks, pagination_item = server.tasks.get()
79+
80+
assert "workbook" == all_tasks[0].target.type
81+
assert "datasource" == all_tasks[1].target.type
82+
assert "workbook" == all_tasks[2].target.type
17883

179-
task = TaskItem(None, "FullRefresh", None, schedule_item=monthly_schedule, target=target_item)
18084

181-
with open(GET_XML_CREATE_TASK_RESPONSE, "rb") as f:
182-
response_xml = f.read().decode("utf-8")
183-
with requests_mock.mock() as m:
184-
m.post(f"{self.baseurl}", text=response_xml)
185-
create_response_content = self.server.tasks.create(task).decode("utf-8")
85+
def test_get_task_with_schedule(server: TSC.Server, baseurl: str) -> None:
86+
response_xml = GET_XML_WITH_WORKBOOK.read_text()
87+
with requests_mock.mock() as m:
88+
m.get(baseurl, text=response_xml)
89+
all_tasks, pagination_item = server.tasks.get()
18690

187-
self.assertTrue("task_id" in create_response_content)
188-
self.assertTrue("workbook_id" in create_response_content)
189-
self.assertTrue("FullRefresh" in create_response_content)
91+
task = all_tasks[0]
92+
assert "c7a9327e-1cda-4504-b026-ddb43b976d1d" == task.target.id
93+
assert "workbook" == task.target.type
94+
assert "b60b4efd-a6f7-4599-beb3-cb677e7abac1" == task.schedule_id
95+
96+
97+
def test_get_task_without_schedule(server: TSC.Server, baseurl: str) -> None:
98+
with requests_mock.mock() as m:
99+
m.get(baseurl, text=GET_XML_WITHOUT_SCHEDULE.read_text())
100+
all_tasks, pagination_item = server.tasks.get()
101+
102+
task = all_tasks[0]
103+
assert "c7a9327e-1cda-4504-b026-ddb43b976d1d" == task.target.id
104+
assert "datasource" == task.target.type
105+
106+
107+
def test_get_task_with_interval(server: TSC.Server, baseurl: str) -> None:
108+
with requests_mock.mock() as m:
109+
m.get(baseurl, text=GET_XML_WITH_INTERVAL.read_text())
110+
all_tasks, pagination_item = server.tasks.get()
111+
112+
task = all_tasks[0]
113+
assert "e4de0575-fcc7-4232-5659-be09bb8e7654" == task.target.id
114+
assert "datasource" == task.target.type
115+
116+
117+
def test_delete(server: TSC.Server, baseurl: str) -> None:
118+
with requests_mock.mock() as m:
119+
m.delete(baseurl + "/c7a9327e-1cda-4504-b026-ddb43b976d1d", status_code=204)
120+
server.tasks.delete("c7a9327e-1cda-4504-b026-ddb43b976d1d")
121+
122+
123+
def test_delete_missing_id(server: TSC.Server, baseurl: str) -> None:
124+
with pytest.raises(ValueError):
125+
server.tasks.delete("")
126+
127+
128+
def test_get_materializeviews_tasks(server: TSC.Server, baseurl: str) -> None:
129+
response_xml = GET_XML_DATAACCELERATION_TASK.read_text()
130+
with requests_mock.mock() as m:
131+
m.get(f"{server.tasks.baseurl}/{TaskItem.Type.DataAcceleration}", text=response_xml)
132+
all_tasks, pagination_item = server.tasks.get(task_type=TaskItem.Type.DataAcceleration)
133+
134+
task = all_tasks[0]
135+
assert "a462c148-fc40-4670-a8e4-39b7f0c58c7f" == task.target.id
136+
assert "workbook" == task.target.type
137+
assert "b22190b4-6ac2-4eed-9563-4afc03444413" == task.schedule_id
138+
assert parse_datetime("2019-12-09T22:30:00Z") == task.schedule_item.next_run_at
139+
assert parse_datetime("2019-12-09T20:45:04Z") == task.last_run_at
140+
assert TSC.TaskItem.Type.DataAcceleration == task.task_type
141+
142+
143+
def test_delete_data_acceleration(server: TSC.Server, baseurl: str) -> None:
144+
with requests_mock.mock() as m:
145+
m.delete(
146+
"{}/{}/{}".format(
147+
server.tasks.baseurl, TaskItem.Type.DataAcceleration, "c9cff7f9-309c-4361-99ff-d4ba8c9f5467"
148+
),
149+
status_code=204,
150+
)
151+
server.tasks.delete("c9cff7f9-309c-4361-99ff-d4ba8c9f5467", TaskItem.Type.DataAcceleration)
152+
153+
154+
def test_get_by_id(server: TSC.Server, baseurl: str) -> None:
155+
response_xml = GET_XML_WITH_WORKBOOK.read_text()
156+
task_id = "f84901ac-72ad-4f9b-a87e-7a3500402ad6"
157+
with requests_mock.mock() as m:
158+
m.get(f"{baseurl}/{task_id}", text=response_xml)
159+
task = server.tasks.get_by_id(task_id)
160+
161+
assert "c7a9327e-1cda-4504-b026-ddb43b976d1d" == task.target.id
162+
assert "workbook" == task.target.type
163+
assert "b60b4efd-a6f7-4599-beb3-cb677e7abac1" == task.schedule_id
164+
assert TSC.TaskItem.Type.ExtractRefresh == task.task_type
165+
166+
167+
def test_run_now(server: TSC.Server, baseurl: str) -> None:
168+
task_id = "f84901ac-72ad-4f9b-a87e-7a3500402ad6"
169+
task = TaskItem(task_id, TaskItem.Type.ExtractRefresh, 100)
170+
response_xml = GET_XML_RUN_NOW_RESPONSE.read_text()
171+
with requests_mock.mock() as m:
172+
m.post(f"{baseurl}/{task_id}/runNow", text=response_xml)
173+
job_response_content = server.tasks.run(task).decode("utf-8")
174+
175+
assert "7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6" in job_response_content
176+
assert "RefreshExtract" in job_response_content
177+
178+
179+
def test_create_extract_task(server: TSC.Server, baseurl: str) -> None:
180+
monthly_interval = TSC.MonthlyInterval(start_time=time(23, 30), interval_value=15)
181+
monthly_schedule = TSC.ScheduleItem(
182+
None, # type: ignore[arg-type]
183+
None, # type: ignore[arg-type]
184+
None, # type: ignore[arg-type]
185+
None, # type: ignore[arg-type]
186+
monthly_interval,
187+
)
188+
target_item = TSC.Target("workbook_id", "workbook")
189+
190+
task = TaskItem(None, "FullRefresh", None, schedule_item=monthly_schedule, target=target_item) # type: ignore[arg-type]
191+
192+
response_xml = GET_XML_CREATE_TASK_RESPONSE.read_text()
193+
with requests_mock.mock() as m:
194+
m.post(f"{baseurl}", text=response_xml)
195+
create_response_content = server.tasks.create(task).decode("utf-8")
196+
197+
assert "task_id" in create_response_content
198+
assert "workbook_id" in create_response_content
199+
assert "FullRefresh" in create_response_content

0 commit comments

Comments
 (0)