import { expect, test } from "@playwright/test"; test.describe("Tenants Management", () => { test.beforeEach(async ({ page }) => { // Authenticate await page.addInitScript(() => { const authority = "http://localhost:5000/oidc"; const client_id = "adminfront"; const key = `oidc.user:${authority}:${client_id}`; const authData = { access_token: "fake-token", token_type: "Bearer", profile: { sub: "admin-user", name: "Admin User", email: "admin@example.com", }, expires_at: Math.floor(Date.now() / 1000) + 3600, }; window.localStorage.setItem(key, JSON.stringify(authData)); }); // Mock OIDC config to avoid redirects await page.route( "**/oidc/.well-known/openid-configuration", async (route) => { await route.fulfill({ json: { issuer: "http://localhost:5000/oidc" } }); }, ); }); test("should list tenants", async ({ page }) => { await page.route("**/api/v1/admin/tenants*", async (route) => { await route.fulfill({ json: { items: [ { id: "1", name: "Tenant A", slug: "tenant-a", status: "active", type: "COMPANY", updatedAt: new Date().toISOString(), }, ], total: 1, limit: 1000, offset: 0, }, }); }); await page.goto("/tenants"); await expect(page.locator("h2")).toContainText("테넌트 목록"); await expect(page.locator("table")).toContainText("Tenant A"); }); test("should create a new tenant", async ({ page }) => { // Mock GET for list (empty) and for parents await page.route("**/api/v1/admin/tenants*", async (route) => { if (route.request().method() === "GET") { await route.fulfill({ json: { items: [], total: 0, limit: 100, offset: 0 }, }); } else if (route.request().method() === "POST") { await route.fulfill({ json: { id: "2", name: "New Tenant", slug: "new-tenant", status: "active", type: "COMPANY", }, }); } }); await page.goto("/tenants/new"); await page.fill("input >> nth=0", "New Tenant"); await page.fill("input >> nth=1", "new-tenant"); await page.fill("textarea", "Description"); await page.click('button:has-text("생성")'); await expect(page).toHaveURL(/\/tenants$/); }); test("should show validation error on empty name", async ({ page }) => { await page.goto("/tenants/new"); const submitBtn = page.locator('button:has-text("생성")'); await expect(submitBtn).toBeDisabled(); await page.fill("input >> nth=0", "Valid Name"); await expect(submitBtn).not.toBeDisabled(); }); });