forked from baron/baron-sso
개발자 권한 신청 및 관리 기능 E2E 테스트 추가
This commit is contained in:
@@ -53,6 +53,25 @@ export type Consent = {
|
||||
tenantName: string;
|
||||
};
|
||||
|
||||
export type DeveloperRequestStatus = "pending" | "approved" | "rejected";
|
||||
|
||||
export type DeveloperRequest = {
|
||||
id: string;
|
||||
userId: string;
|
||||
userName: string;
|
||||
name?: string; // 추가
|
||||
userEmail: string;
|
||||
organization: string;
|
||||
reason: string;
|
||||
status: DeveloperRequestStatus;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
approvedAt?: string;
|
||||
rejectedAt?: string;
|
||||
comment?: string;
|
||||
adminNotes?: string; // 추가
|
||||
};
|
||||
|
||||
export type ClientRelation = {
|
||||
relation: string;
|
||||
subject: string;
|
||||
@@ -84,6 +103,7 @@ export type AuditLog = {
|
||||
export type DevApiMockState = {
|
||||
clients: Client[];
|
||||
consents: Consent[];
|
||||
developerRequests?: DeveloperRequest[];
|
||||
relations?: Record<string, ClientRelation[]>;
|
||||
users?: DevAssignableUser[];
|
||||
auditLogsByCursor?: Record<
|
||||
@@ -241,6 +261,79 @@ export async function installDevApiMock(page: Page, state: DevApiMockState) {
|
||||
const { pathname, searchParams } = url;
|
||||
const method = request.method();
|
||||
|
||||
if (pathname === "/api/v1/dev/requests" && method === "GET") {
|
||||
return json(route, { items: state.developerRequests ?? [] });
|
||||
}
|
||||
|
||||
if (pathname === "/api/v1/dev/requests" && method === "POST") {
|
||||
const payload = (request.postDataJSON() as {
|
||||
organization?: string;
|
||||
reason?: string;
|
||||
}) || {};
|
||||
const created: DeveloperRequest = {
|
||||
id: `req-${Date.now()}`,
|
||||
userId: "playwright-user",
|
||||
userName: "Playwright User",
|
||||
userEmail: "playwright@example.com",
|
||||
organization: payload.organization ?? "Unknown",
|
||||
reason: payload.reason ?? "No reason",
|
||||
status: "pending",
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
if (!state.developerRequests) {
|
||||
state.developerRequests = [];
|
||||
}
|
||||
state.developerRequests.push(created);
|
||||
return json(route, created, 201);
|
||||
}
|
||||
|
||||
if (pathname === "/api/v1/dev/requests/status" && method === "GET") {
|
||||
const myRequest = (state.developerRequests ?? []).find(
|
||||
(r) => r.userId === "playwright-user",
|
||||
);
|
||||
return json(route, myRequest || null);
|
||||
}
|
||||
|
||||
if (
|
||||
pathname.startsWith("/api/v1/dev/requests/") &&
|
||||
pathname.endsWith("/approve") &&
|
||||
method === "POST"
|
||||
) {
|
||||
const reqId = pathname.split("/")[5] ?? "";
|
||||
const found = state.developerRequests?.find((r) => r.id === reqId);
|
||||
if (!found) return json(route, { error: "not found" }, 404);
|
||||
found.status = "approved";
|
||||
found.approvedAt = new Date().toISOString();
|
||||
return json(route, found);
|
||||
}
|
||||
|
||||
if (
|
||||
pathname.startsWith("/api/v1/dev/requests/") &&
|
||||
pathname.endsWith("/reject") &&
|
||||
method === "POST"
|
||||
) {
|
||||
const reqId = pathname.split("/")[5] ?? "";
|
||||
const found = state.developerRequests?.find((r) => r.id === reqId);
|
||||
if (!found) return json(route, { error: "not found" }, 404);
|
||||
found.status = "rejected";
|
||||
found.rejectedAt = new Date().toISOString();
|
||||
return json(route, found);
|
||||
}
|
||||
|
||||
if (
|
||||
pathname.startsWith("/api/v1/dev/requests/") &&
|
||||
pathname.endsWith("/cancel") &&
|
||||
method === "POST"
|
||||
) {
|
||||
const reqId = pathname.split("/")[5] ?? "";
|
||||
const found = state.developerRequests?.find((r) => r.id === reqId);
|
||||
if (!found) return json(route, { error: "not found" }, 404);
|
||||
found.status = "pending";
|
||||
found.approvedAt = undefined;
|
||||
return json(route, found);
|
||||
}
|
||||
|
||||
if (pathname === "/api/v1/dev/my-tenants" && method === "GET") {
|
||||
return json(route, [
|
||||
{ id: "tenant-a", name: "Tenant A", slug: "tenant-a" },
|
||||
|
||||
Reference in New Issue
Block a user