| 
									
										
										
										
											2025-04-03 10:39:47 +05:30
										 |  |  | #  Copyright 2025 Collate | 
					
						
							|  |  |  | #  Licensed under the Collate Community License, Version 1.0 (the "License"); | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | #  you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | #  You may obtain a copy of the License at | 
					
						
							| 
									
										
										
										
											2025-04-03 10:39:47 +05:30
										 |  |  | #  https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | #  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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | bigquery unit tests | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # pylint: disable=line-too-long | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | import types | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  | from copy import deepcopy | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | from typing import Dict | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | from unittest import TestCase | 
					
						
							| 
									
										
										
										
											2023-09-25 15:17:38 +05:30
										 |  |  | from unittest.mock import Mock, patch | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | from sqlalchemy import Integer, String | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from metadata.generated.schema.api.data.createDatabase import CreateDatabaseRequest | 
					
						
							|  |  |  | from metadata.generated.schema.api.data.createDatabaseSchema import ( | 
					
						
							|  |  |  |     CreateDatabaseSchemaRequest, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from metadata.generated.schema.api.data.createTable import CreateTableRequest | 
					
						
							|  |  |  | from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema | 
					
						
							|  |  |  | from metadata.generated.schema.entity.data.table import ( | 
					
						
							|  |  |  |     Column, | 
					
						
							|  |  |  |     Table, | 
					
						
							|  |  |  |     TableConstraint, | 
					
						
							|  |  |  |     TableType, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import ( | 
					
						
							|  |  |  |     OpenMetadataConnection, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from metadata.generated.schema.entity.services.databaseService import ( | 
					
						
							|  |  |  |     DatabaseConnection, | 
					
						
							|  |  |  |     DatabaseService, | 
					
						
							|  |  |  |     DatabaseServiceType, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | from metadata.generated.schema.metadataIngestion.workflow import ( | 
					
						
							|  |  |  |     OpenMetadataWorkflowConfig, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | from metadata.generated.schema.type.basic import ( | 
					
						
							|  |  |  |     EntityName, | 
					
						
							|  |  |  |     FullyQualifiedEntityName, | 
					
						
							|  |  |  |     SourceUrl, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from metadata.generated.schema.type.entityReference import EntityReference | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  | from metadata.ingestion.api.parser import parse_workflow_config_gracefully | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | from metadata.ingestion.ometa.ometa_api import OpenMetadata | 
					
						
							| 
									
										
										
										
											2023-10-23 12:12:06 +02:00
										 |  |  | from metadata.ingestion.source.database.bigquery.lineage import BigqueryLineageSource | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | from metadata.ingestion.source.database.bigquery.metadata import BigquerySource | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mock_bq_config = { | 
					
						
							|  |  |  |     "source": { | 
					
						
							|  |  |  |         "type": "bigquery", | 
					
						
							|  |  |  |         "serviceName": "local_bigquery", | 
					
						
							|  |  |  |         "serviceConnection": { | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |             "config": { | 
					
						
							|  |  |  |                 "type": "BigQuery", | 
					
						
							| 
									
										
										
										
											2025-06-09 13:09:40 +05:30
										 |  |  |                 "billingProjectId": "my-gcp-billing-project", | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                 "credentials": { | 
					
						
							|  |  |  |                     "gcpConfig": { | 
					
						
							|  |  |  |                         "type": "service_account", | 
					
						
							|  |  |  |                         "projectId": "my-gcp-project", | 
					
						
							|  |  |  |                         "privateKeyId": "private_key_id", | 
					
						
							|  |  |  |                         # this is a valid key that was generated on a local machine and is not used for any real project | 
					
						
							|  |  |  |                         "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAw3vHG9fDIkcYB0xi2Mv4fS2gUzKR9ZRrcVNeKkqGFTT71AVB\nOzgIqYVe8b2aWODuNye6sipcrqTqOt05Esj+sxhk5McM9bE2RlxXC5QH/Bp9zxMP\n/Yksv9Ov7fdDt/loUk7sTXvI+7LDJfmRYU6MtVjyyLs7KpQIB2xBWEToU1xZY+v0\ndRC1NA+YWc+FjXbAiFAf9d4gXkYO8VmU5meixVh4C8nsjokEXk0T/HEItpZCxadk\ndZ7LKUE/HDmWCO2oNG6sCf4ET2crjSdYIfXuREopX1aQwnk7KbI4/YIdlRz1I369\nAz3+Hxlf9lLJVH3+itN4GXrR9yWWKWKDnwDPbQIDAQABAoIBAQC3X5QuTR7SN8iV\niBUtc2D84+ECSmza5shG/UJW/6N5n0Mf53ICgBS4GNEwiYCRISa0/ILIgK6CcVb7\nsuvH8F3kWNzEMui4TO0x4YsR5GH9HkioCCS224frxkLBQnL20HIIy9ok8Rpe6Zjg\nNZUnp4yczPyqSeA9l7FUbTt69uDM2Cx61m8REOpFukpnYLyZGbmNPYmikEO+rq9r\nwNID5dkSeVuQYo4MQdRavOGFUWvUYXzkEQ0A6vPyraVBfolESX8WaLNVjic7nIa3\nujdSNojnJqGJ3gslntcmN1d4JOfydc4bja4/NdNlcOHpWDGLzY1QnaDe0Koxn8sx\nLT9MVD2NAoGBAPy7r726bKVGWcwqTzUuq1OWh5c9CAc4N2zWBBldSJyUdllUq52L\nWTyva6GRoRzCcYa/dKLLSM/k4eLf9tpxeIIfTOMsvzGtbAdm257ndMXNvfYpxCfU\nK/gUFfAUGHZ3MucTHRY6DTkJg763Sf6PubA2fqv3HhVZDK/1HGDtHlTPAoGBAMYC\npdV7O7lAyXS/d9X4PQZ4BM+P8MbXEdGBbPPlzJ2YIb53TEmYfSj3z41u9+BNnhGP\n4uzUyAR/E4sxrA2+Ll1lPSCn+KY14WWiVGfWmC5j1ftdpkbrXstLN8NpNYzrKZwx\njdR0ZkwvZ8B5+kJ1hK96giwWS+SJxJR3TohcQ18DAoGAJSfmv2r//BBqtURnHrd8\nwq43wvlbC8ytAVg5hA0d1r9Q4vM6w8+vz+cuWLOTTyobDKdrG1/tlXrd5r/sh9L0\n15SIdkGm3kPTxQbPNP5sQYRs8BrV1tEvoao6S3B45DnEBwrdVN42AXOvpcNGoqE4\nuHpahyeuiY7s+ZV8lZdmxSsCgYEAolr5bpmk1rjwdfGoaKEqKGuwRiBX5DHkQkxE\n8Zayt2VOBcX7nzyRI05NuEIMrLX3rZ61CktN1aH8fF02He6aRaoE/Qm9L0tujM8V\nNi8WiLMDeR/Ifs3u4/HAv1E8v1byv0dCa7klR8J257McJ/ID4X4pzcxaXgE4ViOd\nGOHNu9ECgYEApq1zkZthEQymTUxs+lSFcubQpaXyf5ZC61cJewpWkqGDtSC+8DxE\nF/jydybWuoNHXymnvY6QywxuIooivbuib6AlgpEJeybmnWlDOZklFOD0abNZ+aNO\ndUk7XVGffCakXQ0jp1kmZA4lGsYK1h5dEU5DgXqu4UYJ88Vttax2W+Y=\n-----END RSA PRIVATE KEY-----\n", | 
					
						
							|  |  |  |                         "clientEmail": "gcpuser@project_id.iam.gserviceaccount.com", | 
					
						
							| 
									
										
										
										
											2024-06-07 04:36:17 +02:00
										 |  |  |                         "clientId": "1234", | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                         "authUri": "https://accounts.google.com/o/oauth2/auth", | 
					
						
							|  |  |  |                         "tokenUri": "https://oauth2.googleapis.com/token", | 
					
						
							|  |  |  |                         "authProviderX509CertUrl": "https://www.googleapis.com/oauth2/v1/certs", | 
					
						
							|  |  |  |                         "clientX509CertUrl": "https://www.googleapis.com/oauth2/v1/certs", | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         "sourceConfig": {"config": {"type": "DatabaseMetadata", "includeTags": False}}, | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |     }, | 
					
						
							|  |  |  |     "sink": {"type": "metadata-rest", "config": {}}, | 
					
						
							|  |  |  |     "workflowConfig": { | 
					
						
							|  |  |  |         "openMetadataServerConfig": { | 
					
						
							|  |  |  |             "hostPort": "http://localhost:8585/api", | 
					
						
							|  |  |  |             "authProvider": "openmetadata", | 
					
						
							| 
									
										
										
										
											2025-01-02 13:07:55 +05:30
										 |  |  |             "securityConfig": {"jwtToken": "bigquery"}, | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |         } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MOCK_DB_NAME = "random-project-id" | 
					
						
							|  |  |  | MOCK_SCHEMA_NAME = "test_omd" | 
					
						
							|  |  |  | MOCK_TABLE_NAME = "customer_products" | 
					
						
							|  |  |  | EXPECTED_URL = "https://console.cloud.google.com/bigquery?project=random-project-id&ws=!1m5!1m4!4m3!1srandom-project-id!2stest_omd!3scustomer_products" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | MOCK_DATABASE_SERVICE = DatabaseService( | 
					
						
							|  |  |  |     id="c3eb265f-5445-4ad3-ba5e-797d3a3071bb", | 
					
						
							|  |  |  |     name="bigquery_source_test", | 
					
						
							|  |  |  |     connection=DatabaseConnection(), | 
					
						
							|  |  |  |     serviceType=DatabaseServiceType.Hive, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MOCK_DATABASE_SCHEMA = DatabaseSchema( | 
					
						
							|  |  |  |     id="c3eb265f-5445-4ad3-ba5e-797d3a3071bb", | 
					
						
							|  |  |  |     name="sample_schema", | 
					
						
							|  |  |  |     fullyQualifiedName="bigquery_source_test.random-project-id.sample_schema", | 
					
						
							|  |  |  |     service=EntityReference(id="c3eb265f-5445-4ad3-ba5e-797d3a3071bb", type="database"), | 
					
						
							|  |  |  |     database=EntityReference( | 
					
						
							|  |  |  |         id="a58b1856-729c-493b-bc87-6d2269b43ec0", | 
					
						
							|  |  |  |         type="database", | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MOCK_TABLE = Table( | 
					
						
							|  |  |  |     id="c3eb265f-5445-4ad3-ba5e-797d3a3071bb", | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |     name=EntityName("customers"), | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |     displayName=None, | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |     description="description\nwith new line", | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |     tableType="Regular", | 
					
						
							|  |  |  |     columns=[ | 
					
						
							|  |  |  |         Column( | 
					
						
							|  |  |  |             name="customer_id", | 
					
						
							|  |  |  |             dataType="INT", | 
					
						
							|  |  |  |             dataLength=1, | 
					
						
							|  |  |  |             dataTypeDisplay="INTEGER", | 
					
						
							|  |  |  |             constraint="PRIMARY_KEY", | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         Column( | 
					
						
							|  |  |  |             name="first_name", | 
					
						
							|  |  |  |             dataType="STRING", | 
					
						
							|  |  |  |             dataLength=1, | 
					
						
							|  |  |  |             dataTypeDisplay="VARCHAR", | 
					
						
							|  |  |  |             constraint="NULL", | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         Column( | 
					
						
							|  |  |  |             name="last_name", | 
					
						
							|  |  |  |             dataType="STRING", | 
					
						
							|  |  |  |             dataLength=1, | 
					
						
							|  |  |  |             dataTypeDisplay="VARCHAR", | 
					
						
							|  |  |  |             constraint="NULL", | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     tableConstraints=[], | 
					
						
							|  |  |  |     databaseSchema=EntityReference( | 
					
						
							|  |  |  |         id="c3eb265f-5445-4ad3-ba5e-797d3a3071bb", type="databaseSchema" | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     tags=[], | 
					
						
							|  |  |  |     sourceUrl=SourceUrl( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         "https://console.cloud.google.com/bigquery?project=random-project-id&ws=!1m5!1m4!4m3!1srandom-project-id!2ssample_schema!3scustomers" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |     ), | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EXPECTED_DATABASE = [ | 
					
						
							|  |  |  |     CreateDatabaseRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name=EntityName("random-project-id"), | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         tags=[], | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         service=FullyQualifiedEntityName("bigquery_source_test"), | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         default=False, | 
					
						
							|  |  |  |         sourceUrl=SourceUrl( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |             "https://console.cloud.google.com/bigquery?project=random-project-id" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | EXPTECTED_DATABASE_SCHEMA = [ | 
					
						
							|  |  |  |     CreateDatabaseSchemaRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name=EntityName("sample_schema"), | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |         description="Some description with it's own\nnew line", | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         database=FullyQualifiedEntityName("bigquery_source_test.random-project-id"), | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         sourceUrl=SourceUrl( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |             "https://console.cloud.google.com/bigquery?project=random-project-id&ws=!1m4!1m3!3m2!1srandom-project-id!2ssample_schema" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  | MOCK_TABLE_NAMES = [ | 
					
						
							|  |  |  |     ("customers", "Regular", None), | 
					
						
							|  |  |  |     ("orders", "Regular", "description\nwith new line"), | 
					
						
							|  |  |  | ] | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | MOCK_COLUMN_DATA = [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "customer_id", | 
					
						
							|  |  |  |             "type": Integer(), | 
					
						
							|  |  |  |             "nullable": True, | 
					
						
							|  |  |  |             "comment": None, | 
					
						
							|  |  |  |             "default": None, | 
					
						
							|  |  |  |             "precision": None, | 
					
						
							|  |  |  |             "scale": None, | 
					
						
							|  |  |  |             "max_length": None, | 
					
						
							|  |  |  |             "system_data_type": "INTEGER", | 
					
						
							|  |  |  |             "is_complex": False, | 
					
						
							|  |  |  |             "policy_tags": None, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "first_name", | 
					
						
							|  |  |  |             "type": String(), | 
					
						
							|  |  |  |             "nullable": True, | 
					
						
							|  |  |  |             "comment": None, | 
					
						
							|  |  |  |             "default": None, | 
					
						
							|  |  |  |             "precision": None, | 
					
						
							|  |  |  |             "scale": None, | 
					
						
							|  |  |  |             "max_length": None, | 
					
						
							|  |  |  |             "system_data_type": "VARCHAR", | 
					
						
							|  |  |  |             "is_complex": False, | 
					
						
							|  |  |  |             "policy_tags": None, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "last_name", | 
					
						
							|  |  |  |             "type": String(), | 
					
						
							|  |  |  |             "nullable": True, | 
					
						
							|  |  |  |             "comment": None, | 
					
						
							|  |  |  |             "default": None, | 
					
						
							|  |  |  |             "precision": None, | 
					
						
							|  |  |  |             "scale": None, | 
					
						
							|  |  |  |             "max_length": None, | 
					
						
							|  |  |  |             "system_data_type": "VARCHAR", | 
					
						
							|  |  |  |             "is_complex": False, | 
					
						
							|  |  |  |             "policy_tags": None, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "order_id", | 
					
						
							|  |  |  |             "type": Integer(), | 
					
						
							|  |  |  |             "nullable": True, | 
					
						
							|  |  |  |             "comment": None, | 
					
						
							|  |  |  |             "default": None, | 
					
						
							|  |  |  |             "precision": None, | 
					
						
							|  |  |  |             "scale": None, | 
					
						
							|  |  |  |             "max_length": None, | 
					
						
							|  |  |  |             "system_data_type": "INTEGER", | 
					
						
							|  |  |  |             "is_complex": False, | 
					
						
							|  |  |  |             "policy_tags": None, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "customer_id", | 
					
						
							|  |  |  |             "type": Integer(), | 
					
						
							|  |  |  |             "nullable": True, | 
					
						
							|  |  |  |             "comment": None, | 
					
						
							|  |  |  |             "default": None, | 
					
						
							|  |  |  |             "precision": None, | 
					
						
							|  |  |  |             "scale": None, | 
					
						
							|  |  |  |             "max_length": None, | 
					
						
							|  |  |  |             "system_data_type": "INTEGER", | 
					
						
							|  |  |  |             "is_complex": False, | 
					
						
							|  |  |  |             "policy_tags": None, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "status", | 
					
						
							|  |  |  |             "type": String(), | 
					
						
							|  |  |  |             "nullable": True, | 
					
						
							|  |  |  |             "comment": None, | 
					
						
							|  |  |  |             "default": None, | 
					
						
							|  |  |  |             "precision": None, | 
					
						
							|  |  |  |             "scale": None, | 
					
						
							|  |  |  |             "max_length": None, | 
					
						
							|  |  |  |             "system_data_type": "VARCHAR", | 
					
						
							|  |  |  |             "is_complex": False, | 
					
						
							|  |  |  |             "policy_tags": None, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MOCK_PK_CONSTRAINT: Dict[str, Dict] = { | 
					
						
							|  |  |  |     "customers": dict({"constrained_columns": ("customer_id",)}), | 
					
						
							|  |  |  |     "orders": dict({"constrained_columns": ()}), | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MOCK_FK_CONSTRAINT = { | 
					
						
							|  |  |  |     "customers": [], | 
					
						
							|  |  |  |     "orders": [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "name": "orders.fk$1", | 
					
						
							|  |  |  |             "referred_schema": "demo_dbt_jaffle", | 
					
						
							|  |  |  |             "referred_table": "customers", | 
					
						
							|  |  |  |             "constrained_columns": ["customer_id"], | 
					
						
							|  |  |  |             "referred_columns": ["customer_id"], | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EXPECTED_TABLE = [ | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         CreateTableRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |             name=EntityName("customers"), | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             tableType="Regular", | 
					
						
							|  |  |  |             columns=[ | 
					
						
							|  |  |  |                 Column( | 
					
						
							|  |  |  |                     name="customer_id", | 
					
						
							|  |  |  |                     dataType="INT", | 
					
						
							|  |  |  |                     dataLength=1, | 
					
						
							|  |  |  |                     dataTypeDisplay="INTEGER", | 
					
						
							|  |  |  |                     constraint="PRIMARY_KEY", | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  |                     tags=None, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ), | 
					
						
							|  |  |  |                 Column( | 
					
						
							|  |  |  |                     name="first_name", | 
					
						
							|  |  |  |                     dataType="STRING", | 
					
						
							|  |  |  |                     dataLength=1, | 
					
						
							|  |  |  |                     dataTypeDisplay="VARCHAR", | 
					
						
							|  |  |  |                     constraint="NULL", | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  |                     tags=None, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ), | 
					
						
							|  |  |  |                 Column( | 
					
						
							|  |  |  |                     name="last_name", | 
					
						
							|  |  |  |                     dataType="STRING", | 
					
						
							|  |  |  |                     dataLength=1, | 
					
						
							|  |  |  |                     dataTypeDisplay="VARCHAR", | 
					
						
							|  |  |  |                     constraint="NULL", | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  |                     tags=None, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ), | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             tableConstraints=[], | 
					
						
							|  |  |  |             databaseSchema=FullyQualifiedEntityName( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                 root="bigquery_source_test.random-project-id.sample_schema" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             ), | 
					
						
							|  |  |  |             tags=[], | 
					
						
							|  |  |  |             sourceUrl=SourceUrl( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                 "https://console.cloud.google.com/bigquery?project=random-project-id&ws=!1m5!1m4!4m3!1srandom-project-id!2ssample_schema!3scustomers" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         CreateTableRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |             name=EntityName("orders"), | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |             description="description\nwith new line", | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             tableType="Regular", | 
					
						
							|  |  |  |             columns=[ | 
					
						
							|  |  |  |                 Column( | 
					
						
							|  |  |  |                     name="order_id", | 
					
						
							|  |  |  |                     dataType="INT", | 
					
						
							|  |  |  |                     dataLength=1, | 
					
						
							|  |  |  |                     dataTypeDisplay="INTEGER", | 
					
						
							|  |  |  |                     constraint="NULL", | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  |                     tags=None, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ), | 
					
						
							|  |  |  |                 Column( | 
					
						
							|  |  |  |                     name="customer_id", | 
					
						
							|  |  |  |                     dataType="INT", | 
					
						
							|  |  |  |                     dataLength=1, | 
					
						
							|  |  |  |                     dataTypeDisplay="INTEGER", | 
					
						
							|  |  |  |                     constraint="NULL", | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  |                     tags=None, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ), | 
					
						
							|  |  |  |                 Column( | 
					
						
							|  |  |  |                     name="status", | 
					
						
							|  |  |  |                     dataType="STRING", | 
					
						
							|  |  |  |                     dataLength=1, | 
					
						
							|  |  |  |                     dataTypeDisplay="VARCHAR", | 
					
						
							|  |  |  |                     constraint="NULL", | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  |                     tags=None, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ), | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             tableConstraints=[ | 
					
						
							|  |  |  |                 TableConstraint( | 
					
						
							|  |  |  |                     constraintType="FOREIGN_KEY", | 
					
						
							|  |  |  |                     columns=["customer_id"], | 
					
						
							|  |  |  |                     referredColumns=[ | 
					
						
							|  |  |  |                         FullyQualifiedEntityName( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                             root="bigquery_source_test.random-project-id.sample_schema.customers.customer_id" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                         ) | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             databaseSchema=FullyQualifiedEntityName( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                 root="bigquery_source_test.random-project-id.sample_schema" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             ), | 
					
						
							|  |  |  |             tags=[], | 
					
						
							|  |  |  |             sourceUrl=SourceUrl( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                 "https://console.cloud.google.com/bigquery?project=random-project-id&ws=!1m5!1m4!4m3!1srandom-project-id!2ssample_schema!3sorders" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             ), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MOCK_TABLE_CONSTRAINT = [ | 
					
						
							|  |  |  |     [], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         TableConstraint( | 
					
						
							|  |  |  |             constraintType="FOREIGN_KEY", | 
					
						
							|  |  |  |             columns=["customer_id"], | 
					
						
							|  |  |  |             referredColumns=[ | 
					
						
							|  |  |  |                 FullyQualifiedEntityName( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                     "bigquery_source_test.random-project-id.sample_schema.customers.customer_id" | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 ) | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | class BigqueryUnitTest(TestCase): | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |     """
 | 
					
						
							|  |  |  |     Implements the necessary methods to extract | 
					
						
							|  |  |  |     Bigquery Unit Test | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |     @patch( | 
					
						
							| 
									
										
										
										
											2023-10-05 14:50:42 +05:30
										 |  |  |         "metadata.ingestion.source.database.bigquery.metadata.BigquerySource._test_connection" | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |     ) | 
					
						
							|  |  |  |     @patch( | 
					
						
							|  |  |  |         "metadata.ingestion.source.database.bigquery.metadata.BigquerySource.set_project_id" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2023-09-25 15:17:38 +05:30
										 |  |  |     @patch("metadata.ingestion.source.database.bigquery.connection.get_connection") | 
					
						
							|  |  |  |     def __init__( | 
					
						
							|  |  |  |         self, methodName, get_connection, set_project_id, test_connection | 
					
						
							|  |  |  |     ) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |         super().__init__(methodName) | 
					
						
							| 
									
										
										
										
											2023-09-25 15:17:38 +05:30
										 |  |  |         get_connection.return_value = Mock() | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  |         test_connection.return_value = False | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         set_project_id.return_value = "random-project-id" | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         self.config = parse_workflow_config_gracefully(mock_bq_config) | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         self.metadata = OpenMetadata( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |             OpenMetadataConnection.model_validate( | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                 mock_bq_config["workflowConfig"]["openMetadataServerConfig"] | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         self.bq_source = BigquerySource.create(mock_bq_config["source"], self.metadata) | 
					
						
							| 
									
										
										
										
											2024-03-25 18:20:40 +01:00
										 |  |  |         self.bq_source.context.get().__dict__[ | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             "database_service" | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         ] = MOCK_DATABASE_SERVICE.name.root | 
					
						
							| 
									
										
										
										
											2024-03-25 18:20:40 +01:00
										 |  |  |         self.thread_id = self.bq_source.context.get_current_thread_id() | 
					
						
							|  |  |  |         self.bq_source._inspector_map[self.thread_id] = types.SimpleNamespace() | 
					
						
							|  |  |  |         self.bq_source._inspector_map[ | 
					
						
							|  |  |  |             self.thread_id | 
					
						
							|  |  |  |         ].get_pk_constraint = lambda table_name, schema: [] | 
					
						
							|  |  |  |         self.bq_source._inspector_map[ | 
					
						
							|  |  |  |             self.thread_id | 
					
						
							|  |  |  |         ].get_unique_constraints = lambda table_name, schema_name: [] | 
					
						
							|  |  |  |         self.bq_source._inspector_map[ | 
					
						
							|  |  |  |             self.thread_id | 
					
						
							|  |  |  |         ].get_foreign_keys = lambda table_name, schema: [] | 
					
						
							|  |  |  |         self.bq_source._inspector_map[ | 
					
						
							|  |  |  |             self.thread_id | 
					
						
							|  |  |  |         ].get_columns = lambda table_name, schema, db_name: [] | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |         self.bq_source.client = Mock() | 
					
						
							| 
									
										
										
										
											2023-06-20 15:16:45 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_source_url(self): | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             self.bq_source.get_source_url( | 
					
						
							|  |  |  |                 database_name=MOCK_DB_NAME, | 
					
						
							|  |  |  |                 schema_name=MOCK_SCHEMA_NAME, | 
					
						
							|  |  |  |                 table_name=MOCK_TABLE_NAME, | 
					
						
							|  |  |  |                 table_type=TableType.Regular, | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             EXPECTED_URL, | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-10-23 12:12:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |     @patch( | 
					
						
							|  |  |  |         "metadata.ingestion.source.database.database_service.DatabaseServiceSource.get_database_tag_labels" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     def test_yield_database(self, get_database_tag_labels): | 
					
						
							|  |  |  |         get_database_tag_labels.return_value = [] | 
					
						
							|  |  |  |         assert EXPECTED_DATABASE == [ | 
					
						
							|  |  |  |             either.right for either in self.bq_source.yield_database(MOCK_DB_NAME) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_yield_database_schema(self): | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |         def schema_comment_query(query: str): | 
					
						
							|  |  |  |             if query.strip().startswith( | 
					
						
							|  |  |  |                 "SELECT option_value as schema_description FROM" | 
					
						
							|  |  |  |             ): | 
					
						
							|  |  |  |                 result = Mock() | 
					
						
							|  |  |  |                 mock_result = Mock() | 
					
						
							|  |  |  |                 mock_result.schema_description = ( | 
					
						
							|  |  |  |                     '"Some description with it\'s own\\nnew line"' | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |                 result.result.return_value = [mock_result] | 
					
						
							|  |  |  |                 return result | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 raise NotImplementedError | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.bq_source.client.query = schema_comment_query | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         assert EXPTECTED_DATABASE_SCHEMA == [ | 
					
						
							|  |  |  |             either.right | 
					
						
							|  |  |  |             for either in self.bq_source.yield_database_schema( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |                 schema_name=MOCK_DATABASE_SCHEMA.name.root | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             ) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @patch( | 
					
						
							|  |  |  |         "metadata.ingestion.source.database.bigquery.metadata.BigquerySource.get_tag_labels" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     @patch( | 
					
						
							|  |  |  |         "metadata.ingestion.source.database.bigquery.metadata.BigquerySource.get_table_partition_details" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     @patch( | 
					
						
							|  |  |  |         "metadata.ingestion.source.database.common_db_source.CommonDbSourceService._get_foreign_constraints" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     def test_get_columns_with_constraints( | 
					
						
							|  |  |  |         self, _get_foreign_constraints, get_table_partition_details, get_tag_labels | 
					
						
							|  |  |  |     ): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Test different constraint type ingested as expected | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         get_tag_labels.return_value = [] | 
					
						
							|  |  |  |         get_table_partition_details.return_value = False, None | 
					
						
							| 
									
										
										
										
											2024-03-25 18:20:40 +01:00
										 |  |  |         self.bq_source.context.get().__dict__["database"] = MOCK_DB_NAME | 
					
						
							|  |  |  |         self.bq_source.context.get().__dict__[ | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             "database_schema" | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         ] = MOCK_DATABASE_SCHEMA.name.root | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |         for i, table in enumerate(MOCK_TABLE_NAMES): | 
					
						
							|  |  |  |             _get_foreign_constraints.return_value = MOCK_TABLE_CONSTRAINT[i] | 
					
						
							|  |  |  |             self.bq_source.inspector.get_pk_constraint = ( | 
					
						
							|  |  |  |                 lambda table_name, schema: MOCK_PK_CONSTRAINT[ | 
					
						
							|  |  |  |                     table[0] | 
					
						
							|  |  |  |                 ]  # pylint: disable=cell-var-from-loop | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             self.bq_source.inspector.get_foreign_keys = ( | 
					
						
							|  |  |  |                 lambda table_name, schema: MOCK_FK_CONSTRAINT[ | 
					
						
							|  |  |  |                     table[0] | 
					
						
							|  |  |  |                 ]  # pylint: disable=cell-var-from-loop | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             self.bq_source.inspector.get_columns = ( | 
					
						
							| 
									
										
										
										
											2025-04-01 13:02:37 +05:30
										 |  |  |                 lambda table_name, schema, table_type, db_name: MOCK_COLUMN_DATA[ | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |                     i | 
					
						
							|  |  |  |                 ]  # pylint: disable=cell-var-from-loop | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2024-05-06 18:03:50 +05:30
										 |  |  |             self.bq_source.inspector.get_table_ddl = ( | 
					
						
							|  |  |  |                 lambda table_name, schema, db_name: None  # pylint: disable=cell-var-from-loop | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |             self.bq_source.inspector.get_table_comment = lambda table_name, schema: { | 
					
						
							|  |  |  |                 "text": table[2] | 
					
						
							|  |  |  |             }  # pylint: disable=cell-var-from-loop | 
					
						
							| 
									
										
										
										
											2025-07-22 13:04:50 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |             # Mock the BigQuery client get_table method for clustering fields | 
					
						
							|  |  |  |             mock_table = Mock() | 
					
						
							|  |  |  |             mock_table.clustering_fields = []  # Empty list to avoid constraint creation | 
					
						
							|  |  |  |             self.bq_source.client.get_table = lambda fqn: mock_table | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             assert EXPECTED_TABLE[i] == [ | 
					
						
							| 
									
										
										
										
											2024-08-21 00:56:19 +09:00
										 |  |  |                 either.right | 
					
						
							|  |  |  |                 for either in self.bq_source.yield_table((table[0], table[1])) | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |             ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-23 12:12:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BigqueryLineageSourceTest(TestCase): | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |     """
 | 
					
						
							|  |  |  |     Implements the necessary methods to extract | 
					
						
							|  |  |  |     Bigquery Lineage Test | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-23 12:12:06 +02:00
										 |  |  |     @patch("metadata.ingestion.source.database.bigquery.connection.get_connection") | 
					
						
							|  |  |  |     @patch("metadata.ingestion.source.database.bigquery.connection.test_connection") | 
					
						
							| 
									
										
										
										
											2023-10-25 11:15:41 +05:30
										 |  |  |     @patch( | 
					
						
							|  |  |  |         "metadata.ingestion.source.database.bigquery.query_parser.BigqueryQueryParserSource.set_project_id" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2023-10-23 15:51:40 +05:30
										 |  |  |     def __init__( | 
					
						
							| 
									
										
										
										
											2023-10-25 11:15:41 +05:30
										 |  |  |         self, | 
					
						
							|  |  |  |         methodName, | 
					
						
							| 
									
										
										
										
											2024-02-07 16:49:27 +05:30
										 |  |  |         set_project_id_lineage,  # pylint: disable=unused-argument | 
					
						
							|  |  |  |         test_connection,  # pylint: disable=unused-argument | 
					
						
							|  |  |  |         get_connection,  # pylint: disable=unused-argument | 
					
						
							| 
									
										
										
										
											2023-10-23 15:51:40 +05:30
										 |  |  |     ) -> None: | 
					
						
							| 
									
										
										
										
											2023-10-23 12:12:06 +02:00
										 |  |  |         super().__init__(methodName) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         mock_credentials_path_bq_config = deepcopy(mock_bq_config) | 
					
						
							|  |  |  |         mock_credentials_path_bq_config["source"]["serviceConnection"]["config"][ | 
					
						
							|  |  |  |             "credentials" | 
					
						
							| 
									
										
										
										
											2024-07-17 07:51:17 +02:00
										 |  |  |         ]["gcpConfig"] = {"path": "credentials.json", "projectId": "my-gcp-project"} | 
					
						
							| 
									
										
										
										
											2024-06-07 04:36:17 +02:00
										 |  |  |         self.config = OpenMetadataWorkflowConfig.model_validate( | 
					
						
							| 
									
										
										
										
											2023-10-23 15:51:40 +05:30
										 |  |  |             mock_credentials_path_bq_config | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-10-25 11:15:41 +05:30
										 |  |  |         self.bq_query_parser = BigqueryLineageSource( | 
					
						
							|  |  |  |             self.config.source, self.config.workflowConfig.openMetadataServerConfig | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-10-23 12:12:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_get_engine_without_project_id_specified(self): | 
					
						
							|  |  |  |         for engine in self.bq_query_parser.get_engine(): | 
					
						
							|  |  |  |             assert engine is self.bq_query_parser.engine |