Files
web_huakui_web/tests/sdk-system.test.ts
T
谢宇宁andClaude Opus 5.5 d2ddb1c321 [Ai] feat: 花魁短剧 Next.js 站点初始提交
- 原生 Next.js App Router + 严格 TypeScript 实现花魁短剧 PC/H5 页面,按 src/features/{catalog,content,playback} 组织,保留完整 SEO(metadata、JSON-LD、canonical、robots、llms、sitemap、IndexNow)。
- 主域名通过 SITE_URL=https://huakuidj.com 强制覆盖后端 foreverUrlAddr(config/*.env、src/server/config.ts、src/server/seo/shared.ts、src/server/services/shared.ts),支持邮箱改为 support@huakuidj.com。
- 移除登录与账户体系:删除 /account 全部页面、登录/注册/充值弹窗、收藏点赞、评论、金币解锁及对应 BFF 接口;旧账户地址 GET/HEAD 统一 301 到首页(src/lib/routes.ts REMOVED_ACCOUNT_PATHS),保留游客会话、反馈、图片上传、观看上报与搜索联想。
- 播放页:评论位改为同类推荐 + 热播榜单,锁定集改为 App 观看遮罩与底部弹层,新增简介标签、分集图例与独立视觉皮肤(src/features/playback、src/styles/pages/playback.css)。
- 卡片:短剧/视频卡状态与时长移至信息行胶囊标签,封面角标移至左上角(src/components/catalog/Cards.tsx、src/styles/foundations/base.css)。
- 同步更新单元测试、浏览器冒烟脚本、路由清单与 README。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 11:33:31 +07:00

82 lines
3.3 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { runInNewContext } from "node:vm";
const sdkSource = readFileSync(new URL("../public/static/common/web-sdk-v1.2.0.js", import.meta.url), "utf8");
interface SDKContext {
navigator?: { userAgent: string; platform: string; maxTouchPoints: number };
WebSDK?: { getCommonFields(fields?: string[]): Promise<Record<string, unknown>> };
}
function loadSDK(userAgent?: string, platform = "", maxTouchPoints = 0) {
const context: SDKContext = {};
if (userAgent !== undefined) context.navigator = { userAgent, platform, maxTouchPoints };
runInNewContext(sdkSource, context, { filename: "web-sdk-v1.2.0.js" });
assert.ok(context.WebSDK);
return context.WebSDK;
}
const userAgents = [
{
name: "iPhone",
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 Version/18.0 Mobile/15E148 Safari/604.1",
platform: "iPhone", touch: 5, system: "iOS", version: "18.0",
},
{
name: "iPad mobile mode",
ua: "Mozilla/5.0 (iPad; CPU OS 17_6_1 like Mac OS X) AppleWebKit/605.1.15 Version/17.6 Mobile/15E148 Safari/604.1",
platform: "iPad", touch: 5, system: "iOS", version: "17.6.1",
},
{
name: "Android",
ua: "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 Chrome/129.0.0.0 Mobile Safari/537.36",
platform: "Linux armv8l", touch: 5, system: "Android", version: "14",
},
{
name: "Windows NT",
ua: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/129.0.0.0 Safari/537.36",
platform: "Win32", touch: 0, system: "Windows", version: "10.0",
},
{
name: "macOS",
ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6_1) AppleWebKit/605.1.15 Version/17.6 Safari/605.1.15",
platform: "MacIntel", touch: 0, system: "macOS", version: "14.6.1",
},
{
name: "iPad desktop mode without an exposed iOS version",
ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/18.0 Safari/605.1.15",
platform: "MacIntel", touch: 5, system: "iOS", version: "",
},
{
name: "Linux without an exposed kernel version",
ua: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/129.0.0.0 Safari/537.36",
platform: "Linux x86_64", touch: 0, system: "Linux", version: "",
},
{
name: "unknown operating system",
ua: "ExampleBrowser/1.0", platform: "", touch: 0, system: "Other", version: "",
},
];
for (const device of userAgents) {
test(`bundled SDK common fields report the operating system for ${device.name}`, async () => {
const sdk = loadSDK(device.ua, device.platform, device.touch);
const common = await sdk.getCommonFields();
assert.equal(common.system_name, device.system);
assert.equal(common.system_version, device.version);
assert.equal(common.user_agent, device.ua);
const selected = await sdk.getCommonFields(["system_name", "system_version"]);
assert.deepEqual(JSON.parse(JSON.stringify(selected)), {
system_name: device.system, system_version: device.version,
});
});
}
test("bundled SDK OS fields tolerate a missing navigator without inventing a version", async () => {
const common = await loadSDK().getCommonFields();
assert.equal(common.system_name, "Other");
assert.equal(common.system_version, "");
});