150 行
5.0 KiB
TypeScript
150 行
5.0 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);
|
|
|
|
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 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);
|
|
}
|
|
});
|
|
});
|