import { FIXTURE_IDS } from "../../src/features/tech-log/adapters/mock/fixtures.ts"; import { expect, test } from "../support/browser/strict-browser-test.ts"; test("validates, previews, publishes, and unpublishes one Studio working copy", async ({ page, }) => { await page.goto( `/studio/documents/${FIXTURE_IDS.stateNonceReference}/validation`, ); await expect( page.getByText("현재 저장 버전의 검증을 통과했습니다"), ).toBeVisible(); await page.getByRole("link", { name: "Public Preview 만들기" }).click(); await page .getByRole("button", { name: "Public Preview 만들기" }) .click(); await expect( page.getByText("현재 저장 버전의 Public Preview입니다."), ).toBeVisible(); await page.getByRole("link", { name: "게시 준비로 이동" }).click(); await page.getByRole("button", { name: "게시" }).click(); await expect(page).toHaveURL( /\/studio\/publications\/[0-9a-f-]+\/preview$/, ); await expect( page.getByRole("heading", { level: 1, name: "Authorization Code Flow에서 state와 nonce의 경계", }), ).toBeVisible(); await page.getByRole("link", { name: "게시 기록으로 돌아가기" }).click(); await page .getByRole("button", { name: /Authorization Code Flow에서 state와 nonce의 경계 게시 취소/, }) .click(); await expect( page.getByRole("dialog", { name: "게시를 취소할까요?" }), ).toContainText("작업본과 이전 Snapshot은 보존됩니다."); await page.getByRole("button", { name: "게시 취소 확인" }).click(); await expect(page.getByRole("status")).toContainText( "게시를 취소했습니다.", ); }); test("renders an immutable historical snapshot and Studio-local missing event", async ({ page, }) => { await page.goto( `/studio/publications/${FIXTURE_IDS.fetchPublishedEvent}/preview`, ); await expect( page.getByText(/반환된 20건 뒤에서 전체 컬렉션이 로드되는 과정/), ).toBeVisible(); await expect( page.getByText("게시 후 본문 측정값을 보완한 저장본입니다."), ).toHaveCount(0); await page.goto( "/studio/publications/99999999-9999-4999-8999-999999999999/preview", ); await expect( page.getByRole("heading", { name: "게시 기록을 찾을 수 없습니다" }), ).toBeVisible(); await expect( page.getByRole("navigation", { name: "Studio 주 탐색" }), ).toBeVisible(); });