diff --git a/backend/app/api/shares.py b/backend/app/api/shares.py index 4bcc1b94..27006a5a 100644 --- a/backend/app/api/shares.py +++ b/backend/app/api/shares.py @@ -216,7 +216,9 @@ async def list_shares(app_id: str, session: AsyncSession = Depends(get_session), @_manage.delete("/{app_id}/shares/{share_id}") async def revoke_share(app_id: str, share_id: str, session: AsyncSession = Depends(get_session), x_actor: str | None = Header(default=None)) -> dict[str, Any]: - """撤销:之后打开回 410「链接已撤销」。撤销过的再撤销照旧交回它(不重复记审计)。管理员关了开关也能撤销。""" + """撤销:之后打开回 410「链接已撤销」。撤销过的再撤销照旧交回它(不重复记审计)。管理员关了开关也能撤销。交回的形状和 + 建、列的同一个(page_title 是页面标题,取法同列表:应用当前的版本)。""" + from app.api.apps import _previous from app.apps.audit import record app, _ = await _managed(session, app_id, x_actor) @@ -228,7 +230,8 @@ async def revoke_share(app_id: str, share_id: str, session: AsyncSession = Depen await record(session, action="app.share_revoke", subject_kind="view_share", subject_id=row.id, actor=actor_of(x_actor), data={"app_id": app.id, "page_id": row.page_id, "prefix": row.prefix}) await session.commit() - return share_out(row) + version = await _previous(session, app) + return share_out(row, _titles(version.spec if version is not None else None)) # -------------------------------------------------------------------------- diff --git a/backend/tests/test_shares.py b/backend/tests/test_shares.py index 28d110d0..49738185 100644 --- a/backend/tests/test_shares.py +++ b/backend/tests/test_shares.py @@ -326,6 +326,10 @@ async def test_revoked_and_expired_links_say_so_with_410(world): # noqa: F811 admin = await auth_env.login("root") r = await admin.delete(f"/api/apps/{app_id}/shares/{gone['id']}") assert r.status_code == 200 and r.json()["state"] == "revoked" and r.json()["revoked_by"] == "root" + # 撤销交回的那一条和建、列的同一个形状:page_title 是页面标题,不是页面 id(下一轮验收:以前撤销回的是「home」) + assert gone["page_title"] == "首页" and r.json()["page_title"] == gone["page_title"], r.json()["page_title"] + again = await admin.delete(f"/api/apps/{app_id}/shares/{gone['id']}") + assert again.json()["page_title"] == "首页", "撤销过的再撤销照旧交回它,标题一样" async with SessionLocal() as s: (await s.get(ViewShare, old["id"])).expires_at = utcnow() - timedelta(minutes=5) await s.commit()