import { expect, test } from "@playwright/test"; import { type Consent, installDevApiMock, makeClient, seedAuth, } from "./helpers/devfront-fixtures"; import { installDevFrontStaticRoutes } from "./helpers/static-devfront"; test.describe("DevFront RP claim cache", () => { test.beforeEach(async ({ page }) => { await installDevFrontStaticRoutes(page); await seedAuth(page, "super_admin"); }); test("keeps saved RP claim value visible after saving", async ({ page }) => { const state = { clients: [ makeClient("client-claims", { name: "Claims app", metadata: { id_token_claims: [ { namespace: "rp_claims", key: "old_claim", value: "A", valueType: "text", readPermission: "admin_only", writePermission: "admin_only", }, ], }, }), ], consents: [] as Consent[], auditLogsByCursor: undefined, mockRole: "super_admin", }; await installDevApiMock(page, state); await page.goto("http://devfront.test/clients/client-claims/settings"); const claimKeyInput = page .getByPlaceholder(/e\.g\. locale|예: locale/i) .first(); await expect(claimKeyInput).toHaveValue("old_claim"); await claimKeyInput.fill("new_claim"); await page.getByRole("button", { name: /^저장$|^Save$/i }).click(); await expect .poll( () => ( state.clients[0]?.metadata?.id_token_claims as | Array<{ key?: string }> | undefined )?.[0]?.key, ) .toBe("new_claim"); await expect(claimKeyInput).toHaveValue("new_claim"); }); });