文件

147 行
4.9 KiB
TypeScript

import { expect, test, type Page, type TestInfo } from "@playwright/test";
import { getExpectedWecomStatus, loginLiveUser, logoutLiveUser } from "./helpers/liveAuth";
import { openProfileSettings } from "./helpers/navigation";
import {
assertBackupModulesCollapsed,
assertForbiddenPage,
assertMainNavVisible,
assertPortalLoaded,
assertWecomBindingCardVisible,
fetchWecomConfig,
} from "./helpers/smokeAssertions";
async function attachDebugArtifacts(page: Page, testInfo: TestInfo, consoleMessages: string[]) {
await testInfo.attach("current-url.txt", {
body: Buffer.from(page.url() || "about:blank"),
contentType: "text/plain",
});
await testInfo.attach("console.log", {
body: Buffer.from(consoleMessages.join("\n") || "(no console output)"),
contentType: "text/plain",
});
try {
const wecomConfig = await fetchWecomConfig(page);
await testInfo.attach("wecom-config.json", {
body: Buffer.from(JSON.stringify(wecomConfig, null, 2)),
contentType: "application/json",
});
} catch (error) {
await testInfo.attach("wecom-config-error.txt", {
body: Buffer.from(String(error)),
contentType: "text/plain",
});
}
}
test.describe("live smoke", () => {
test.skip(process.env.E2E_MODE !== "live", "仅在 live smoke 模式下执行");
test.describe.configure({ mode: "serial" });
test("公网基础探活与企微配置状态", async ({ request, page }, testInfo) => {
const consoleMessages: string[] = [];
page.on("console", (message) => {
consoleMessages.push(`[${message.type()}] ${message.text()}`);
});
try {
const readyResponse = await request.get("/ready");
expect(readyResponse.ok()).toBeTruthy();
await page.goto("/login");
await expect(page.getByTestId("login-identifier")).toBeVisible();
const wecomConfig = await fetchWecomConfig(page);
expect(wecomConfig.status).toBe(200);
expect(wecomConfig.data?.status).toBe(getExpectedWecomStatus());
} finally {
await attachDebugArtifacts(page, testInfo, consoleMessages);
}
});
test("管理员只读网页 smoke", async ({ page }, testInfo) => {
const consoleMessages: string[] = [];
page.on("console", (message) => {
consoleMessages.push(`[${message.type()}] ${message.text()}`);
});
let userName = "管理员";
try {
const admin = await loginLiveUser(page, "admin");
userName = admin.name;
await assertPortalLoaded(page);
await assertMainNavVisible(page);
await assertBackupModulesCollapsed(page);
await page.goto("/team");
await expect(page.getByRole("heading", { name: "团队状态", exact: true })).toBeVisible();
await page.goto("/projects");
await expect(page.getByRole("heading", { name: "项目", exact: true })).toBeVisible();
await page.goto("/announcements");
await expect(page.getByRole("heading", { name: "公告", exact: true })).toBeVisible();
await page.goto("/system/workspace");
await expect(page.getByRole("heading", { name: "工作区设置", exact: true })).toBeVisible();
await page.goto("/system/feature-flags");
await expect(page.getByRole("heading", { name: "功能管理", exact: true })).toBeVisible();
await page.goto("/audit-logs");
await expect(page.getByRole("heading", { name: "审计工作台", exact: true })).toBeVisible();
await openProfileSettings(page, userName);
await assertWecomBindingCardVisible(page);
await logoutLiveUser(page, { name: userName });
} finally {
await attachDebugArtifacts(page, testInfo, consoleMessages);
}
});
test("员工只读网页 smoke", async ({ page }, testInfo) => {
const consoleMessages: string[] = [];
page.on("console", (message) => {
consoleMessages.push(`[${message.type()}] ${message.text()}`);
});
let userName = "员工";
try {
const employee = await loginLiveUser(page, "employee");
userName = employee.name;
await assertPortalLoaded(page);
await assertMainNavVisible(page, { expectTeam: false });
await page.goto("/projects");
await expect(page.getByRole("heading", { name: "项目", exact: true })).toBeVisible();
await page.goto("/announcements");
await expect(page.getByRole("heading", { name: "公告", exact: true })).toBeVisible();
await page.goto("/system/workspace");
await assertForbiddenPage(page);
await page.goto("/system/feature-flags");
await assertForbiddenPage(page);
await page.goto("/audit-logs");
await assertForbiddenPage(page);
await page.goto("/portal");
await assertPortalLoaded(page);
await openProfileSettings(page, userName);
await assertWecomBindingCardVisible(page);
await logoutLiveUser(page, { name: userName });
} finally {
await attachDebugArtifacts(page, testInfo, consoleMessages);
}
});
});