OpenMetadata/ingestion/tests/unit/sdk/test_sdk_entities.py
Sriharsha Chintalapani bb1395fc72
Implement Modern Fluent API Pattern for OpenMetadata Java Client (#23239)
* 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
2025-09-29 16:07:02 -07:00

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()