|
1 | | -import unittest |
2 | 1 | import requests_mock |
3 | 2 | from pathlib import Path |
4 | 3 |
|
| 4 | +import pytest |
| 5 | + |
5 | 6 | import tableauserverclient as TSC |
6 | 7 | from tableauserverclient.datetime_helpers import format_datetime |
7 | 8 |
|
|
11 | 12 | METRICS_UPDATE = assets / "metrics_update.xml" |
12 | 13 |
|
13 | 14 |
|
14 | | -class TestMetrics(unittest.TestCase): |
15 | | - def setUp(self) -> None: |
16 | | - self.server = TSC.Server("http://test", False) |
17 | | - |
18 | | - # Fake signin |
19 | | - self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67" |
20 | | - self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" |
21 | | - self.server.version = "3.9" |
22 | | - |
23 | | - self.baseurl = self.server.metrics.baseurl |
24 | | - |
25 | | - def test_metrics_get(self) -> None: |
26 | | - with requests_mock.mock() as m: |
27 | | - m.get(self.baseurl, text=METRICS_GET.read_text()) |
28 | | - all_metrics, pagination_item = self.server.metrics.get() |
29 | | - |
30 | | - self.assertEqual(len(all_metrics), 2) |
31 | | - self.assertEqual(pagination_item.total_available, 27) |
32 | | - self.assertEqual(all_metrics[0].id, "6561daa3-20e8-407f-ba09-709b178c0b4a") |
33 | | - self.assertEqual(all_metrics[0].name, "Example metric") |
34 | | - self.assertEqual(all_metrics[0].description, "Description of my metric.") |
35 | | - self.assertEqual(all_metrics[0].webpage_url, "https://test/#/site/site-name/metrics/3") |
36 | | - self.assertEqual(format_datetime(all_metrics[0].created_at), "2020-01-02T01:02:03Z") |
37 | | - self.assertEqual(format_datetime(all_metrics[0].updated_at), "2020-01-02T01:02:03Z") |
38 | | - self.assertEqual(all_metrics[0].suspended, True) |
39 | | - self.assertEqual(all_metrics[0].project_id, "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33") |
40 | | - self.assertEqual(all_metrics[0].project_name, "Default") |
41 | | - self.assertEqual(all_metrics[0].owner_id, "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33") |
42 | | - self.assertEqual(all_metrics[0].view_id, "29dae0cd-1862-4a20-a638-e2c2dfa682d4") |
43 | | - self.assertEqual(len(all_metrics[0].tags), 0) |
44 | | - |
45 | | - self.assertEqual(all_metrics[1].id, "721760d9-0aa4-4029-87ae-371c956cea07") |
46 | | - self.assertEqual(all_metrics[1].name, "Another Example metric") |
47 | | - self.assertEqual(all_metrics[1].description, "Description of another metric.") |
48 | | - self.assertEqual(all_metrics[1].webpage_url, "https://test/#/site/site-name/metrics/4") |
49 | | - self.assertEqual(format_datetime(all_metrics[1].created_at), "2020-01-03T01:02:03Z") |
50 | | - self.assertEqual(format_datetime(all_metrics[1].updated_at), "2020-01-04T01:02:03Z") |
51 | | - self.assertEqual(all_metrics[1].suspended, False) |
52 | | - self.assertEqual(all_metrics[1].project_id, "486e0de0-2258-45bd-99cf-b62013e19f4e") |
53 | | - self.assertEqual(all_metrics[1].project_name, "Assets") |
54 | | - self.assertEqual(all_metrics[1].owner_id, "1bbbc2b9-847d-443c-9a1f-dbcf112b8814") |
55 | | - self.assertEqual(all_metrics[1].view_id, "7dbfdb63-a6ca-4723-93ee-4fefc71992d3") |
56 | | - self.assertEqual(len(all_metrics[1].tags), 2) |
57 | | - self.assertIn("Test", all_metrics[1].tags) |
58 | | - self.assertIn("Asset", all_metrics[1].tags) |
59 | | - |
60 | | - def test_metrics_get_by_id(self) -> None: |
61 | | - luid = "6561daa3-20e8-407f-ba09-709b178c0b4a" |
62 | | - with requests_mock.mock() as m: |
63 | | - m.get(f"{self.baseurl}/{luid}", text=METRICS_GET_BY_ID.read_text()) |
64 | | - metric = self.server.metrics.get_by_id(luid) |
65 | | - |
66 | | - self.assertEqual(metric.id, "6561daa3-20e8-407f-ba09-709b178c0b4a") |
67 | | - self.assertEqual(metric.name, "Example metric") |
68 | | - self.assertEqual(metric.description, "Description of my metric.") |
69 | | - self.assertEqual(metric.webpage_url, "https://test/#/site/site-name/metrics/3") |
70 | | - self.assertEqual(format_datetime(metric.created_at), "2020-01-02T01:02:03Z") |
71 | | - self.assertEqual(format_datetime(metric.updated_at), "2020-01-02T01:02:03Z") |
72 | | - self.assertEqual(metric.suspended, True) |
73 | | - self.assertEqual(metric.project_id, "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33") |
74 | | - self.assertEqual(metric.project_name, "Default") |
75 | | - self.assertEqual(metric.owner_id, "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33") |
76 | | - self.assertEqual(metric.view_id, "29dae0cd-1862-4a20-a638-e2c2dfa682d4") |
77 | | - self.assertEqual(len(metric.tags), 0) |
78 | | - |
79 | | - def test_metrics_delete(self) -> None: |
80 | | - luid = "6561daa3-20e8-407f-ba09-709b178c0b4a" |
81 | | - with requests_mock.mock() as m: |
82 | | - m.delete(f"{self.baseurl}/{luid}") |
83 | | - self.server.metrics.delete(luid) |
84 | | - |
85 | | - def test_metrics_update(self) -> None: |
86 | | - luid = "6561daa3-20e8-407f-ba09-709b178c0b4a" |
87 | | - metric = TSC.MetricItem() |
88 | | - metric._id = luid |
89 | | - |
90 | | - with requests_mock.mock() as m: |
91 | | - m.put(f"{self.baseurl}/{luid}", text=METRICS_UPDATE.read_text()) |
92 | | - metric = self.server.metrics.update(metric) |
93 | | - |
94 | | - self.assertEqual(metric.id, "6561daa3-20e8-407f-ba09-709b178c0b4a") |
95 | | - self.assertEqual(metric.name, "Example metric") |
96 | | - self.assertEqual(metric.description, "Description of my metric.") |
97 | | - self.assertEqual(metric.webpage_url, "https://test/#/site/site-name/metrics/3") |
98 | | - self.assertEqual(format_datetime(metric.created_at), "2020-01-02T01:02:03Z") |
99 | | - self.assertEqual(format_datetime(metric.updated_at), "2020-01-02T01:02:03Z") |
100 | | - self.assertEqual(metric.suspended, True) |
101 | | - self.assertEqual(metric.project_id, "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33") |
102 | | - self.assertEqual(metric.project_name, "Default") |
103 | | - self.assertEqual(metric.owner_id, "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33") |
104 | | - self.assertEqual(metric.view_id, "29dae0cd-1862-4a20-a638-e2c2dfa682d4") |
105 | | - self.assertEqual(len(metric.tags), 0) |
| 15 | +@pytest.fixture(scope="function") |
| 16 | +def server() -> TSC.Server: |
| 17 | + """Fixture to create a TSC.Server instance for testing.""" |
| 18 | + server = TSC.Server("http://test", False) |
| 19 | + |
| 20 | + # Fake signin |
| 21 | + server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67" |
| 22 | + server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" |
| 23 | + server.version = "3.9" |
| 24 | + |
| 25 | + return server |
| 26 | + |
| 27 | + |
| 28 | +def test_metrics_get(server: TSC.Server) -> None: |
| 29 | + with requests_mock.mock() as m: |
| 30 | + m.get(server.metrics.baseurl, text=METRICS_GET.read_text()) |
| 31 | + all_metrics, pagination_item = server.metrics.get() |
| 32 | + |
| 33 | + assert len(all_metrics) == 2 |
| 34 | + assert pagination_item.total_available == 27 |
| 35 | + assert all_metrics[0].id == "6561daa3-20e8-407f-ba09-709b178c0b4a" |
| 36 | + assert all_metrics[0].name == "Example metric" |
| 37 | + assert all_metrics[0].description == "Description of my metric." |
| 38 | + assert all_metrics[0].webpage_url == "https://test/#/site/site-name/metrics/3" |
| 39 | + assert format_datetime(all_metrics[0].created_at) == "2020-01-02T01:02:03Z" |
| 40 | + assert format_datetime(all_metrics[0].updated_at) == "2020-01-02T01:02:03Z" |
| 41 | + assert all_metrics[0].suspended |
| 42 | + assert all_metrics[0].project_id == "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33" |
| 43 | + assert all_metrics[0].project_name == "Default" |
| 44 | + assert all_metrics[0].owner_id == "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33" |
| 45 | + assert all_metrics[0].view_id == "29dae0cd-1862-4a20-a638-e2c2dfa682d4" |
| 46 | + assert len(all_metrics[0].tags) == 0 |
| 47 | + |
| 48 | + assert all_metrics[1].id == "721760d9-0aa4-4029-87ae-371c956cea07" |
| 49 | + assert all_metrics[1].name == "Another Example metric" |
| 50 | + assert all_metrics[1].description == "Description of another metric." |
| 51 | + assert all_metrics[1].webpage_url == "https://test/#/site/site-name/metrics/4" |
| 52 | + assert format_datetime(all_metrics[1].created_at) == "2020-01-03T01:02:03Z" |
| 53 | + assert format_datetime(all_metrics[1].updated_at) == "2020-01-04T01:02:03Z" |
| 54 | + assert all_metrics[1].suspended is False |
| 55 | + assert all_metrics[1].project_id == "486e0de0-2258-45bd-99cf-b62013e19f4e" |
| 56 | + assert all_metrics[1].project_name == "Assets" |
| 57 | + assert all_metrics[1].owner_id == "1bbbc2b9-847d-443c-9a1f-dbcf112b8814" |
| 58 | + assert all_metrics[1].view_id == "7dbfdb63-a6ca-4723-93ee-4fefc71992d3" |
| 59 | + assert len(all_metrics[1].tags) == 2 |
| 60 | + assert "Test" in all_metrics[1].tags |
| 61 | + assert "Asset" in all_metrics[1].tags |
| 62 | + |
| 63 | + |
| 64 | +def test_metrics_get_by_id(server: TSC.Server) -> None: |
| 65 | + luid = "6561daa3-20e8-407f-ba09-709b178c0b4a" |
| 66 | + with requests_mock.mock() as m: |
| 67 | + m.get(f"{server.metrics.baseurl}/{luid}", text=METRICS_GET_BY_ID.read_text()) |
| 68 | + metric = server.metrics.get_by_id(luid) |
| 69 | + |
| 70 | + assert metric.id == "6561daa3-20e8-407f-ba09-709b178c0b4a" |
| 71 | + assert metric.name == "Example metric" |
| 72 | + assert metric.description == "Description of my metric." |
| 73 | + assert metric.webpage_url == "https://test/#/site/site-name/metrics/3" |
| 74 | + assert format_datetime(metric.created_at) == "2020-01-02T01:02:03Z" |
| 75 | + assert format_datetime(metric.updated_at) == "2020-01-02T01:02:03Z" |
| 76 | + assert metric.suspended |
| 77 | + assert metric.project_id == "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33" |
| 78 | + assert metric.project_name == "Default" |
| 79 | + assert metric.owner_id == "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33" |
| 80 | + assert metric.view_id == "29dae0cd-1862-4a20-a638-e2c2dfa682d4" |
| 81 | + assert len(metric.tags) == 0 |
| 82 | + |
| 83 | + |
| 84 | +def test_metrics_delete(server: TSC.Server) -> None: |
| 85 | + luid = "6561daa3-20e8-407f-ba09-709b178c0b4a" |
| 86 | + with requests_mock.mock() as m: |
| 87 | + m.delete(f"{server.metrics.baseurl}/{luid}") |
| 88 | + server.metrics.delete(luid) |
| 89 | + |
| 90 | + |
| 91 | +def test_metrics_update(server: TSC.Server) -> None: |
| 92 | + luid = "6561daa3-20e8-407f-ba09-709b178c0b4a" |
| 93 | + metric = TSC.MetricItem() |
| 94 | + metric._id = luid |
| 95 | + |
| 96 | + with requests_mock.mock() as m: |
| 97 | + m.put(f"{server.metrics.baseurl}/{luid}", text=METRICS_UPDATE.read_text()) |
| 98 | + metric = server.metrics.update(metric) |
| 99 | + |
| 100 | + assert metric.id == "6561daa3-20e8-407f-ba09-709b178c0b4a" |
| 101 | + assert metric.name == "Example metric" |
| 102 | + assert metric.description == "Description of my metric." |
| 103 | + assert metric.webpage_url == "https://test/#/site/site-name/metrics/3" |
| 104 | + assert format_datetime(metric.created_at) == "2020-01-02T01:02:03Z" |
| 105 | + assert format_datetime(metric.updated_at) == "2020-01-02T01:02:03Z" |
| 106 | + assert metric.suspended |
| 107 | + assert metric.project_id == "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33" |
| 108 | + assert metric.project_name == "Default" |
| 109 | + assert metric.owner_id == "32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33" |
| 110 | + assert metric.view_id == "29dae0cd-1862-4a20-a638-e2c2dfa682d4" |
| 111 | + assert len(metric.tags) == 0 |
0 commit comments