文件
hyb-oa/scripts/qa/tests/browser-environment-probe.test.mjs
T

59 行
2.8 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import { observeGuestEntry } from "../browser-environment-probe.mjs";
function fixture({ refresh = false, failed = false, online = true, documentOnline = true, cookies = [], status = 200 } = {}) {
const handlers = {};
let navigated = false;
const page = {
on(event, handler) { handlers[event] = handler; },
async addInitScript() {},
async evaluate() { return online; },
async goto() {
assert.ok(handlers.request);
navigated = true;
handlers.console({ text: () => `QA_ENV_DOCUMENT_ONLINE:${documentOnline}` });
handlers.console({ text: () => "QA_ENV_DOCUMENT_ONLINE:true" });
if (refresh) {
const request = { url: () => "http://127.0.0.1/api/auth/refresh" };
handlers.request(request);
if (failed) handlers.requestfailed(request);
}
return { status: () => status };
},
getByTestId() { return { async waitFor() {} }; },
url() { return "http://127.0.0.1/login"; },
async close() {},
};
return { context: { async storageState() { return { cookies, origins: [] }; }, async newPage() { return page; } }, navigated: () => navigated };
}
test("在线新 context、表单及零 refresh 是独立事实", async () => {
const owned = fixture();
const result = await observeGuestEntry(owned.context, "http://127.0.0.1");
assert.equal(result.valid, true);
assert.equal(result.refreshRequestCount, 0);
assert.equal(result.noRouteMocks, true);
});
for (const failed of [false, true]) test(`表单可见但 refresh 已尝试必须拒绝,失败请求=${failed}`, async () => {
const result = await observeGuestEntry(fixture({ refresh: true, failed }).context, "http://127.0.0.1");
assert.equal(result.valid, false);
assert.equal(result.refreshRequestCount, 1);
assert.equal(result.refreshFailedCount, Number(failed));
assert.ok(result.failures.includes("refresh_attempt_observed"));
});
test("首次 document-start 离线不可被后续 true 覆盖", async () => {
const result = await observeGuestEntry(fixture({ documentOnline: false }).context, "http://127.0.0.1");
assert.equal(result.nativeOnlineSamples.documentStart, false);
assert.equal(result.valid, false);
});
for (const options of [{ online: false }, { cookies: [{ name: "has_session", value: "1" }] }]) test(`前置无效不导航 ${JSON.stringify(options)}`, async () => {
const owned = fixture(options);
assert.equal((await observeGuestEntry(owned.context, "http://127.0.0.1")).valid, false);
assert.equal(owned.navigated(), false);
});
test("非候选 HTTP 200 不合格,禁止公网探针", async () => {
assert.equal((await observeGuestEntry(fixture({ status: 500 }).context, "http://127.0.0.1")).valid, false);
await assert.rejects(observeGuestEntry(fixture().context, "https://example.invalid"), /requires_loopback/);
});