mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 16:07:01 +08:00
Fix history search case sensitivity
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
|
||||
from sqlalchemy import create_engine, text
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from app.db import Base
|
||||
from app.db.models.downloadhistory import DownloadHistory
|
||||
from app.db.models.transferhistory import TransferHistory
|
||||
|
||||
|
||||
def _enable_case_sensitive_like(db):
|
||||
"""让 SQLite 在测试中暴露与 PostgreSQL 一致的 LIKE 大小写敏感问题。"""
|
||||
db.execute(text("PRAGMA case_sensitive_like=ON"))
|
||||
|
||||
|
||||
def test_transfer_history_search_is_case_insensitive(tmp_path: Path):
|
||||
"""整理历史标题和路径搜索应忽略大小写。"""
|
||||
engine = create_engine(f"sqlite:///{tmp_path / 'transfer_history.db'}")
|
||||
SessionFactory = sessionmaker(bind=engine)
|
||||
Base.metadata.create_all(bind=engine)
|
||||
|
||||
try:
|
||||
with SessionFactory() as db:
|
||||
_enable_case_sensitive_like(db)
|
||||
db.add_all(
|
||||
[
|
||||
TransferHistory(
|
||||
src="/downloads/Avatar.Source.mkv",
|
||||
dest="/media/Avatar/Avatar.mkv",
|
||||
title="Avatar",
|
||||
status=True,
|
||||
date="2026-06-01 00:00:00",
|
||||
),
|
||||
TransferHistory(
|
||||
src="/downloads/Interstellar.mkv",
|
||||
dest="/media/Interstellar/Interstellar.mkv",
|
||||
title="Interstellar",
|
||||
status=True,
|
||||
date="2026-06-02 00:00:00",
|
||||
),
|
||||
]
|
||||
)
|
||||
db.commit()
|
||||
|
||||
title_result = TransferHistory.list_by_title(db, "avatar")
|
||||
src_result = TransferHistory.list_by_title(db, "avatar.source")
|
||||
dest_result = TransferHistory.list_by_title(db, "%avatar.mkv", wildcard=True)
|
||||
total = TransferHistory.count_by_title(db, "avatar")
|
||||
|
||||
assert [item.title for item in title_result] == ["Avatar"]
|
||||
assert [item.title for item in src_result] == ["Avatar"]
|
||||
assert [item.title for item in dest_result] == ["Avatar"]
|
||||
assert total == 1
|
||||
finally:
|
||||
engine.dispose()
|
||||
|
||||
|
||||
def test_download_history_title_search_is_case_insensitive(tmp_path: Path):
|
||||
"""下载历史标题搜索和计数应忽略大小写。"""
|
||||
|
||||
async def run_case():
|
||||
"""执行异步下载历史查询断言。"""
|
||||
engine = create_async_engine(f"sqlite+aiosqlite:///{tmp_path / 'download_history.db'}")
|
||||
SessionFactory = async_sessionmaker(bind=engine)
|
||||
|
||||
try:
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
await conn.execute(text("PRAGMA case_sensitive_like=ON"))
|
||||
|
||||
async with SessionFactory() as db:
|
||||
db.add_all(
|
||||
[
|
||||
DownloadHistory(
|
||||
path="/downloads/Avatar",
|
||||
type="电影",
|
||||
title="Avatar",
|
||||
date="2026-06-01 00:00:00",
|
||||
),
|
||||
DownloadHistory(
|
||||
path="/downloads/Interstellar",
|
||||
type="电影",
|
||||
title="Interstellar",
|
||||
date="2026-06-02 00:00:00",
|
||||
),
|
||||
]
|
||||
)
|
||||
await db.commit()
|
||||
|
||||
result = await DownloadHistory.async_list_by_title(db, "avatar")
|
||||
total = await DownloadHistory.async_count_by_title(db, "avatar")
|
||||
|
||||
assert [item.title for item in result] == ["Avatar"]
|
||||
assert total == 1
|
||||
finally:
|
||||
await engine.dispose()
|
||||
|
||||
asyncio.run(run_case())
|
||||
Reference in New Issue
Block a user