| 
									
										
										
										
											2021-12-01 12:46:28 +05:30
										 |  |  | #  Copyright 2021 Collate | 
					
						
							|  |  |  | #  Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | #  you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | #  You may obtain a copy of the License at | 
					
						
							|  |  |  | #  http://www.apache.org/licenses/LICENSE-2.0 | 
					
						
							|  |  |  | #  Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | #  distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | #  See the License for the specific language governing permissions and | 
					
						
							|  |  |  | #  limitations under the License. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | """
 | 
					
						
							| 
									
										
										
										
											2021-10-28 20:31:38 +02:00
										 |  |  | OpenMetadata high-level API Dashboard test | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | """
 | 
					
						
							|  |  |  | import uuid | 
					
						
							|  |  |  | from unittest import TestCase | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  | from metadata.generated.schema.api.data.createDashboard import CreateDashboardRequest | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | from metadata.generated.schema.api.services.createDashboardService import ( | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  |     CreateDashboardServiceRequest, | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  | from metadata.generated.schema.api.teams.createUser import CreateUserRequest | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | from metadata.generated.schema.entity.data.dashboard import Dashboard | 
					
						
							| 
									
										
										
										
											2022-04-05 21:20:39 +02:00
										 |  |  | from metadata.generated.schema.entity.services.connections.dashboard.lookerConnection import ( | 
					
						
							|  |  |  |     LookerConnection, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2022-04-12 23:40:21 -07:00
										 |  |  | from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import ( | 
					
						
							|  |  |  |     OpenMetadataConnection, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | from metadata.generated.schema.entity.services.dashboardService import ( | 
					
						
							| 
									
										
										
										
											2022-04-05 21:20:39 +02:00
										 |  |  |     DashboardConnection, | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |     DashboardService, | 
					
						
							|  |  |  |     DashboardServiceType, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from metadata.generated.schema.type.entityReference import EntityReference | 
					
						
							|  |  |  | from metadata.ingestion.ometa.ometa_api import OpenMetadata | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OMetaDashboardTest(TestCase): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Run this integration test with the local API available | 
					
						
							|  |  |  |     Install the ingestion package before running the tests | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     service_entity_id = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-12 23:40:21 -07:00
										 |  |  |     server_config = OpenMetadataConnection(hostPort="http://localhost:8585/api") | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |     metadata = OpenMetadata(server_config) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 16:23:01 +01:00
										 |  |  |     assert metadata.health_check() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |     user = metadata.create_or_update( | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  |         data=CreateUserRequest(name="random-user", email="random@user.com"), | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  |     owner = EntityReference(id=user.id, type="user") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  |     service = CreateDashboardServiceRequest( | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |         name="test-service-dashboard", | 
					
						
							| 
									
										
										
										
											2022-06-24 16:44:37 -07:00
										 |  |  |         serviceType=DashboardServiceType.Looker, | 
					
						
							| 
									
										
										
										
											2022-04-18 19:00:36 +02:00
										 |  |  |         connection=DashboardConnection( | 
					
						
							| 
									
										
										
										
											2022-07-24 16:02:26 +02:00
										 |  |  |             config=LookerConnection( | 
					
						
							|  |  |  |                 hostPort="http://hostPort", clientId="id", clientSecret="secret" | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2022-04-18 19:00:36 +02:00
										 |  |  |         ), | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  |     service_type = "dashboardService" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls) -> None: | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Prepare ingredients | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         cls.service_entity = cls.metadata.create_or_update(data=cls.service) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cls.entity = Dashboard( | 
					
						
							|  |  |  |             id=uuid.uuid4(), | 
					
						
							|  |  |  |             name="test", | 
					
						
							|  |  |  |             service=EntityReference(id=cls.service_entity.id, type=cls.service_type), | 
					
						
							| 
									
										
										
										
											2022-04-05 21:20:39 +02:00
										 |  |  |             fullyQualifiedName="test-service-dashboard.test", | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  |         cls.create = CreateDashboardRequest( | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |             name="test", | 
					
						
							|  |  |  |             service=EntityReference(id=cls.service_entity.id, type=cls.service_type), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls) -> None: | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Clean up | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         service_id = str( | 
					
						
							|  |  |  |             cls.metadata.get_by_name( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |                 entity=DashboardService, fqn="test-service-dashboard" | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |             ).id.__root__ | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-21 22:30:39 +05:30
										 |  |  |         cls.metadata.delete( | 
					
						
							| 
									
										
										
										
											2022-04-05 21:20:39 +02:00
										 |  |  |             entity=DashboardService, | 
					
						
							|  |  |  |             entity_id=service_id, | 
					
						
							|  |  |  |             recursive=True, | 
					
						
							|  |  |  |             hard_delete=True, | 
					
						
							| 
									
										
										
										
											2022-03-21 22:30:39 +05:30
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_create(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         We can create a Dashboard and we receive it back as Entity | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res = self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(res.name, self.entity.name) | 
					
						
							|  |  |  |         self.assertEqual(res.service.id, self.entity.service.id) | 
					
						
							|  |  |  |         self.assertEqual(res.owner, None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_update(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Updating it properly changes its properties | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res_create = self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         updated = self.create.dict(exclude_unset=True) | 
					
						
							|  |  |  |         updated["owner"] = self.owner | 
					
						
							| 
									
										
										
										
											2022-02-01 01:29:56 +01:00
										 |  |  |         updated_entity = CreateDashboardRequest(**updated) | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         res = self.metadata.create_or_update(data=updated_entity) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Same ID, updated algorithm | 
					
						
							|  |  |  |         self.assertEqual(res.service.id, updated_entity.service.id) | 
					
						
							|  |  |  |         self.assertEqual(res_create.id, res.id) | 
					
						
							|  |  |  |         self.assertEqual(res.owner.id, self.user.id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_name(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         We can fetch a Dashboard by name and get it back as Entity | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res = self.metadata.get_by_name( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |             entity=Dashboard, fqn=self.entity.fullyQualifiedName | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |         self.assertEqual(res.name, self.entity.name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_id(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         We can fetch a Dashboard by ID and get it back as Entity | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # First pick up by name | 
					
						
							|  |  |  |         res_name = self.metadata.get_by_name( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |             entity=Dashboard, fqn=self.entity.fullyQualifiedName | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |         # Then fetch by ID | 
					
						
							| 
									
										
										
										
											2021-12-06 08:40:53 +01:00
										 |  |  |         res = self.metadata.get_by_id(entity=Dashboard, entity_id=res_name.id) | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(res_name.id, res.id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_list(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         We can list all our Dashboards | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res = self.metadata.list_entities(entity=Dashboard, limit=100) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Fetch our test Database. We have already inserted it, so we should find it | 
					
						
							|  |  |  |         data = next( | 
					
						
							|  |  |  |             iter(ent for ent in res.entities if ent.name == self.entity.name), None | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         assert data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_delete(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         We can delete a Dashboard by ID | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Find by name | 
					
						
							|  |  |  |         res_name = self.metadata.get_by_name( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |             entity=Dashboard, fqn=self.entity.fullyQualifiedName | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |         # Then fetch by ID | 
					
						
							|  |  |  |         res_id = self.metadata.get_by_id( | 
					
						
							|  |  |  |             entity=Dashboard, entity_id=str(res_name.id.__root__) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Delete | 
					
						
							| 
									
										
										
										
											2022-03-21 22:30:39 +05:30
										 |  |  |         self.metadata.delete( | 
					
						
							|  |  |  |             entity=Dashboard, entity_id=str(res_id.id.__root__), recursive=True | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Then we should not find it | 
					
						
							|  |  |  |         res = self.metadata.list_entities(entity=Dashboard) | 
					
						
							|  |  |  |         assert not next( | 
					
						
							| 
									
										
										
										
											2021-10-28 20:31:38 +02:00
										 |  |  |             iter( | 
					
						
							|  |  |  |                 ent | 
					
						
							|  |  |  |                 for ent in res.entities | 
					
						
							|  |  |  |                 if ent.fullyQualifiedName == self.entity.fullyQualifiedName | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             None, | 
					
						
							| 
									
										
										
										
											2021-10-26 23:18:43 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-01-07 10:37:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_list_versions(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         test list dashboard entity versions | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Find by name | 
					
						
							|  |  |  |         res_name = self.metadata.get_by_name( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |             entity=Dashboard, fqn=self.entity.fullyQualifiedName | 
					
						
							| 
									
										
										
										
											2022-01-07 10:37:56 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-10 09:07:39 +01:00
										 |  |  |         res = self.metadata.get_list_entity_versions( | 
					
						
							|  |  |  |             entity=Dashboard, entity_id=res_name.id.__root__ | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-01-07 10:37:56 +01:00
										 |  |  |         assert res | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_entity_version(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         test get dashboard entity version | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Find by name | 
					
						
							|  |  |  |         res_name = self.metadata.get_by_name( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |             entity=Dashboard, fqn=self.entity.fullyQualifiedName | 
					
						
							| 
									
										
										
										
											2022-01-07 10:37:56 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  |         res = self.metadata.get_entity_version( | 
					
						
							| 
									
										
										
										
											2022-01-10 09:07:39 +01:00
										 |  |  |             entity=Dashboard, entity_id=res_name.id.__root__, version=0.1 | 
					
						
							| 
									
										
										
										
											2022-01-07 10:37:56 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # check we get the correct version requested and the correct entity ID | 
					
						
							|  |  |  |         assert res.version.__root__ == 0.1 | 
					
						
							|  |  |  |         assert res.id == res_name.id | 
					
						
							| 
									
										
										
										
											2022-01-10 09:07:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_get_entity_ref(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         test get EntityReference | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         res = self.metadata.create_or_update(data=self.create) | 
					
						
							|  |  |  |         entity_ref = self.metadata.get_entity_reference( | 
					
						
							| 
									
										
										
										
											2022-05-26 21:00:18 +02:00
										 |  |  |             entity=Dashboard, fqn=res.fullyQualifiedName | 
					
						
							| 
									
										
										
										
											2022-01-10 09:07:39 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         assert res.id == entity_ref.id |