From fd1ec6f75dfb40f8854b7166e3b67cfa531ae96e Mon Sep 17 00:00:00 2001 From: ThearchyHelios Date: Fri, 16 Oct 2026 17:15:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=EF=BC=9A=E5=BC=80=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=97=B6=E8=87=AA=E5=8A=A8=E6=8C=89=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=E5=87=BA=E5=85=B7=E6=8C=89=E6=8F=90=E9=97=AE=E4=BA=BA=E7=9A=84?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为什么:自动出具在后台跑,没有请求里的身份,要按这次运行的发起人取(ledger/issue._starter)。补一条用例:使用者没有应用授权时不自动出具,应用固定了这一版、授给他使用之后才出具,正式运行记在他名下、origin 标自动。 --- backend/tests/test_ledger_issue.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/backend/tests/test_ledger_issue.py b/backend/tests/test_ledger_issue.py index 9451e27c..b0b7a4ff 100644 --- a/backend/tests/test_ledger_issue.py +++ b/backend/tests/test_ledger_issue.py @@ -304,3 +304,32 @@ async def test_ledger_settings_have_defaults_and_refuse_bad_values(client): "match_timeout_s": 3}}}) assert ok.status_code == 200 and ok.json()["ledger"] == {"auto_issue": False, "issue_daily_limit": 5, "match_timeout_s": 3} + + +async def test_auto_issue_goes_by_the_askers_permissions_when_login_is_on(monkeypatch): + """开登录时自动出具按这次运行的发起人判(拍板 L5):使用者没有应用授权就不自动出具,有了才出具;账号不在了的按使用者算。""" + from app.db.models import User + from app.db.models_apps import App, AppGrant, AppVersion + + monkeypatch.setattr("app.auth.current_mode", lambda: "local") + await set_ledger(auto_issue=False) + wf = await S.publish() + row = await equivalent_run(monkeypatch) + await set_ledger(auto_issue=True) + async with SessionLocal() as session: + session.add(User(username=f"erin_{row.id[:6]}", role="user", password_hash="x")) + (await session.get(Run, row.id)).started_by = f"erin_{row.id[:6]}" + await session.commit() + assert await ledger_issue.auto_issue(row.id) is None and await issued(row.id) == [] + + async with SessionLocal() as session: + board = App(name="周销售看板", published_version=1, created_by="bob") + session.add(board) + await session.flush() + session.add(AppVersion(app_id=board.id, version=1, spec={}, spec_hash="x", + pins=[{"alias": "week", "workflow_id": wf, "version": 1}])) + session.add(AppGrant(app_id=board.id, principal_kind="user", principal=f"erin_{row.id[:6]}", role="use")) + await session.commit() + launched = await ledger_issue.auto_issue(row.id) + [formal] = await settle(row.id) + assert launched == formal.id and formal.started_by == f"erin_{row.id[:6]}" and formal.origin["auto"] is True