fix: verify onboarding cache ownership end to end

This commit is contained in:
Jesse_Chen
2026-07-19 23:54:27 +08:00
parent e13d595d6b
commit 346ec02fd2
9 changed files with 802 additions and 196 deletions
+26 -5
View File
@@ -1,10 +1,14 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
PAGE = ROOT / "frontend" / "src" / "app" / "page.tsx"
AGENT = ROOT / "frontend" / "src" / "mastra" / "index.ts"
ONBOARDING_ROUTE = ROOT / "frontend" / "src" / "app" / "api" / "onboarding" / "route.ts"
ONBOARDING_CLIENT = ROOT / "frontend" / "src" / "lib" / "onboarding-client.ts"
ONBOARDING_POST = ROOT / "frontend" / "src" / "lib" / "onboarding-post.ts"
ONBOARDING_CACHE_POLICY = (
ROOT / "frontend" / "src" / "lib" / "onboarding-cache-policy.ts"
)
CONSULT_ROUTE = ROOT / "frontend" / "src" / "app" / "api" / "consult" / "route.ts"
MODELS_ROUTE = ROOT / "frontend" / "src" / "app" / "api" / "models" / "route.ts"
MODEL_SELECTION = ROOT / "frontend" / "src" / "lib" / "consultation-model-selection.ts"
@@ -24,6 +28,9 @@ def test_onboarding_and_agent_suggestion_contract() -> None:
page = PAGE.read_text(encoding="utf-8")
agent = AGENT.read_text(encoding="utf-8")
route = ONBOARDING_ROUTE.read_text(encoding="utf-8")
onboarding_client = ONBOARDING_CLIENT.read_text(encoding="utf-8")
onboarding_post = ONBOARDING_POST.read_text(encoding="utf-8")
cache_policy = ONBOARDING_CACHE_POLICY.read_text(encoding="utf-8")
consult_route = CONSULT_ROUTE.read_text(encoding="utf-8")
migration = ONBOARDING_MIGRATION.read_text(encoding="utf-8")
@@ -39,7 +46,7 @@ def test_onboarding_and_agent_suggestion_contract() -> None:
assert "<BirthTimeIntakeFields value={value}" in page
assert "<BirthLocationFields value={profileDraft}" in page
assert "Enter 确认称呼" in page
assert 'fetch("/api/onboarding"' in page
assert 'fetch("/api/onboarding"' in onboarding_client
assert "onboarding?.suggestions" in page
assert "parseAgentReply(answer, theme)" in page
assert "suggestions: reply.suggestions" in page
@@ -56,9 +63,23 @@ def test_onboarding_and_agent_suggestion_contract() -> None:
assert "function currentTimeContext(now = new Date())" in consult_route
assert "currentTimeContext(requestTime)," in consult_route
assert "中国标准时间(UTC+8" in consult_route
assert 'profile.onboarding_version === ONBOARDING_VERSION' in route
assert "getOnboardingAgent(onboardingModel).generate" in route
assert 'source: "cache"' in route
assert "export const POST = createOnboardingPost" in route
assert 'claim.is("onboarding_version", null)' in route
assert '.eq("onboarding_version", command.expectedVersion)' in route
assert 'claim.is("onboarding_generated_at", null)' in route
assert '.eq("onboarding_generated_at", command.expectedGeneratedAt)' in route
assert (
'.eq("onboarding_version", command.expectedPendingVersion)\n'
' .select("id")\n'
" .maybeSingle();"
) in route
assert "createOnboardingCacheIdentity" in onboarding_post
assert "expectedGeneratedAt: profile.onboarding_generated_at" in onboarding_post
assert "completed.data" in onboarding_post
assert 'source: "cache"' in onboarding_post
assert 'source: "pending"' in onboarding_post
assert 'createHash("sha256")' in cache_policy
assert "getOnboardingAgent(model).generate" in route
assert "onboarding_payload" in migration
assert "to service_role" in migration
assert "to authenticated" not in migration