|
2 | 2 | import os |
3 | 3 | import requests_mock |
4 | 4 | import tableauserverclient as TSC |
| 5 | +from tableauserverclient.models.task_item import TaskItem |
| 6 | +from tableauserverclient.datetime_helpers import parse_datetime |
5 | 7 |
|
6 | 8 | TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), "assets") |
7 | 9 |
|
8 | 10 | GET_XML_NO_WORKBOOK = os.path.join(TEST_ASSET_DIR, "tasks_no_workbook_or_datasource.xml") |
9 | 11 | GET_XML_WITH_WORKBOOK = os.path.join(TEST_ASSET_DIR, "tasks_with_workbook.xml") |
10 | 12 | GET_XML_WITH_DATASOURCE = os.path.join(TEST_ASSET_DIR, "tasks_with_datasource.xml") |
11 | 13 | GET_XML_WITH_WORKBOOK_AND_DATASOURCE = os.path.join(TEST_ASSET_DIR, "tasks_with_workbook_and_datasource.xml") |
| 14 | +GET_XML_MATERIALIZEVIEWS_TASK = os.path.join(TEST_ASSET_DIR, "tasks_with_materializeviews_task.xml") |
| 15 | +GET_XML_RUN_NOW_RESPONSE = os.path.join(TEST_ASSET_DIR, "tasks_run_now_response.xml") |
12 | 16 |
|
13 | 17 |
|
14 | 18 | class TaskTests(unittest.TestCase): |
15 | 19 | def setUp(self): |
16 | 20 | self.server = TSC.Server("http://test") |
17 | | - self.server.version = '3.6' |
| 21 | + self.server.version = '3.8' |
18 | 22 |
|
19 | 23 | # Fake Signin |
20 | 24 | self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67" |
21 | 25 | self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" |
22 | 26 |
|
23 | | - self.baseurl = self.server.tasks.baseurl |
| 27 | + # default task type is extractRefreshes |
| 28 | + self.baseurl = "{}/{}".format(self.server.tasks.baseurl, "extractRefreshes") |
24 | 29 |
|
25 | 30 | def test_get_tasks_with_no_workbook(self): |
26 | 31 | with open(GET_XML_NO_WORKBOOK, "rb") as f: |
@@ -84,3 +89,50 @@ def test_delete(self): |
84 | 89 |
|
85 | 90 | def test_delete_missing_id(self): |
86 | 91 | self.assertRaises(ValueError, self.server.tasks.delete, '') |
| 92 | + |
| 93 | + def test_get_materializeviews_tasks(self): |
| 94 | + with open(GET_XML_MATERIALIZEVIEWS_TASK, "rb") as f: |
| 95 | + response_xml = f.read().decode("utf-8") |
| 96 | + with requests_mock.mock() as m: |
| 97 | + m.get('{}/{}'.format( |
| 98 | + self.server.tasks.baseurl, TaskItem.Type.MaterializeViews), text=response_xml) |
| 99 | + all_tasks, pagination_item = self.server.tasks.get(task_type=TaskItem.Type.MaterializeViews) |
| 100 | + |
| 101 | + task = all_tasks[0] |
| 102 | + self.assertEqual('a462c148-fc40-4670-a8e4-39b7f0c58c7f', task.target.id) |
| 103 | + self.assertEqual('workbook', task.target.type) |
| 104 | + self.assertEqual('b22190b4-6ac2-4eed-9563-4afc03444413', task.schedule_id) |
| 105 | + self.assertEqual(parse_datetime('2019-12-09T22:30:00Z'), task.schedule_item.next_run_at) |
| 106 | + self.assertEqual(parse_datetime('2019-12-09T20:45:04Z'), task.last_run_at) |
| 107 | + |
| 108 | + def test_delete(self): |
| 109 | + with requests_mock.mock() as m: |
| 110 | + m.delete('{}/{}/{}'.format( |
| 111 | + self.server.tasks.baseurl, TaskItem.Type.MaterializeViews, |
| 112 | + 'c9cff7f9-309c-4361-99ff-d4ba8c9f5467'), status_code=204) |
| 113 | + self.server.tasks.delete('c9cff7f9-309c-4361-99ff-d4ba8c9f5467', |
| 114 | + TaskItem.Type.MaterializeViews) |
| 115 | + |
| 116 | + def test_get_by_id(self): |
| 117 | + with open(GET_XML_WITH_WORKBOOK, "rb") as f: |
| 118 | + response_xml = f.read().decode("utf-8") |
| 119 | + task_id = 'f84901ac-72ad-4f9b-a87e-7a3500402ad6' |
| 120 | + with requests_mock.mock() as m: |
| 121 | + m.get('{}/{}'.format(self.baseurl, task_id), text=response_xml) |
| 122 | + task = self.server.tasks.get_by_id(task_id) |
| 123 | + |
| 124 | + self.assertEqual('c7a9327e-1cda-4504-b026-ddb43b976d1d', task.target.id) |
| 125 | + self.assertEqual('workbook', task.target.type) |
| 126 | + self.assertEqual('b60b4efd-a6f7-4599-beb3-cb677e7abac1', task.schedule_id) |
| 127 | + |
| 128 | + def test_run_now(self): |
| 129 | + task_id = 'f84901ac-72ad-4f9b-a87e-7a3500402ad6' |
| 130 | + task = TaskItem(task_id, TaskItem.Type.ExtractRefresh, 100) |
| 131 | + with open(GET_XML_RUN_NOW_RESPONSE, "rb") as f: |
| 132 | + response_xml = f.read().decode("utf-8") |
| 133 | + with requests_mock.mock() as m: |
| 134 | + m.post('{}/{}/runNow'.format(self.baseurl, task_id), text=response_xml) |
| 135 | + job_response_content = self.server.tasks.run(task).decode("utf-8") |
| 136 | + |
| 137 | + self.assertTrue('7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6' in job_response_content) |
| 138 | + self.assertTrue('RefreshExtract' in job_response_content) |
0 commit comments