deepdata: core product code (backend, frontend, runtime, deepflow module)
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, AsyncMock
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 确保 runtime/deepdata-python 目录在 sys.path 中
|
||||
TEST_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
APP_DIR = os.path.dirname(TEST_DIR)
|
||||
sys.path.insert(0, APP_DIR)
|
||||
|
||||
from app.module.dataset.service.service import Service
|
||||
from app.module.dataset.schema import DatasetResponse, PagedDatasetFileResponse, DatasetFileResponse
|
||||
from app.db.models import Dataset, DatasetFiles
|
||||
|
||||
|
||||
class TestDatasetService(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
def setUp(self):
|
||||
# 创建模拟的 AsyncSession 对象
|
||||
self.mock_db = MagicMock()
|
||||
self.mock_db.execute = AsyncMock()
|
||||
self.mock_db.commit = AsyncMock()
|
||||
self.mock_db.rollback = AsyncMock()
|
||||
self.mock_db.flush = AsyncMock()
|
||||
|
||||
# 初始化 Service
|
||||
self.service = Service(self.mock_db)
|
||||
|
||||
async def test_get_dataset_success(self):
|
||||
"""测试正常获取数据集详情"""
|
||||
# 准备 Mock 数据
|
||||
mock_dataset = Dataset(
|
||||
id="test-dataset-id",
|
||||
name="Test Dataset",
|
||||
description="A test description",
|
||||
dataset_type="TEXT",
|
||||
status="DRAFT",
|
||||
file_count=5,
|
||||
size_bytes=1024,
|
||||
created_by="system"
|
||||
)
|
||||
|
||||
# 模拟 db.execute 返回值
|
||||
mock_result = MagicMock()
|
||||
mock_result.scalar_one_or_none.return_value = mock_dataset
|
||||
self.mock_db.execute.return_value = mock_result
|
||||
|
||||
# 执行测试
|
||||
response = await self.service.get_dataset("test-dataset-id")
|
||||
|
||||
# 校验结果
|
||||
self.assertIsNotNone(response)
|
||||
self.assertEqual(response.id, "test-dataset-id")
|
||||
self.assertEqual(response.name, "Test Dataset")
|
||||
self.assertEqual(response.description, "A test description")
|
||||
self.assertEqual(response.datasetType, "TEXT")
|
||||
self.assertEqual(response.status, "DRAFT")
|
||||
self.assertEqual(response.fileCount, 5)
|
||||
self.assertEqual(response.totalSize, 1024)
|
||||
|
||||
async def test_get_dataset_not_found(self):
|
||||
"""测试获取不存在的数据集时返回 None"""
|
||||
# 模拟数据库未找到数据
|
||||
mock_result = MagicMock()
|
||||
mock_result.scalar_one_or_none.return_value = None
|
||||
self.mock_db.execute.return_value = mock_result
|
||||
|
||||
# 执行并验证
|
||||
response = await self.service.get_dataset("non-existent-id")
|
||||
self.assertIsNone(response)
|
||||
|
||||
async def test_create_dataset_success(self):
|
||||
"""测试创建数据集成功流程"""
|
||||
# 1. 模拟名称不存在检查 (select Dataset.name) -> 返回 None
|
||||
mock_result_check = MagicMock()
|
||||
mock_result_check.scalar_one_or_none.return_value = None
|
||||
self.mock_db.execute.return_value = mock_result_check
|
||||
|
||||
# 2. 调用创建服务
|
||||
response = await self.service.create_dataset(
|
||||
name="New Dataset",
|
||||
dataset_type="IMAGE",
|
||||
description="Testing create_dataset API",
|
||||
status="PUBLISHED"
|
||||
)
|
||||
|
||||
# 3. 验证结果
|
||||
self.assertIsNotNone(response)
|
||||
self.assertEqual(response.name, "New Dataset")
|
||||
self.assertEqual(response.datasetType, "IMAGE")
|
||||
self.assertEqual(response.description, "Testing create_dataset API")
|
||||
self.assertEqual(response.status, "PUBLISHED")
|
||||
|
||||
# 确认 db.add 和 db.commit 被调用
|
||||
self.mock_db.add.assert_called_once()
|
||||
self.mock_db.commit.assert_called_once()
|
||||
|
||||
async def test_create_dataset_duplicated_name(self):
|
||||
"""测试创建重名的数据集时抛出异常"""
|
||||
# 模拟冲突的已有数据集
|
||||
existing_dataset = Dataset(
|
||||
id="existing-id",
|
||||
name="Existing Dataset"
|
||||
)
|
||||
mock_result = MagicMock()
|
||||
mock_result.scalar_one_or_none.return_value = existing_dataset
|
||||
self.mock_db.execute.return_value = mock_result
|
||||
|
||||
# 检查是否正如预期抛出包含关键字 Exception
|
||||
with self.assertRaises(Exception) as context:
|
||||
await self.service.create_dataset(
|
||||
name="Existing Dataset",
|
||||
dataset_type="AUDIO"
|
||||
)
|
||||
self.assertIn("already exists", str(context.exception))
|
||||
|
||||
# 校验事务有无进行 commit
|
||||
self.mock_db.commit.assert_not_called()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user