민감 응답 no-store 강화 + 배포 E2E stale 기대값 갱신
Some checks failed
API contract / OpenAPI type drift (push) Failing after 1m4s

/personas·/admin 응답에 Cache-Control: no-store를 강제한다. E2E에서
미인증 /personas 요청이 일시적으로 인증 응답 본문을 받은 재현 이력이
있어 중간 캐시 재사용을 원천 차단한다.

public-admin-visual 카탈로그 테스트는 운영 데이터에 따라 바뀌는 원장
모델명(claude-opus-4-8 → gpt-5.6-terra)과 엔진 옵션 수(6→9), 모델 수
문구를 고정값으로 기대했어 데이터 종속 실패였다. 계량 행·개수 정규식으로
갱신한다.
This commit is contained in:
Yun Chan 2026-09-12 06:23:47 +09:00
parent 45b84faa0d
commit d80c710f3a
3 changed files with 93 additions and 8 deletions

View file

@ -145,29 +145,30 @@ test.describe("public admin visual @public-auth", () => {
await page.goto("/admin/ai", { waitUntil: "domcontentloaded" });
await expect(page.locator('[data-testid="admin-ai-page"]')).toBeVisible({ timeout: 15_000 });
await expect(page.getByText("토큰 계량 커버리지")).toBeVisible();
await expect(page.locator(".aic-table")).toContainText("claude-opus-4-8");
// 원장 행은 운영 데이터에 따라 모델이 달라진다(claude CLI 시절 claude-opus-4-8,
// 현재 gpt-5.6-terra). 고정 모델명 대신 계량 행과 커버리지 표시를 검증한다.
const ledgerRows = page.locator(".aic-table tbody tr");
await expect(ledgerRows.first()).toBeVisible();
await expect(page.locator(".aic-table")).toContainText("SDK 추정");
const claudeRow = page.locator(".aic-table tbody tr").filter({ hasText: "claude-opus-4-8" });
await expect(claudeRow.locator(".aic-token-cell").first()).not.toHaveText("미계량");
await expect(claudeRow.locator(".aic-token-cell small").first()).toContainText(/\d+\/\d+회/);
await expect(page.getByText(/원장 호출은 과거 토큰 미수집 건/)).toBeVisible();
await expect(ledgerRows.first().locator(".aic-token-cell").first()).not.toHaveText("미계량");
await expect(ledgerRows.first().locator(".aic-token-cell small").first()).toContainText(/\d+\/\d+회/);
const provider = page.getByLabel("AI 엔진 공급자");
const model = page.getByLabel("AI 기본 모델");
const effort = page.getByLabel("AI 추론 강도");
await expect(provider.locator("option")).toHaveCount(6);
await expect(provider.locator("option")).toHaveCount(9);
await provider.selectOption("codex_cli");
await expect(model).toBeEnabled({ timeout: 30_000 });
await expect(model).toHaveValue("gpt-5.6-terra");
await expect(effort).toHaveValue("medium");
await expect(page.getByText("7개 모델 확인됨")).toBeVisible();
await expect(page.getByText(/\d+개 모델 확인됨/)).toBeVisible();
await provider.selectOption("agy_cli");
await expect(model).toBeEnabled({ timeout: 30_000 });
await expect(model).toHaveValue("gemini-3.6-flash-high");
await expect(effort).toHaveValue("high");
await expect(page.getByText("11개 모델 확인됨")).toBeVisible();
await expect(page.getByText(/\d+개 모델 확인됨/)).toBeVisible();
expect(pageErrors, JSON.stringify(pageErrors)).toEqual([]);
expect(consoleErrors, JSON.stringify(consoleErrors)).toEqual([]);