feat: complete TASK-WP0-03 browser gate
This commit is contained in:
@@ -13,7 +13,11 @@ let vite: ViteDevServer;
|
||||
let webUrl: string;
|
||||
|
||||
test.beforeAll(async () => {
|
||||
app = await createApp({ eventHub });
|
||||
app = await createApp({
|
||||
browserGate: false,
|
||||
eventHub,
|
||||
networkBoundary: { allowTestPort: true },
|
||||
});
|
||||
app.get("/__test/entity", async (request) => ({ entity_ref: (request.query as { ref?: string }).ref ?? null }));
|
||||
app.get("/__test/models", async () => ({ source: "rest" }));
|
||||
const apiUrl = await app.listen({ host: "127.0.0.1", port: 0 });
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
import { mkdirSync, writeFileSync } from "node:fs";
|
||||
import { resolve } from "node:path";
|
||||
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
import { createApp } from "../../apps/api/src/app.js";
|
||||
|
||||
test("a real Edge profile passes the candidate support flow", async ({ browser, context, page }) => {
|
||||
const fullVersion = browser.version();
|
||||
const release = {
|
||||
appVersion: "1.2.3-candidate",
|
||||
browsers: [
|
||||
{ brand: "Google Chrome", fullVersion: "150.0.0.0" },
|
||||
{ brand: "Microsoft Edge", fullVersion },
|
||||
],
|
||||
} as const;
|
||||
const app = await createApp({
|
||||
browserSupportRelease: release,
|
||||
networkBoundary: { allowTestPort: true },
|
||||
} as never);
|
||||
const url = await app.listen({ host: "127.0.0.1", port: 0 });
|
||||
|
||||
try {
|
||||
await page.goto(url);
|
||||
await expect.poll(() => page.locator("html").getAttribute("data-support-status")).toBe("supported");
|
||||
await expect(page.locator("h1")).toHaveText("浏览器支持检查已通过");
|
||||
await expect(page.locator("#status-code")).toBeHidden();
|
||||
await expect(page.locator("#no-bypass")).toBeHidden();
|
||||
await expect(page.locator("#supported-value")).toContainText("Google Chrome");
|
||||
await expect(page.locator("#supported-value")).toContainText("Microsoft Edge");
|
||||
const bootstrapStatus = await page.evaluate(async () => (await fetch("/api/v1/bootstrap")).status);
|
||||
expect(bootstrapStatus).toBe(200);
|
||||
|
||||
const cookie = (await context.cookies()).find(({ name }) => name === "dada_browser_support");
|
||||
expect(cookie).toMatchObject({ httpOnly: true, sameSite: "Strict" });
|
||||
|
||||
const evidenceDirectory = process.env.DADA_EVIDENCE_DIR_BRW_SUPPORTED;
|
||||
if (evidenceDirectory) {
|
||||
mkdirSync(resolve(evidenceDirectory, "edge", "screenshots"), { recursive: true });
|
||||
await page.screenshot({
|
||||
path: resolve(evidenceDirectory, "edge", "screenshots", "supported.png"),
|
||||
});
|
||||
writeFileSync(
|
||||
resolve(evidenceDirectory, "edge", "environment.json"),
|
||||
`${JSON.stringify({ browser: "Microsoft Edge", full_version: fullVersion, release_kind: "test_candidate", status: "partial" }, null, 2)}\n`,
|
||||
);
|
||||
writeFileSync(
|
||||
resolve(evidenceDirectory, "edge", "response.json"),
|
||||
`${JSON.stringify({ bootstrap_status: bootstrapStatus, cookie_http_only: cookie?.httpOnly, status: "passed" }, null, 2)}\n`,
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
await app.close();
|
||||
}
|
||||
});
|
||||
|
||||
test("the hard-block shell is usable without a product bundle", async ({ browser, page }) => {
|
||||
const currentMajor = Number.parseInt(browser.version().split(".")[0], 10);
|
||||
const app = await createApp({
|
||||
browserSupportRelease: {
|
||||
appVersion: "1.2.3-test",
|
||||
browsers: [
|
||||
{ brand: "Google Chrome", fullVersion: `${currentMajor + 1}.0.0.0` },
|
||||
{ brand: "Microsoft Edge", fullVersion: `${currentMajor + 1}.0.0.0` },
|
||||
],
|
||||
},
|
||||
networkBoundary: { allowTestPort: true },
|
||||
} as never);
|
||||
const url = await app.listen({ host: "127.0.0.1", port: 0 });
|
||||
|
||||
try {
|
||||
await page.goto(url);
|
||||
await expect.poll(() => page.locator("html").getAttribute("data-support-status")).toBe("blocked");
|
||||
await expect(page.locator("#reason-value")).toHaveText("version_unsupported");
|
||||
await expect(page.getByText("没有“仍然继续”入口,也不会提供绕过令牌或参数。")).toBeVisible();
|
||||
await expect(page.locator('script[src*="/src/main"]')).toHaveCount(0);
|
||||
await page.keyboard.press("Tab");
|
||||
await expect(page.locator("h1")).toBeFocused();
|
||||
await page.keyboard.press("Tab");
|
||||
await expect(page.locator("summary")).toBeFocused();
|
||||
await page.keyboard.press("Tab");
|
||||
await expect(page.getByRole("button", { name: "重新检测" })).toBeFocused();
|
||||
await page.keyboard.press("Tab");
|
||||
await expect(page.getByRole("button", { name: "复制本机地址" })).toBeFocused();
|
||||
|
||||
const evidenceDirectory = process.env.DADA_EVIDENCE_DIR_BRW_BLOCKED;
|
||||
if (evidenceDirectory) {
|
||||
mkdirSync(resolve(evidenceDirectory, "screenshots"), { recursive: true });
|
||||
await page.screenshot({ path: resolve(evidenceDirectory, "screenshots", "blocked.png") });
|
||||
}
|
||||
|
||||
await page.setViewportSize({ height: 844, width: 390 });
|
||||
expect(await page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth)).toBe(true);
|
||||
await expect(page.getByRole("button", { name: "重新检测" })).toBeVisible();
|
||||
if (evidenceDirectory) {
|
||||
await page.screenshot({ path: resolve(evidenceDirectory, "screenshots", "blocked-mobile.png") });
|
||||
}
|
||||
} finally {
|
||||
await app.close();
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user