|
1 | | -import unittest |
| 1 | +from pathlib import Path |
2 | 2 |
|
| 3 | +import pytest |
3 | 4 | import requests_mock |
4 | 5 |
|
5 | 6 | import tableauserverclient as TSC |
6 | | -from ._utils import read_xml_asset, asset |
7 | | - |
8 | | -GET_XML = "database_get.xml" |
9 | | -POPULATE_PERMISSIONS_XML = "database_populate_permissions.xml" |
10 | | -UPDATE_XML = "database_update.xml" |
11 | | -GET_DQW_BY_CONTENT = "dqw_by_content_type.xml" |
12 | | - |
13 | | - |
14 | | -class DatabaseTests(unittest.TestCase): |
15 | | - def setUp(self): |
16 | | - self.server = TSC.Server("http://test", False) |
17 | | - # Fake signin |
18 | | - self.server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67" |
19 | | - self.server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" |
20 | | - self.server.version = "3.5" |
21 | | - |
22 | | - self.baseurl = self.server.databases.baseurl |
23 | | - |
24 | | - def test_get(self): |
25 | | - response_xml = read_xml_asset(GET_XML) |
26 | | - with requests_mock.mock() as m: |
27 | | - m.get(self.baseurl, text=response_xml) |
28 | | - all_databases, pagination_item = self.server.databases.get() |
29 | | - |
30 | | - self.assertEqual(5, pagination_item.total_available) |
31 | | - self.assertEqual("5ea59b45-e497-4827-8809-bfe213236f75", all_databases[0].id) |
32 | | - self.assertEqual("hyper", all_databases[0].connection_type) |
33 | | - self.assertEqual("hyper_0.hyper", all_databases[0].name) |
34 | | - |
35 | | - self.assertEqual("23591f2c-4802-4d6a-9e28-574a8ea9bc4c", all_databases[1].id) |
36 | | - self.assertEqual("sqlserver", all_databases[1].connection_type) |
37 | | - self.assertEqual("testv1", all_databases[1].name) |
38 | | - self.assertEqual("9324cf6b-ba72-4b8e-b895-ac3f28d2f0e0", all_databases[1].contact_id) |
39 | | - self.assertEqual(True, all_databases[1].certified) |
40 | | - |
41 | | - def test_update(self): |
42 | | - response_xml = read_xml_asset(UPDATE_XML) |
43 | | - with requests_mock.mock() as m: |
44 | | - m.put(self.baseurl + "/23591f2c-4802-4d6a-9e28-574a8ea9bc4c", text=response_xml) |
45 | | - single_database = TSC.DatabaseItem("test") |
46 | | - single_database.contact_id = "9324cf6b-ba72-4b8e-b895-ac3f28d2f0e0" |
47 | | - single_database._id = "23591f2c-4802-4d6a-9e28-574a8ea9bc4c" |
48 | | - single_database.certified = True |
49 | | - single_database.certification_note = "Test" |
50 | | - single_database = self.server.databases.update(single_database) |
51 | | - |
52 | | - self.assertEqual("23591f2c-4802-4d6a-9e28-574a8ea9bc4c", single_database.id) |
53 | | - self.assertEqual("9324cf6b-ba72-4b8e-b895-ac3f28d2f0e0", single_database.contact_id) |
54 | | - self.assertEqual(True, single_database.certified) |
55 | | - self.assertEqual("Test", single_database.certification_note) |
56 | | - |
57 | | - def test_populate_permissions(self): |
58 | | - with open(asset(POPULATE_PERMISSIONS_XML), "rb") as f: |
59 | | - response_xml = f.read().decode("utf-8") |
60 | | - with requests_mock.mock() as m: |
61 | | - m.get(self.baseurl + "/0448d2ed-590d-4fa0-b272-a2a8a24555b5/permissions", text=response_xml) |
62 | | - single_database = TSC.DatabaseItem("test") |
63 | | - single_database._id = "0448d2ed-590d-4fa0-b272-a2a8a24555b5" |
64 | | - |
65 | | - self.server.databases.populate_permissions(single_database) |
66 | | - permissions = single_database.permissions |
67 | | - |
68 | | - self.assertEqual(permissions[0].grantee.tag_name, "group") |
69 | | - self.assertEqual(permissions[0].grantee.id, "5e5e1978-71fa-11e4-87dd-7382f5c437af") |
70 | | - self.assertDictEqual( |
71 | | - permissions[0].capabilities, |
72 | | - { |
73 | | - TSC.Permission.Capability.ChangePermissions: TSC.Permission.Mode.Deny, |
74 | | - TSC.Permission.Capability.Read: TSC.Permission.Mode.Allow, |
75 | | - }, |
76 | | - ) |
77 | | - |
78 | | - self.assertEqual(permissions[1].grantee.tag_name, "user") |
79 | | - self.assertEqual(permissions[1].grantee.id, "7c37ee24-c4b1-42b6-a154-eaeab7ee330a") |
80 | | - self.assertDictEqual( |
81 | | - permissions[1].capabilities, |
82 | | - { |
83 | | - TSC.Permission.Capability.Write: TSC.Permission.Mode.Allow, |
84 | | - }, |
85 | | - ) |
86 | | - |
87 | | - def test_populate_data_quality_warning(self): |
88 | | - with open(asset(GET_DQW_BY_CONTENT), "rb") as f: |
89 | | - response_xml = f.read().decode("utf-8") |
90 | | - with requests_mock.mock() as m: |
91 | | - m.get( |
92 | | - self.server.databases._data_quality_warnings.baseurl + "/94441d26-9a52-4a42-b0fb-3f94792d1aac", |
93 | | - text=response_xml, |
94 | | - ) |
95 | | - single_database = TSC.DatabaseItem("test") |
96 | | - single_database._id = "94441d26-9a52-4a42-b0fb-3f94792d1aac" |
97 | | - |
98 | | - self.server.databases.populate_dqw(single_database) |
99 | | - dqws = single_database.dqws |
100 | | - first_dqw = dqws.pop() |
101 | | - self.assertEqual(first_dqw.id, "c2e0e406-84fb-4f4e-9998-f20dd9306710") |
102 | | - self.assertEqual(first_dqw.warning_type, "WARNING") |
103 | | - self.assertEqual(first_dqw.message, "Hello, World!") |
104 | | - self.assertEqual(first_dqw.owner_id, "eddc8c5f-6af0-40be-b6b0-2c790290a43f") |
105 | | - self.assertEqual(first_dqw.active, True) |
106 | | - self.assertEqual(first_dqw.severe, True) |
107 | | - self.assertEqual(str(first_dqw.created_at), "2021-04-09 18:39:54+00:00") |
108 | | - self.assertEqual(str(first_dqw.updated_at), "2021-04-09 18:39:54+00:00") |
109 | | - |
110 | | - def test_delete(self): |
111 | | - with requests_mock.mock() as m: |
112 | | - m.delete(self.baseurl + "/0448d2ed-590d-4fa0-b272-a2a8a24555b5", status_code=204) |
113 | | - self.server.databases.delete("0448d2ed-590d-4fa0-b272-a2a8a24555b5") |
| 7 | + |
| 8 | +TEST_ASSET_DIR = Path(__file__).parent / "assets" |
| 9 | + |
| 10 | +GET_XML = TEST_ASSET_DIR / "database_get.xml" |
| 11 | +POPULATE_PERMISSIONS_XML = TEST_ASSET_DIR / "database_populate_permissions.xml" |
| 12 | +UPDATE_XML = TEST_ASSET_DIR / "database_update.xml" |
| 13 | +GET_DQW_BY_CONTENT = TEST_ASSET_DIR / "dqw_by_content_type.xml" |
| 14 | + |
| 15 | + |
| 16 | +@pytest.fixture(scope="function") |
| 17 | +def server() -> TSC.Server: |
| 18 | + server = TSC.Server("http://test", False) |
| 19 | + # Fake signin |
| 20 | + server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67" |
| 21 | + server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM" |
| 22 | + server.version = "3.5" |
| 23 | + |
| 24 | + return server |
| 25 | + |
| 26 | + |
| 27 | +def test_get(server): |
| 28 | + response_xml = GET_XML.read_text() |
| 29 | + with requests_mock.mock() as m: |
| 30 | + m.get(server.databases.baseurl, text=response_xml) |
| 31 | + all_databases, pagination_item = server.databases.get() |
| 32 | + |
| 33 | + assert 5 == pagination_item.total_available |
| 34 | + assert "5ea59b45-e497-4827-8809-bfe213236f75" == all_databases[0].id |
| 35 | + assert "hyper" == all_databases[0].connection_type |
| 36 | + assert "hyper_0.hyper" == all_databases[0].name |
| 37 | + |
| 38 | + assert "23591f2c-4802-4d6a-9e28-574a8ea9bc4c" == all_databases[1].id |
| 39 | + assert "sqlserver" == all_databases[1].connection_type |
| 40 | + assert "testv1" == all_databases[1].name |
| 41 | + assert "9324cf6b-ba72-4b8e-b895-ac3f28d2f0e0" == all_databases[1].contact_id |
| 42 | + assert all_databases[1].certified |
| 43 | + |
| 44 | + |
| 45 | +def test_update(server): |
| 46 | + response_xml = UPDATE_XML.read_text() |
| 47 | + with requests_mock.mock() as m: |
| 48 | + m.put(server.databases.baseurl + "/23591f2c-4802-4d6a-9e28-574a8ea9bc4c", text=response_xml) |
| 49 | + single_database = TSC.DatabaseItem("test") |
| 50 | + single_database.contact_id = "9324cf6b-ba72-4b8e-b895-ac3f28d2f0e0" |
| 51 | + single_database._id = "23591f2c-4802-4d6a-9e28-574a8ea9bc4c" |
| 52 | + single_database.certified = True |
| 53 | + single_database.certification_note = "Test" |
| 54 | + single_database = server.databases.update(single_database) |
| 55 | + |
| 56 | + assert "23591f2c-4802-4d6a-9e28-574a8ea9bc4c" == single_database.id |
| 57 | + assert "9324cf6b-ba72-4b8e-b895-ac3f28d2f0e0" == single_database.contact_id |
| 58 | + assert single_database.certified |
| 59 | + assert "Test" == single_database.certification_note |
| 60 | + |
| 61 | + |
| 62 | +def test_populate_permissions(server): |
| 63 | + response_xml = POPULATE_PERMISSIONS_XML.read_text() |
| 64 | + with requests_mock.mock() as m: |
| 65 | + m.get(server.databases.baseurl + "/0448d2ed-590d-4fa0-b272-a2a8a24555b5/permissions", text=response_xml) |
| 66 | + single_database = TSC.DatabaseItem("test") |
| 67 | + single_database._id = "0448d2ed-590d-4fa0-b272-a2a8a24555b5" |
| 68 | + |
| 69 | + server.databases.populate_permissions(single_database) |
| 70 | + permissions = single_database.permissions |
| 71 | + |
| 72 | + assert permissions[0].grantee.tag_name == "group" |
| 73 | + assert permissions[0].grantee.id == "5e5e1978-71fa-11e4-87dd-7382f5c437af" |
| 74 | + assert permissions[0].capabilities == { |
| 75 | + TSC.Permission.Capability.ChangePermissions: TSC.Permission.Mode.Deny, |
| 76 | + TSC.Permission.Capability.Read: TSC.Permission.Mode.Allow, |
| 77 | + } |
| 78 | + |
| 79 | + assert permissions[1].grantee.tag_name == "user" |
| 80 | + assert permissions[1].grantee.id == "7c37ee24-c4b1-42b6-a154-eaeab7ee330a" |
| 81 | + assert permissions[1].capabilities == { |
| 82 | + TSC.Permission.Capability.Write: TSC.Permission.Mode.Allow, |
| 83 | + } |
| 84 | + |
| 85 | + |
| 86 | +def test_populate_data_quality_warning(server): |
| 87 | + response_xml = GET_DQW_BY_CONTENT.read_text() |
| 88 | + with requests_mock.mock() as m: |
| 89 | + m.get( |
| 90 | + server.databases._data_quality_warnings.baseurl + "/94441d26-9a52-4a42-b0fb-3f94792d1aac", |
| 91 | + text=response_xml, |
| 92 | + ) |
| 93 | + single_database = TSC.DatabaseItem("test") |
| 94 | + single_database._id = "94441d26-9a52-4a42-b0fb-3f94792d1aac" |
| 95 | + |
| 96 | + server.databases.populate_dqw(single_database) |
| 97 | + dqws = single_database.dqws |
| 98 | + first_dqw = dqws.pop() |
| 99 | + assert first_dqw.id == "c2e0e406-84fb-4f4e-9998-f20dd9306710" |
| 100 | + assert first_dqw.warning_type == "WARNING" |
| 101 | + assert first_dqw.message, "Hello == World!" |
| 102 | + assert first_dqw.owner_id == "eddc8c5f-6af0-40be-b6b0-2c790290a43f" |
| 103 | + assert first_dqw.active |
| 104 | + assert first_dqw.severe |
| 105 | + assert str(first_dqw.created_at) == "2021-04-09 18:39:54+00:00" |
| 106 | + assert str(first_dqw.updated_at) == "2021-04-09 18:39:54+00:00" |
| 107 | + |
| 108 | + |
| 109 | +def test_delete(server): |
| 110 | + with requests_mock.mock() as m: |
| 111 | + m.delete(server.databases.baseurl + "/0448d2ed-590d-4fa0-b272-a2a8a24555b5", status_code=204) |
| 112 | + server.databases.delete("0448d2ed-590d-4fa0-b272-a2a8a24555b5") |
0 commit comments