feat: overhaul UI styling, improve templates, enhance services and tests
This commit is contained in:
+49
-22
@@ -29,13 +29,17 @@ def sample_paper_with_user_data(db_session, sample_papers_range):
|
||||
paper = sample_papers_range[0]
|
||||
now = datetime.now(timezone.utc)
|
||||
db_session.add(UserBookmark(paper_id=paper.id, created_at=now))
|
||||
db_session.add(UserReadingStatus(paper_id=paper.id, status="read_summary", updated_at=now))
|
||||
db_session.add(UserNote(
|
||||
paper_id=paper.id,
|
||||
content="My notes on this paper",
|
||||
created_at=now,
|
||||
updated_at=now,
|
||||
))
|
||||
db_session.add(
|
||||
UserReadingStatus(paper_id=paper.id, status="read_summary", updated_at=now)
|
||||
)
|
||||
db_session.add(
|
||||
UserNote(
|
||||
paper_id=paper.id,
|
||||
content="My notes on this paper",
|
||||
created_at=now,
|
||||
updated_at=now,
|
||||
)
|
||||
)
|
||||
db_session.commit()
|
||||
return paper
|
||||
|
||||
@@ -64,6 +68,7 @@ class TestCleanupTmp:
|
||||
|
||||
monkeypatch.setattr("app.services.cleaner.TMP_DIR", tmp_dir)
|
||||
from app.services.cleaner import cleanup_tmp
|
||||
|
||||
result = cleanup_tmp()
|
||||
|
||||
assert result["scanned"] == 1
|
||||
@@ -81,6 +86,7 @@ class TestCleanupTmp:
|
||||
|
||||
monkeypatch.setattr("app.services.cleaner.TMP_DIR", tmp_dir)
|
||||
from app.services.cleaner import cleanup_tmp
|
||||
|
||||
result = cleanup_tmp()
|
||||
|
||||
assert result["scanned"] == 1
|
||||
@@ -91,6 +97,7 @@ class TestCleanupTmp:
|
||||
"""data/tmp/ 不存在时安全返回。"""
|
||||
monkeypatch.setattr("app.services.cleaner.TMP_DIR", tmp_path / "nonexistent")
|
||||
from app.services.cleaner import cleanup_tmp
|
||||
|
||||
result = cleanup_tmp()
|
||||
assert result["scanned"] == 0
|
||||
assert result["removed"] == 0
|
||||
@@ -110,6 +117,7 @@ class TestCleanupTmp:
|
||||
|
||||
monkeypatch.setattr("app.services.cleaner.TMP_DIR", tmp_dir)
|
||||
from app.services.cleaner import cleanup_tmp
|
||||
|
||||
result = cleanup_tmp()
|
||||
|
||||
assert result["scanned"] == 2
|
||||
@@ -178,14 +186,18 @@ class TestDeletePapersByDateRange:
|
||||
date(2024, 1, 14),
|
||||
)
|
||||
|
||||
logs = db_session.execute(
|
||||
select(CrawlLog).where(CrawlLog.task == "delete")
|
||||
).scalars().all()
|
||||
logs = (
|
||||
db_session.execute(select(CrawlLog).where(CrawlLog.task == "delete"))
|
||||
.scalars()
|
||||
.all()
|
||||
)
|
||||
assert len(logs) == 1
|
||||
assert logs[0].status == "success"
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_cascade_user_data(self, db_session, sample_paper_with_user_data):
|
||||
async def test_delete_cascade_user_data(
|
||||
self, db_session, sample_paper_with_user_data
|
||||
):
|
||||
"""删除论文时应 cascade 删除关联的用户数据。"""
|
||||
from app.services.cleaner import delete_papers_by_date_range
|
||||
|
||||
@@ -200,15 +212,24 @@ class TestDeletePapersByDateRange:
|
||||
assert result["deleted"] == 1
|
||||
|
||||
# 确认用户数据被 cascade 删除
|
||||
assert db_session.execute(
|
||||
select(UserBookmark).where(UserBookmark.paper_id == paper.id)
|
||||
).scalar_one_or_none() is None
|
||||
assert db_session.execute(
|
||||
select(UserReadingStatus).where(UserReadingStatus.paper_id == paper.id)
|
||||
).scalar_one_or_none() is None
|
||||
assert db_session.execute(
|
||||
select(UserNote).where(UserNote.paper_id == paper.id)
|
||||
).scalar_one_or_none() is None
|
||||
assert (
|
||||
db_session.execute(
|
||||
select(UserBookmark).where(UserBookmark.paper_id == paper.id)
|
||||
).scalar_one_or_none()
|
||||
is None
|
||||
)
|
||||
assert (
|
||||
db_session.execute(
|
||||
select(UserReadingStatus).where(UserReadingStatus.paper_id == paper.id)
|
||||
).scalar_one_or_none()
|
||||
is None
|
||||
)
|
||||
assert (
|
||||
db_session.execute(
|
||||
select(UserNote).where(UserNote.paper_id == paper.id)
|
||||
).scalar_one_or_none()
|
||||
is None
|
||||
)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_removes_fts(self, db_session, sample_papers_range):
|
||||
@@ -229,7 +250,9 @@ class TestDeletePapersByDateRange:
|
||||
assert rows == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_removes_local_files(self, db_session, sample_papers_range, tmp_path, monkeypatch):
|
||||
async def test_delete_removes_local_files(
|
||||
self, db_session, sample_papers_range, tmp_path, monkeypatch
|
||||
):
|
||||
"""删除论文时应删除本地文件目录。"""
|
||||
from app.services.cleaner import delete_papers_by_date_range
|
||||
|
||||
@@ -263,13 +286,17 @@ class TestDeletePapersByDateRange:
|
||||
assert result["status"] == "success"
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cleaner_works_without_chroma(self, db_session, sample_papers_with_summary, monkeypatch):
|
||||
async def test_cleaner_works_without_chroma(
|
||||
self, db_session, sample_papers_with_summary, monkeypatch
|
||||
):
|
||||
"""CHROMA 关闭时删除论文正常工作。"""
|
||||
monkeypatch.setattr(settings, "CHROMA_ENABLED", False)
|
||||
import app.services.embedder as emb
|
||||
|
||||
emb._chroma.reset()
|
||||
|
||||
from app.services.cleaner import delete_papers_by_date_range
|
||||
|
||||
result = await delete_papers_by_date_range(
|
||||
db_session,
|
||||
date(2024, 1, 10),
|
||||
|
||||
Reference in New Issue
Block a user