forked from baron/baron-sso
orgfront picker 기반 테넌트 선택 테스트 추가
This commit is contained in:
@@ -10,7 +10,7 @@ const navigateMock = vi.fn();
|
|||||||
const fetchClientMock = vi.fn();
|
const fetchClientMock = vi.fn();
|
||||||
const updateClientMock = vi.fn();
|
const updateClientMock = vi.fn();
|
||||||
const fetchClientRelationsMock = vi.fn();
|
const fetchClientRelationsMock = vi.fn();
|
||||||
const fetchMyTenantsMock = vi.fn();
|
const fetchTenantsMock = vi.fn();
|
||||||
const fetchMeMock = vi.fn();
|
const fetchMeMock = vi.fn();
|
||||||
|
|
||||||
let authState = {
|
let authState = {
|
||||||
@@ -45,7 +45,7 @@ vi.mock("../../lib/devApi", () => ({
|
|||||||
fetchClient: (...args: unknown[]) => fetchClientMock(...args),
|
fetchClient: (...args: unknown[]) => fetchClientMock(...args),
|
||||||
fetchClientRelations: (...args: unknown[]) =>
|
fetchClientRelations: (...args: unknown[]) =>
|
||||||
fetchClientRelationsMock(...args),
|
fetchClientRelationsMock(...args),
|
||||||
fetchMyTenants: (...args: unknown[]) => fetchMyTenantsMock(...args),
|
fetchTenants: (...args: unknown[]) => fetchTenantsMock(...args),
|
||||||
refreshHeadlessJwksCache: vi.fn(),
|
refreshHeadlessJwksCache: vi.fn(),
|
||||||
revokeHeadlessJwksCache: vi.fn(),
|
revokeHeadlessJwksCache: vi.fn(),
|
||||||
updateClient: (...args: unknown[]) => updateClientMock(...args),
|
updateClient: (...args: unknown[]) => updateClientMock(...args),
|
||||||
@@ -217,7 +217,12 @@ describe("ClientGeneralPage RP claims", () => {
|
|||||||
fetchClientMock.mockResolvedValue(makeClientDetail("old_claim"));
|
fetchClientMock.mockResolvedValue(makeClientDetail("old_claim"));
|
||||||
updateClientMock.mockResolvedValue(makeClientDetail("new_claim"));
|
updateClientMock.mockResolvedValue(makeClientDetail("new_claim"));
|
||||||
fetchClientRelationsMock.mockResolvedValue({ items: [] });
|
fetchClientRelationsMock.mockResolvedValue({ items: [] });
|
||||||
fetchMyTenantsMock.mockResolvedValue([]);
|
fetchTenantsMock.mockResolvedValue({
|
||||||
|
items: [],
|
||||||
|
limit: 1000,
|
||||||
|
offset: 0,
|
||||||
|
total: 0,
|
||||||
|
});
|
||||||
fetchMeMock.mockResolvedValue({
|
fetchMeMock.mockResolvedValue({
|
||||||
id: "admin-user",
|
id: "admin-user",
|
||||||
role: "super_admin",
|
role: "super_admin",
|
||||||
|
|||||||
@@ -65,6 +65,15 @@ test.describe("DevFront client tenant access settings", () => {
|
|||||||
],
|
],
|
||||||
consents: [] as Consent[],
|
consents: [] as Consent[],
|
||||||
auditLogsByCursor: undefined,
|
auditLogsByCursor: undefined,
|
||||||
|
myTenants: [
|
||||||
|
{
|
||||||
|
id: existingTenantId,
|
||||||
|
name: "Alpha Tenant",
|
||||||
|
slug: "alpha",
|
||||||
|
description: "Existing allowed tenant",
|
||||||
|
type: "organization",
|
||||||
|
},
|
||||||
|
],
|
||||||
tenants: [
|
tenants: [
|
||||||
{
|
{
|
||||||
id: existingTenantId,
|
id: existingTenantId,
|
||||||
@@ -99,10 +108,27 @@ test.describe("DevFront client tenant access settings", () => {
|
|||||||
)
|
)
|
||||||
.toBe(existingTenantId);
|
.toBe(existingTenantId);
|
||||||
|
|
||||||
await page
|
await page.getByRole("button", { name: /테넌트 선택기 열기/i }).click();
|
||||||
.getByPlaceholder(/테넌트 이름 또는 슬러그로 검색|tenant name or slug/i)
|
await page.evaluate(
|
||||||
.fill("beta");
|
(selection) => {
|
||||||
await page.getByRole("button", { name: /Beta Tenant/i }).click();
|
window.postMessage(
|
||||||
|
{
|
||||||
|
type: "orgfront:picker:confirm",
|
||||||
|
payload: {
|
||||||
|
selections: [
|
||||||
|
{
|
||||||
|
type: "tenant",
|
||||||
|
id: selection.id,
|
||||||
|
name: selection.name,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"*",
|
||||||
|
);
|
||||||
|
},
|
||||||
|
{ id: addedTenantId, name: "Beta Tenant" },
|
||||||
|
);
|
||||||
await expect(
|
await expect(
|
||||||
page.getByTestId(`allowed-tenant-${addedTenantId}`),
|
page.getByTestId(`allowed-tenant-${addedTenantId}`),
|
||||||
).toContainText(addedTenantId);
|
).toContainText(addedTenantId);
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ export type DevApiMockState = {
|
|||||||
relations?: Record<string, ClientRelation[]>;
|
relations?: Record<string, ClientRelation[]>;
|
||||||
users?: DevAssignableUser[];
|
users?: DevAssignableUser[];
|
||||||
tenants?: DevTenantSummary[];
|
tenants?: DevTenantSummary[];
|
||||||
|
myTenants?: DevTenantSummary[];
|
||||||
auditLogsByCursor?: Record<
|
auditLogsByCursor?: Record<
|
||||||
string,
|
string,
|
||||||
{ items: AuditLog[]; next_cursor?: 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) => {
|
await page.route("**/api/v1/dev/**", async (route) => {
|
||||||
const request = route.request();
|
const request = route.request();
|
||||||
const url = new URL(request.url());
|
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") {
|
if (pathname === "/api/v1/dev/my-tenants" && method === "GET") {
|
||||||
return json(
|
return json(
|
||||||
route,
|
route,
|
||||||
state.tenants ?? [
|
state.myTenants ??
|
||||||
{ id: "tenant-a", name: "Tenant A", slug: "tenant-a" },
|
state.tenants ?? [
|
||||||
],
|
{ id: "tenant-a", name: "Tenant A", slug: "tenant-a" },
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user