Files
wehub-resource-sync bf2343b7e4
Integration Tests - MySQL + Elasticsearch / Detect Changes (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / integration-tests-mysql-elasticsearch (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / integration-tests-postgres-elasticsearch-redis (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / integration-tests-postgres-opensearch (push) Has been cancelled
Java Checkstyle / java-checkstyle (push) Has been cancelled
Maven Collate Tests / maven-collate-ci (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests-status (push) Has been cancelled
Publish Package to Maven Central Repository / publish-maven-packages (push) Has been cancelled
OpenMetadata Service Unit Tests / Detect Changes (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / k8s_operator-unit-tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:35:45 +08:00

366 lines
13 KiB
Python

"""
Integration tests for SDK fluent API with plural entity classes
"""
from unittest.mock import MagicMock, patch
from uuid import UUID
from metadata.generated.schema.api.data.createGlossary import CreateGlossaryRequest
from metadata.generated.schema.api.data.createGlossaryTerm import (
CreateGlossaryTermRequest,
)
from metadata.generated.schema.api.data.createTable import CreateTableRequest
from metadata.generated.schema.api.teams.createTeam import CreateTeamRequest
from metadata.generated.schema.api.teams.createUser import CreateUserRequest
from metadata.generated.schema.entity.data.database import Database
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
from metadata.generated.schema.entity.data.glossary import Glossary
from metadata.generated.schema.entity.data.glossaryTerm import GlossaryTerm
from metadata.generated.schema.entity.data.table import Column, DataType, Table
from metadata.generated.schema.entity.services.storageService import StorageService
from metadata.generated.schema.entity.teams.team import Team
from metadata.generated.schema.entity.teams.user import User
# Import SDK plural entity classes
from metadata.sdk import (
Databases,
DatabaseSchemas,
Glossaries,
GlossaryTerms,
StorageServices,
Tables,
Teams,
Users,
)
class TestSDKFluentAPI:
"""Test SDK fluent API with plural entity classes"""
def setup_method(self):
"""Set up test fixtures"""
self.mock_ometa = MagicMock()
# Mock the client getter to return our mock
with patch.object(Tables, "_get_client", return_value=self.mock_ometa): # noqa: SIM117
with patch.object(Users, "_get_client", return_value=self.mock_ometa):
with patch.object(Databases, "_get_client", return_value=self.mock_ometa):
with patch.object(DatabaseSchemas, "_get_client", return_value=self.mock_ometa):
with patch.object(Teams, "_get_client", return_value=self.mock_ometa):
with patch.object(Glossaries, "_get_client", return_value=self.mock_ometa):
with patch.object(
GlossaryTerms,
"_get_client",
return_value=self.mock_ometa,
):
self.setup_mocks()
def setup_mocks(self):
"""Setup mock responses"""
# Mock IDs
self.table_id = UUID("550e8400-e29b-41d4-a716-446655440000")
self.user_id = UUID("650e8400-e29b-41d4-a716-446655440000")
self.database_id = UUID("750e8400-e29b-41d4-a716-446655440000")
self.schema_id = UUID("850e8400-e29b-41d4-a716-446655440000")
self.team_id = UUID("950e8400-e29b-41d4-a716-446655440000")
self.glossary_id = UUID("a50e8400-e29b-41d4-a716-446655440000")
self.term_id = UUID("b50e8400-e29b-41d4-a716-446655440000")
@patch.object(Tables, "_get_client")
def test_tables_create(self, mock_get_client):
"""Test creating a table using Tables SDK"""
mock_get_client.return_value = self.mock_ometa
# Arrange
columns = [
Column(name="id", dataType=DataType.INT),
Column(name="name", dataType=DataType.VARCHAR, dataLength=255),
]
create_request = CreateTableRequest(
name="test_table",
databaseSchema="test_schema",
columns=columns,
)
mock_table = MagicMock(spec=Table)
mock_table.id = self.table_id
mock_table.name = "test_table"
mock_table.fullyQualifiedName = "service.database.schema.test_table"
self.mock_ometa.create_or_update.return_value = mock_table
# Act
result = Tables.create(create_request)
# Assert
assert result.name == "test_table"
self.mock_ometa.create_or_update.assert_called_once_with(create_request)
@patch.object(Tables, "_get_client")
def test_tables_retrieve_by_name(self, mock_get_client):
"""Test retrieving a table by name using Tables SDK"""
mock_get_client.return_value = self.mock_ometa
# Arrange
mock_table = MagicMock(spec=Table)
mock_table.id = self.table_id
mock_table.name = "test_table"
mock_table.fullyQualifiedName = "service.database.schema.test_table"
self.mock_ometa.get_by_name.return_value = mock_table
# Act
result = Tables.retrieve_by_name("service.database.schema.test_table")
# Assert
assert result.name == "test_table"
self.mock_ometa.get_by_name.assert_called_once_with(
entity=Table, fqn="service.database.schema.test_table", fields=None
)
@patch.object(Users, "_get_client")
def test_users_create(self, mock_get_client):
"""Test creating a user using Users SDK"""
mock_get_client.return_value = self.mock_ometa
# Arrange
create_request = CreateUserRequest(
name="test_user",
email="test@example.com",
)
mock_user = MagicMock(spec=User)
mock_user.id = self.user_id
mock_user.name = "test_user"
mock_user.email = "test@example.com"
self.mock_ometa.create_or_update.return_value = mock_user
# Act
result = Users.create(create_request)
# Assert
assert result.name == "test_user"
assert result.email == "test@example.com"
self.mock_ometa.create_or_update.assert_called_once_with(create_request)
@patch.object(Databases, "_get_client")
def test_databases_list(self, mock_get_client):
"""Test listing databases using Databases SDK"""
mock_get_client.return_value = self.mock_ometa
# Arrange
mock_db1 = MagicMock(spec=Database)
mock_db1.name = "db1"
mock_db2 = MagicMock(spec=Database)
mock_db2.name = "db2"
mock_response = MagicMock()
mock_response.entities = [mock_db1, mock_db2]
self.mock_ometa.list_entities.return_value = mock_response
# Act
result = Databases.list()
# Assert
assert len(result.entities) == 2
assert result.entities[0].name == "db1"
assert result.entities[1].name == "db2"
self.mock_ometa.list_entities.assert_called_once_with(
entity=Database, fields=None, after=None, before=None, limit=10, params=None
)
@patch.object(Teams, "_get_client")
def test_teams_create_and_delete(self, mock_get_client):
"""Test creating and deleting a team using Teams SDK"""
mock_get_client.return_value = self.mock_ometa
# Arrange - Create
create_request = CreateTeamRequest(
name="test_team",
teamType="Group",
)
mock_team = MagicMock(spec=Team)
mock_team.id = self.team_id
mock_team.name = "test_team"
self.mock_ometa.create_or_update.return_value = mock_team
# Act - Create
created_team = Teams.create(create_request)
# Assert - Create
assert created_team.name == "test_team"
# Arrange - Delete
self.mock_ometa.delete.return_value = None
# Act - Delete
Teams.delete(str(self.team_id))
# Assert - Delete
self.mock_ometa.delete.assert_called_once_with(
entity=Team, entity_id=str(self.team_id), recursive=False, hard_delete=False
)
@patch.object(Glossaries, "_get_client")
@patch.object(GlossaryTerms, "_get_client")
def test_glossary_and_terms_workflow(self, mock_terms_client, mock_glossary_client):
"""Test creating glossary and terms using SDK"""
mock_glossary_client.return_value = self.mock_ometa
mock_terms_client.return_value = self.mock_ometa
# Create Glossary
glossary_request = CreateGlossaryRequest(
name="business_glossary",
displayName="Business Glossary",
description="Company business terms",
)
mock_glossary = MagicMock(spec=Glossary)
mock_glossary.id = self.glossary_id
mock_glossary.name = "business_glossary"
self.mock_ometa.create_or_update.return_value = mock_glossary
created_glossary = Glossaries.create(glossary_request)
assert created_glossary.name == "business_glossary"
# Create Glossary Term
term_request = CreateGlossaryTermRequest(
name="customer",
displayName="Customer",
description="A person or organization that buys goods or services",
glossary="business_glossary", # Use FQN string
)
mock_term = MagicMock(spec=GlossaryTerm)
mock_term.id = self.term_id
mock_term.name = "customer"
mock_term.glossary = mock_glossary
self.mock_ometa.create_or_update.return_value = mock_term
created_term = GlossaryTerms.create(term_request)
assert created_term.name == "customer"
@patch.object(DatabaseSchemas, "_get_client")
def test_database_schemas_search(self, mock_get_client):
"""Test searching database schemas using DatabaseSchemas SDK"""
mock_get_client.return_value = self.mock_ometa
# Arrange
mock_schema1 = MagicMock(spec=DatabaseSchema)
mock_schema1.name = "public"
mock_schema2 = MagicMock(spec=DatabaseSchema)
mock_schema2.name = "staging"
self.mock_ometa.es_search_from_fqn.return_value = [mock_schema1, mock_schema2]
# Act
results = DatabaseSchemas.search("staging")
# Assert
assert len(results) == 2
self.mock_ometa.es_search_from_fqn.assert_called_once_with(
entity_type=DatabaseSchema, fqn_search_string="staging", size=10
)
@patch.object(StorageServices, "_get_client")
def test_storage_services_retrieve(self, mock_get_client):
"""Test retrieving a storage service by ID using StorageServices SDK"""
mock_get_client.return_value = self.mock_ometa
storage_service_id = "d1589e1d-2ab0-431c-a383-15e4be20a106"
mock_storage_service = MagicMock(spec=StorageService)
mock_storage_service.id = UUID(storage_service_id)
mock_storage_service.name = "s3-prod"
self.mock_ometa.get_by_id.return_value = mock_storage_service
result = StorageServices.retrieve(storage_service_id)
assert result.name == "s3-prod"
self.mock_ometa.get_by_id.assert_called_once_with(
entity=StorageService,
entity_id=storage_service_id,
fields=None,
)
class TestSDKEntityTypes:
"""Test that all SDK entities have proper entity_type methods"""
def test_storage_services_exported_from_entities_module(self):
"""Verify StorageServices can be imported from metadata.sdk.entities."""
from metadata.sdk import StorageServices as TopLevelStorageServices
from metadata.sdk.entities import StorageServices as EntitiesStorageServices
assert EntitiesStorageServices is TopLevelStorageServices
def test_all_entities_have_entity_type(self):
"""Verify all plural SDK entities implement entity_type method"""
from metadata.sdk import (
APICollections,
APIEndpoints,
Charts,
Classifications,
Containers,
DashboardDataModels,
Dashboards,
Databases,
DatabaseSchemas,
DataContracts,
DataProducts,
Domains,
Glossaries,
GlossaryTerms,
Metrics,
MLModels,
Pipelines,
Queries,
SearchIndexes,
StorageServices,
StoredProcedures,
Tables,
Tags,
Teams,
TestCases,
TestDefinitions,
TestSuites,
Users,
)
entities = [
Tables,
Users,
Databases,
DatabaseSchemas,
Dashboards,
Charts,
Pipelines,
MLModels,
Containers,
Queries,
Metrics,
Glossaries,
GlossaryTerms,
Classifications,
Tags,
Domains,
DataProducts,
DataContracts,
APICollections,
APIEndpoints,
SearchIndexes,
StorageServices,
StoredProcedures,
DashboardDataModels,
TestCases,
TestDefinitions,
TestSuites,
Teams,
]
for entity_class in entities:
# Check that entity_type method exists and returns a type
assert hasattr(entity_class, "entity_type"), f"{entity_class.__name__} missing entity_type method"
entity_type = entity_class.entity_type()
assert entity_type is not None, f"{entity_class.__name__}.entity_type() returned None"
assert isinstance(entity_type, type), f"{entity_class.__name__}.entity_type() did not return a type"