mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-10-10 08:16:25 +00:00

* Implement Modern Fluent API Pattern for OpenMetadata Java Client * Add Lineage, Bulk, Search static methods * Add all API support for Java & Python SDKs * Add Python SDKs and mock tests * Add Fluent APIs for sdks * Add Fluent APIs for sdks * Add Fluent APIs for sdks, support async import/export * Remove unnecessary scripts * fix py checkstyle * fix tests with new plural form sdks * Fix tests * remove examples from python sdk * remove examples from python sdk * Fix type check * Fix pyformat check * Fix pyformat check * fix python integration tests * fix pycheck and pytests * fix search api pycheck * fix pycheck * fix pycheck * fix pycheck * Fix test_sdk_integration * Improvements to SDK * Remove SDK coverage for Python 3.9 * Remove SDK coverage for Python 3.9 * Remove SDK coverage for Python 3.9
193 lines
6.2 KiB
Python
193 lines
6.2 KiB
Python
"""
|
|
Unit tests for SDK entity operations
|
|
"""
|
|
import unittest
|
|
from unittest.mock import MagicMock
|
|
from uuid import UUID
|
|
|
|
import metadata.sdk as om
|
|
from metadata.generated.schema.api.data.createTable import CreateTableRequest
|
|
from metadata.generated.schema.api.teams.createUser import CreateUserRequest
|
|
from metadata.generated.schema.entity.data.table import Column, DataType
|
|
from metadata.generated.schema.entity.data.table import Table as TableEntity
|
|
from metadata.generated.schema.entity.teams.user import User as UserEntity
|
|
|
|
|
|
class TestSDKEntities(unittest.TestCase):
|
|
"""Test SDK entity operations"""
|
|
|
|
def setUp(self):
|
|
"""Set up test fixtures"""
|
|
# Create mock OMeta instance
|
|
self.mock_ometa = MagicMock()
|
|
|
|
# Set default clients
|
|
om.Tables.set_default_client(self.mock_ometa)
|
|
om.Users.set_default_client(self.mock_ometa)
|
|
|
|
# Test data
|
|
self.table_id = "550e8400-e29b-41d4-a716-446655440000"
|
|
self.user_id = "650e8400-e29b-41d4-a716-446655440000"
|
|
|
|
def test_table_create(self):
|
|
"""Test creating a table"""
|
|
# 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=TableEntity)
|
|
mock_table.id = UUID(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 = om.Tables.create(create_request)
|
|
|
|
# Assert
|
|
self.assertEqual(result.name, "test_table")
|
|
self.mock_ometa.create_or_update.assert_called_once_with(create_request)
|
|
|
|
def test_table_retrieve(self):
|
|
"""Test retrieving a table by ID"""
|
|
# Arrange
|
|
mock_table = MagicMock(spec=TableEntity)
|
|
mock_table.id = UUID(self.table_id)
|
|
mock_table.name = "test_table"
|
|
mock_table.fullyQualifiedName = "service.database.schema.test_table"
|
|
self.mock_ometa.get_by_id.return_value = mock_table
|
|
|
|
# Act
|
|
result = om.Tables.retrieve("table-id", fields=["owners", "tags"])
|
|
|
|
# Assert
|
|
self.assertEqual(result.name, "test_table")
|
|
self.mock_ometa.get_by_id.assert_called_once_with(
|
|
entity=TableEntity,
|
|
entity_id="table-id",
|
|
fields=["owners", "tags"],
|
|
)
|
|
|
|
def test_table_retrieve_by_name(self):
|
|
"""Test retrieving a table by FQN"""
|
|
# Arrange
|
|
mock_table = MagicMock(spec=TableEntity)
|
|
mock_table.id = UUID(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 = om.Tables.retrieve_by_name("service.database.schema.test_table")
|
|
|
|
# Assert
|
|
self.assertEqual(
|
|
result.fullyQualifiedName, "service.database.schema.test_table"
|
|
)
|
|
self.mock_ometa.get_by_name.assert_called_once()
|
|
|
|
def test_table_delete(self):
|
|
"""Test deleting a table"""
|
|
# Act
|
|
om.Tables.delete("table-id", recursive=True, hard_delete=False)
|
|
|
|
# Assert
|
|
self.mock_ometa.delete.assert_called_once_with(
|
|
entity=TableEntity,
|
|
entity_id="table-id",
|
|
recursive=True,
|
|
hard_delete=False,
|
|
)
|
|
|
|
def test_table_list(self):
|
|
"""Test listing tables"""
|
|
# Arrange
|
|
mock_response = MagicMock()
|
|
mock_response.entities = [
|
|
MagicMock(spec=TableEntity, name="table1"),
|
|
MagicMock(spec=TableEntity, name="table2"),
|
|
]
|
|
self.mock_ometa.list_entities.return_value = mock_response
|
|
|
|
# Act
|
|
result = om.Tables.list(limit=25)
|
|
|
|
# Assert
|
|
self.assertEqual(len(result.entities), 2)
|
|
self.mock_ometa.list_entities.assert_called_once()
|
|
|
|
def test_table_async_operations(self):
|
|
"""Test async CSV operations exist"""
|
|
# Verify that CSV operations support async
|
|
exporter = om.Tables.export_csv("test_export")
|
|
self.assertTrue(hasattr(exporter, "with_async"))
|
|
self.assertTrue(hasattr(exporter, "execute_async"))
|
|
|
|
importer = om.Tables.import_csv("test_import")
|
|
self.assertTrue(hasattr(importer, "with_async"))
|
|
self.assertTrue(hasattr(importer, "execute_async"))
|
|
|
|
def test_user_create(self):
|
|
"""Test creating a user"""
|
|
# Arrange
|
|
create_request = CreateUserRequest(
|
|
name="john.doe",
|
|
email="john.doe@company.com",
|
|
displayName="John Doe",
|
|
)
|
|
|
|
mock_user = MagicMock(spec=UserEntity)
|
|
mock_user.id = UUID(self.user_id)
|
|
mock_user.name = "john.doe"
|
|
mock_user.email = "john.doe@company.com"
|
|
self.mock_ometa.create_or_update.return_value = mock_user
|
|
|
|
# Act
|
|
result = om.Users.create(create_request)
|
|
|
|
# Assert
|
|
self.assertEqual(result.name, "john.doe")
|
|
self.assertEqual(result.email, "john.doe@company.com")
|
|
self.mock_ometa.create_or_update.assert_called_once_with(create_request)
|
|
|
|
def test_user_retrieve(self):
|
|
"""Test retrieving a user"""
|
|
# Arrange
|
|
mock_user = MagicMock(spec=UserEntity)
|
|
mock_user.id = UUID(self.user_id)
|
|
mock_user.name = "john.doe"
|
|
mock_user.email = "john.doe@company.com"
|
|
self.mock_ometa.get_by_id.return_value = mock_user
|
|
|
|
# Act
|
|
result = om.Users.retrieve("user-id")
|
|
|
|
# Assert
|
|
self.assertEqual(result.name, "john.doe")
|
|
self.mock_ometa.get_by_id.assert_called_once()
|
|
|
|
def test_user_delete(self):
|
|
"""Test deleting a user"""
|
|
# Act
|
|
om.Users.delete("user-id", hard_delete=True)
|
|
|
|
# Assert
|
|
self.mock_ometa.delete.assert_called_once_with(
|
|
entity=UserEntity,
|
|
entity_id="user-id",
|
|
recursive=False,
|
|
hard_delete=True,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|