def test_empty_result(self, mock_client): extractor = SpannerMetadataExtractor() extractor.init( Scoped.get_scoped_conf(conf=self.conf, scope=extractor.get_scope())) result = extractor.extract() self.assertIsNone(result)
def test_multiple_results(self, mock_client): col1_name = "col1" col2_name = "col2" col1_type = "int" col2_type = "char" col1_sort_order = "1" col2_sort_order = "2" mock_client.return_value.instance.return_value.database.return_value.snapshot.return_value.__enter__.return_value.execute_sql.return_value = [ [col1_name, col1_type, col1_sort_order, self.schema, self.table], [col2_name, col2_type, col2_sort_order, self.schema, self.table], ] extractor = SpannerMetadataExtractor() extractor.init( Scoped.get_scoped_conf(conf=self.conf, scope=extractor.get_scope())) result = extractor.extract() assert result.database == self.connection_name assert result.cluster == self.project_id assert result.schema == f"{self.instance_id}.{self.database_id}" assert result.name == self.table self.assertEqual( result.columns[0].__repr__(), ColumnMetadata(col1_name, None, col1_type, col1_sort_order, None).__repr__(), ) self.assertEqual( result.columns[1].__repr__(), ColumnMetadata(col2_name, None, col2_type, col2_sort_order, None).__repr__(), )
def test_can_handle_instances(self, mock_build): mock_build.return_value = MockSpannerClient(NO_INSTANCES, None, None) extractor = SpannerMetadataExtractor() extractor.init( Scoped.get_scoped_conf(conf=self.conf, scope=extractor.get_scope()) ) result = extractor.extract() self.assertIsNone(result)
def test_empty_instance(self, mock_build): mock_build.return_value = MockSpannerClient(ONE_INSTANCE, NO_DATABASES, None) extractor = SpannerMetadataExtractor() extractor.init( Scoped.get_scoped_conf(conf=self.conf, scope=extractor.get_scope()) ) result = extractor.extract() self.assertIsNone(result)
def test_one_table_with_index(self, mock_build): mock_build.return_value = MockSpannerClient( ONE_INSTANCE, ONE_DATABASE, DATABASE_INDEX ) extractor = SpannerMetadataExtractor() extractor.init( Scoped.get_scoped_conf(conf=self.conf, scope=extractor.get_scope()) ) result = extractor.extract() self.assertIsNone(result)
def setUp(self): Extractor = SpannerMetadataExtractor scope = SpannerMetadataExtractor().get_scope() self.connection_name = "MOCK_CONNECTION_NAME" self.project_id = "MOCK_PROJECT" self.instance_id = "MOCK_INSTANCE" self.database_id = "MOCK_DATABASE" self.schema = "MOCK_SCHEMA" self.table = "MOCK_TABLE" config_dict = { f"{scope}.{Extractor.CONNECTION_NAME_KEY}": self.connection_name, f"{scope}.{Extractor.PROJECT_ID_KEY}": self.project_id, f"{scope}.{Extractor.INSTANCE_ID_KEY}": self.instance_id, f"{scope}.{Extractor.DATABASE_ID_KEY}": self.database_id, } self.conf = ConfigFactory.from_dict(config_dict)
def test_two_tables(self, mock_build): mock_build.return_value = MockSpannerClient( ONE_INSTANCE, ONE_DATABASE, DATABASE_DATA_TWO_TABLES ) extractor = SpannerMetadataExtractor() extractor.init( Scoped.get_scoped_conf(conf=self.conf, scope=extractor.get_scope()) ) result_1 = extractor.extract() result_2 = extractor.extract() self.assertEqual(result_2.database, "spanner") self.assertEqual(result_2.cluster, "your-project-here") self.assertEqual(result_2.schema, "your-instance.your-database") self.assertEqual(result_2.name, "MySecondTable") self.assertEqual(result_2.description, None) first_col = result_2.columns[0] self.assertEqual(first_col.name, "col1") self.assertEqual(first_col.type, "FLOAT") self.assertEqual(first_col.description, "")