扫码登录预览标记已扫码

This commit is contained in:
汤学会 2026-07-06 11:04:02 +08:00
parent df2aad8c7d
commit 04f3f96909
2 changed files with 47 additions and 0 deletions

View File

@ -149,6 +149,10 @@ async def preview_erp_login_session(
f"/api/auth/qr-login/sessions/{session_id}/preview", f"/api/auth/qr-login/sessions/{session_id}/preview",
params={"ticket": ticket}, params={"ticket": ticket},
) )
await _post_erp_json(
f"/api/auth/qr-login/sessions/{session_id}/scanned",
{"ticket": ticket},
)
return ErpLoginPreviewResponse(**data) return ErpLoginPreviewResponse(**data)

View File

@ -158,6 +158,49 @@ def test_preview_requires_session_id(monkeypatch):
assert response.json()["detail"] == "缺少ERP扫码登录会话ID" assert response.json()["detail"] == "缺少ERP扫码登录会话ID"
def test_preview_marks_erp_session_scanned(monkeypatch):
from app.routers import erp_login
original_async_client = httpx.AsyncClient
calls = []
def handler(request: httpx.Request) -> httpx.Response:
calls.append((request.method, request.url.path, request.content))
if request.method == "GET":
assert request.url.path == "/api/auth/qr-login/sessions/123/preview"
assert request.url.params["ticket"] == "ticket-abc"
return httpx.Response(
200,
json={
"session_id": 123,
"system_name": "嘉恒智能五金 ERP",
"started_at": "2026-07-05T08:00:00",
"expires_at": "2026-07-05T08:02:00",
"request_ip_hint": "127.0.0.1",
"user_agent_hint": "Chrome",
},
)
if request.method == "POST":
assert request.url.path == "/api/auth/qr-login/sessions/123/scanned"
assert json.loads(request.content.decode("utf-8")) == {"ticket": "ticket-abc"}
return httpx.Response(200, json={"status": "SCANNED"})
raise AssertionError(f"Unexpected request: {request.method} {request.url.path}")
transport = httpx.MockTransport(handler)
def fake_async_client(**kwargs):
_ = kwargs
return original_async_client(transport=transport)
monkeypatch.setattr(erp_login.httpx, "AsyncClient", fake_async_client)
client = _client(monkeypatch)
response = client.get("/api/erp-login/sessions/ticket-abc?session_id=123")
assert response.status_code == 200
assert [call[0] for call in calls] == ["GET", "POST"]
def test_confirm_gets_phone_signs_erp_request_with_base_path_and_hides_auth_session(monkeypatch): def test_confirm_gets_phone_signs_erp_request_with_base_path_and_hides_auth_session(monkeypatch):
from app.routers import erp_login from app.routers import erp_login