|
1 | 1 | from pathlib import Path |
2 | 2 | from datetime import time |
3 | 3 |
|
| 4 | +from defusedxml.ElementTree import fromstring |
4 | 5 | import pytest |
5 | 6 | import requests_mock |
6 | 7 |
|
|
26 | 27 | ADD_DATASOURCE_TO_SCHEDULE = TEST_ASSET_DIR / "schedule_add_datasource.xml" |
27 | 28 | ADD_FLOW_TO_SCHEDULE = TEST_ASSET_DIR / "schedule_add_flow.xml" |
28 | 29 | GET_EXTRACT_TASKS_XML = TEST_ASSET_DIR / "schedule_get_extract_refresh_tasks.xml" |
29 | | -BATCH_UPDATE_STATE = TEST_ASSET_DIR / "schedules_batch_update_state.xml" |
| 30 | +BATCH_UPDATE_STATE = TEST_ASSET_DIR / "schedule_batch_update_state.xml" |
30 | 31 |
|
31 | 32 | WORKBOOK_GET_BY_ID_XML = TEST_ASSET_DIR / "workbook_get_by_id.xml" |
32 | 33 | DATASOURCE_GET_BY_ID_XML = TEST_ASSET_DIR / "datasource_get_by_id.xml" |
@@ -421,3 +422,58 @@ def test_get_extract_refresh_tasks(server: TSC.Server) -> None: |
421 | 422 | assert isinstance(extracts[0], list) |
422 | 423 | assert 2 == len(extracts[0]) |
423 | 424 | assert "task1" == extracts[0][0].id |
| 425 | + |
| 426 | + |
| 427 | +def test_batch_update_state_items(server: TSC.Server) -> None: |
| 428 | + server.version = "3.27" |
| 429 | + hourly_interval = TSC.HourlyInterval(start_time=time(2, 30), end_time=time(23, 0), interval_value=2) |
| 430 | + args = ("hourly", 50, TSC.ScheduleItem.Type.Extract, TSC.ScheduleItem.ExecutionOrder.Parallel, hourly_interval) |
| 431 | + new_schedules = [TSC.ScheduleItem(*args), TSC.ScheduleItem(*args), TSC.ScheduleItem(*args)] |
| 432 | + new_schedules[0]._id = "593d2ebf-0d18-4deb-9d21-b113a4902583" |
| 433 | + new_schedules[1]._id = "cecbb71e-def0-4030-8068-5ae50f51db1c" |
| 434 | + new_schedules[2]._id = "f39a6e7d-405e-4c07-8c18-95845f9da80e" |
| 435 | + |
| 436 | + state = "active" |
| 437 | + with requests_mock.mock() as m: |
| 438 | + m.put(f"{server.schedules.baseurl}?state={state}", text=BATCH_UPDATE_STATE.read_text()) |
| 439 | + resp = server.schedules.batch_update_state(new_schedules, state) |
| 440 | + |
| 441 | + assert len(resp) == 3 |
| 442 | + for sch, r in zip(new_schedules, resp): |
| 443 | + assert sch.id == r |
| 444 | + |
| 445 | + |
| 446 | +def test_batch_update_state_str(server: TSC.Server) -> None: |
| 447 | + server.version = "3.27" |
| 448 | + new_schedules = [ |
| 449 | + "593d2ebf-0d18-4deb-9d21-b113a4902583", |
| 450 | + "cecbb71e-def0-4030-8068-5ae50f51db1c", |
| 451 | + "f39a6e7d-405e-4c07-8c18-95845f9da80e", |
| 452 | + ] |
| 453 | + |
| 454 | + state = "suspended" |
| 455 | + with requests_mock.mock() as m: |
| 456 | + m.put(f"{server.schedules.baseurl}?state={state}", text=BATCH_UPDATE_STATE.read_text()) |
| 457 | + resp = server.schedules.batch_update_state(new_schedules, state) |
| 458 | + |
| 459 | + assert len(resp) == 3 |
| 460 | + for sch, r in zip(new_schedules, resp): |
| 461 | + assert sch == r |
| 462 | + |
| 463 | + |
| 464 | +def test_batch_update_state_all(server: TSC.Server) -> None: |
| 465 | + server.version = "3.27" |
| 466 | + new_schedules = [ |
| 467 | + "593d2ebf-0d18-4deb-9d21-b113a4902583", |
| 468 | + "cecbb71e-def0-4030-8068-5ae50f51db1c", |
| 469 | + "f39a6e7d-405e-4c07-8c18-95845f9da80e", |
| 470 | + ] |
| 471 | + |
| 472 | + state = "suspended" |
| 473 | + with requests_mock.mock() as m: |
| 474 | + m.put(f"{server.schedules.baseurl}?state={state}&updateAll=true", text=BATCH_UPDATE_STATE.read_text()) |
| 475 | + _ = server.schedules.batch_update_state(new_schedules, state, True) |
| 476 | + |
| 477 | + history = m.request_history[0] |
| 478 | + |
| 479 | + assert history.text == "<tsRequest />" |
0 commit comments