diff --git a/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx b/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx index 2aa94e53..726bfe06 100644 --- a/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx +++ b/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx @@ -10,7 +10,7 @@ const navigateMock = vi.fn(); const fetchClientMock = vi.fn(); const updateClientMock = vi.fn(); const fetchClientRelationsMock = vi.fn(); -const fetchMyTenantsMock = vi.fn(); +const fetchTenantsMock = vi.fn(); const fetchMeMock = vi.fn(); let authState = { @@ -45,7 +45,7 @@ vi.mock("../../lib/devApi", () => ({ fetchClient: (...args: unknown[]) => fetchClientMock(...args), fetchClientRelations: (...args: unknown[]) => fetchClientRelationsMock(...args), - fetchMyTenants: (...args: unknown[]) => fetchMyTenantsMock(...args), + fetchTenants: (...args: unknown[]) => fetchTenantsMock(...args), refreshHeadlessJwksCache: vi.fn(), revokeHeadlessJwksCache: vi.fn(), updateClient: (...args: unknown[]) => updateClientMock(...args), @@ -217,7 +217,12 @@ describe("ClientGeneralPage RP claims", () => { fetchClientMock.mockResolvedValue(makeClientDetail("old_claim")); updateClientMock.mockResolvedValue(makeClientDetail("new_claim")); fetchClientRelationsMock.mockResolvedValue({ items: [] }); - fetchMyTenantsMock.mockResolvedValue([]); + fetchTenantsMock.mockResolvedValue({ + items: [], + limit: 1000, + offset: 0, + total: 0, + }); fetchMeMock.mockResolvedValue({ id: "admin-user", role: "super_admin", diff --git a/devfront/tests/devfront-client-tenant-access.spec.ts b/devfront/tests/devfront-client-tenant-access.spec.ts index 724ac4fb..2c0e2583 100644 --- a/devfront/tests/devfront-client-tenant-access.spec.ts +++ b/devfront/tests/devfront-client-tenant-access.spec.ts @@ -65,6 +65,15 @@ test.describe("DevFront client tenant access settings", () => { ], consents: [] as Consent[], auditLogsByCursor: undefined, + myTenants: [ + { + id: existingTenantId, + name: "Alpha Tenant", + slug: "alpha", + description: "Existing allowed tenant", + type: "organization", + }, + ], tenants: [ { id: existingTenantId, @@ -99,10 +108,27 @@ test.describe("DevFront client tenant access settings", () => { ) .toBe(existingTenantId); - await page - .getByPlaceholder(/테넌트 이름 또는 슬러그로 검색|tenant name or slug/i) - .fill("beta"); - await page.getByRole("button", { name: /Beta Tenant/i }).click(); + await page.getByRole("button", { name: /테넌트 선택기 열기/i }).click(); + await page.evaluate( + (selection) => { + window.postMessage( + { + type: "orgfront:picker:confirm", + payload: { + selections: [ + { + type: "tenant", + id: selection.id, + name: selection.name, + }, + ], + }, + }, + "*", + ); + }, + { id: addedTenantId, name: "Beta Tenant" }, + ); await expect( page.getByTestId(`allowed-tenant-${addedTenantId}`), ).toContainText(addedTenantId); diff --git a/devfront/tests/helpers/devfront-fixtures.ts b/devfront/tests/helpers/devfront-fixtures.ts index 2ce66f3c..8feab0f2 100644 --- a/devfront/tests/helpers/devfront-fixtures.ts +++ b/devfront/tests/helpers/devfront-fixtures.ts @@ -132,6 +132,7 @@ export type DevApiMockState = { relations?: Record; users?: DevAssignableUser[]; tenants?: DevTenantSummary[]; + myTenants?: DevTenantSummary[]; auditLogsByCursor?: Record< string, { items: AuditLog[]; next_cursor?: string } @@ -437,6 +438,33 @@ export async function installDevApiMock(page: Page, state: DevApiMockState) { }); }); + await page.route("**/api/v1/admin/tenants**", async (route) => { + const request = route.request(); + const url = new URL(request.url()); + const { searchParams } = url; + const tenants = state.tenants ?? [ + { id: "tenant-a", name: "Tenant A", slug: "tenant-a" }, + ]; + + return json(route, { + items: tenants.map((tenant) => ({ + id: tenant.id, + name: tenant.name, + slug: tenant.slug, + description: tenant.description ?? "", + type: tenant.type ?? "organization", + parentId: null, + status: "active", + memberCount: 0, + createdAt: "2026-03-03T00:00:00.000Z", + updatedAt: "2026-03-03T00:00:00.000Z", + })), + limit: Number.parseInt(searchParams.get("limit") || "1000", 10), + offset: Number.parseInt(searchParams.get("offset") || "0", 10), + total: tenants.length, + }); + }); + await page.route("**/api/v1/dev/**", async (route) => { const request = route.request(); const url = new URL(request.url()); @@ -534,9 +562,10 @@ export async function installDevApiMock(page: Page, state: DevApiMockState) { if (pathname === "/api/v1/dev/my-tenants" && method === "GET") { return json( route, - state.tenants ?? [ - { id: "tenant-a", name: "Tenant A", slug: "tenant-a" }, - ], + state.myTenants ?? + state.tenants ?? [ + { id: "tenant-a", name: "Tenant A", slug: "tenant-a" }, + ], ); }