Files
wehub-resource-sync 1443d3fdf9
Ruff Format Check / Ruff Format & Lint (push) Failing after 7m39s
Deploy VitePress site to Pages / build (push) Failing after 9m11s
Deploy VitePress site to Pages / Deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:26 +08:00

103 lines
3.5 KiB
Python

from __future__ import annotations
import pytest
import pytest_asyncio
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
from yuxi.repositories import knowledge_file_repository as repository_module
from yuxi.repositories.knowledge_file_repository import KnowledgeFileRepository
from yuxi.storage.postgres.models_knowledge import KnowledgeBase, KnowledgeFile
pytestmark = [pytest.mark.asyncio, pytest.mark.unit]
class _AsyncSessionContext:
def __init__(self, db):
self.db = db
async def __aenter__(self):
return self.db
async def __aexit__(self, exc_type, *_args):
if exc_type is None:
await self.db.commit()
else:
await self.db.rollback()
return False
@pytest_asyncio.fixture
async def knowledge_session(monkeypatch):
engine = create_async_engine("sqlite+aiosqlite:///:memory:")
async with engine.begin() as conn:
await conn.run_sync(KnowledgeBase.__table__.create)
await conn.run_sync(KnowledgeFile.__table__.create)
session_factory = async_sessionmaker(engine, expire_on_commit=False)
async with session_factory() as session:
monkeypatch.setattr(
repository_module.pg_manager,
"get_async_session_context",
lambda: _AsyncSessionContext(session),
)
yield session
await engine.dispose()
async def test_exists_by_filename_matches_active_file_exactly(knowledge_session):
existing_name = (
"google_drive/shared_drives/engineering/serving-runtime/dsid_e4ff04ebc2a14c1982abc4987753790c__playbook.txt"
)
knowledge_session.add_all(
[
KnowledgeBase(kb_id="kb_1", name="KB 1", description="", kb_type="milvus"),
KnowledgeBase(kb_id="kb_2", name="KB 2", description="", kb_type="milvus"),
KnowledgeFile(
file_id="file_active",
kb_id="kb_1",
filename=existing_name,
status="uploaded",
is_folder=False,
),
KnowledgeFile(
file_id="file_other_kb",
kb_id="kb_2",
filename=existing_name,
status="uploaded",
is_folder=False,
),
KnowledgeFile(
file_id="file_failed",
kb_id="kb_1",
filename="failed.txt",
status="failed",
is_folder=False,
),
KnowledgeFile(
file_id="folder_same_name",
kb_id="kb_1",
filename="folder",
status="done",
is_folder=True,
),
KnowledgeFile(
file_id="legacy_file",
kb_id="kb_1",
filename="legacy.txt",
status="indexed",
is_folder=None,
),
]
)
await knowledge_session.commit()
repo = KnowledgeFileRepository()
assert await repo.exists_by_filename(kb_id="kb_1", filename=existing_name) is True
assert await repo.exists_by_filename(kb_id="kb_1", filename=existing_name.upper()) is False
assert await repo.exists_by_filename(kb_id="kb_1", filename="failed.txt") is False
assert await repo.exists_by_filename(kb_id="kb_1", filename="folder") is False
assert await repo.exists_by_filename(kb_id="kb_1", filename="legacy.txt") is True
assert await repo.exists_by_filename(kb_id="missing", filename=existing_name) is False