deepdata: core product code (backend, frontend, runtime, deepflow module)
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
import asyncio
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
from app.module.dataset.service.service import Service
|
||||
|
||||
|
||||
def _run(coro):
|
||||
return asyncio.run(coro)
|
||||
|
||||
|
||||
def test_create_dataset_uses_default_status_when_not_provided() -> None:
|
||||
db = MagicMock()
|
||||
first_result = MagicMock()
|
||||
first_result.scalar_one_or_none.return_value = None
|
||||
db.execute = AsyncMock(return_value=first_result)
|
||||
db.flush = AsyncMock()
|
||||
db.commit = AsyncMock()
|
||||
db.rollback = AsyncMock()
|
||||
|
||||
service = Service(db)
|
||||
response = _run(service.create_dataset(name="ds1", dataset_type="TEXT", description="desc"))
|
||||
|
||||
assert response.status == "DRAFT"
|
||||
assert response.name == "ds1"
|
||||
db.commit.assert_called_once()
|
||||
|
||||
|
||||
def test_get_dataset_returns_none_when_execute_fails() -> None:
|
||||
db = MagicMock()
|
||||
db.execute = AsyncMock(side_effect=RuntimeError("db unavailable"))
|
||||
|
||||
service = Service(db)
|
||||
response = _run(service.get_dataset("dataset-1"))
|
||||
|
||||
assert response is None
|
||||
|
||||
|
||||
def test_get_file_download_url_returns_file_path() -> None:
|
||||
db = MagicMock()
|
||||
fake_file = SimpleNamespace(file_path="/dataset/ds1/a.txt")
|
||||
result = MagicMock()
|
||||
result.scalar_one_or_none.return_value = fake_file
|
||||
db.execute = AsyncMock(return_value=result)
|
||||
|
||||
service = Service(db)
|
||||
file_path = _run(service.get_file_download_url("ds1", "file1"))
|
||||
|
||||
assert file_path == "/dataset/ds1/a.txt"
|
||||
|
||||
|
||||
def test_create_dataset_raises_for_duplicated_name() -> None:
|
||||
db = MagicMock()
|
||||
duplicated = SimpleNamespace(id="d1", name="dup")
|
||||
result = MagicMock()
|
||||
result.scalar_one_or_none.return_value = duplicated
|
||||
db.execute = AsyncMock(return_value=result)
|
||||
db.rollback = AsyncMock()
|
||||
|
||||
service = Service(db)
|
||||
|
||||
try:
|
||||
_run(service.create_dataset(name="dup", dataset_type="TEXT"))
|
||||
raised = False
|
||||
except Exception as exc: # noqa: BLE001
|
||||
raised = True
|
||||
assert "already exists" in str(exc)
|
||||
|
||||
assert raised is True
|
||||
db.rollback.assert_called_once()
|
||||
|
||||
|
||||
def test_get_file_download_url_returns_none_when_file_missing() -> None:
|
||||
db = MagicMock()
|
||||
result = MagicMock()
|
||||
result.scalar_one_or_none.return_value = None
|
||||
db.execute = AsyncMock(return_value=result)
|
||||
|
||||
service = Service(db)
|
||||
file_path = _run(service.get_file_download_url("ds1", "missing"))
|
||||
|
||||
assert file_path is None
|
||||
|
||||
|
||||
def test_get_dataset_returns_none_when_not_found() -> None:
|
||||
db = MagicMock()
|
||||
result = MagicMock()
|
||||
result.scalar_one_or_none.return_value = None
|
||||
db.execute = AsyncMock(return_value=result)
|
||||
|
||||
service = Service(db)
|
||||
response = _run(service.get_dataset("not-exist"))
|
||||
|
||||
assert response is None
|
||||
|
||||
|
||||
def test_get_dataset_files_returns_paged_response() -> None:
|
||||
db = MagicMock()
|
||||
count_result = MagicMock()
|
||||
count_result.scalar_one.return_value = 2
|
||||
files_result = MagicMock()
|
||||
files_result.scalars.return_value.all.return_value = [
|
||||
SimpleNamespace(
|
||||
id="f1",
|
||||
file_name="a.txt",
|
||||
file_type="txt",
|
||||
file_path="/dataset/a.txt",
|
||||
file_size=12,
|
||||
status="ACTIVE",
|
||||
upload_time=None,
|
||||
last_access_time=None,
|
||||
tags=[],
|
||||
tags_updated_at=None,
|
||||
),
|
||||
SimpleNamespace(
|
||||
id="f2",
|
||||
file_name="b.txt",
|
||||
file_type="txt",
|
||||
file_path="/dataset/b.txt",
|
||||
file_size=20,
|
||||
status="ACTIVE",
|
||||
upload_time=None,
|
||||
last_access_time=None,
|
||||
tags=[],
|
||||
tags_updated_at=None,
|
||||
),
|
||||
]
|
||||
db.execute = AsyncMock(side_effect=[count_result, files_result])
|
||||
|
||||
service = Service(db)
|
||||
response = _run(service.get_dataset_files("ds1", page=0, size=10))
|
||||
|
||||
assert response is not None
|
||||
assert response.totalElements == 2
|
||||
assert len(response.content) == 2
|
||||
assert response.content[0].fileName == "a.txt"
|
||||
|
||||
|
||||
def test_get_dataset_files_returns_none_when_query_fails() -> None:
|
||||
db = MagicMock()
|
||||
db.execute = AsyncMock(side_effect=RuntimeError("query fail"))
|
||||
service = Service(db)
|
||||
|
||||
response = _run(service.get_dataset_files("ds1"))
|
||||
assert response is None
|
||||
Reference in New Issue
Block a user