Files
shencaisuan/tmp/trend-compat-regression.js
2026-07-06 16:52:34 +08:00

80 lines
2.6 KiB
JavaScript

const fs = require("fs");
const path = require("path");
const vm = require("vm");
const assert = require("assert");
const apiClientPath = path.join(__dirname, "..", "utils", "ApiClient.js");
const source =
fs.readFileSync(apiClientPath, "utf8") + "\nglobalThis.__ApiClient = ApiClient;\n";
const context = {
console,
window: { CURRENT_CONFIG: {} },
localStorage: {
getItem() {
return "";
},
},
};
vm.createContext(context);
vm.runInContext(source, context, { filename: apiClientPath });
const ApiClient = context.__ApiClient;
async function assertLegacyDataArrayFromTrendObject() {
const rows = [
{ issue: "2026001", openCode: "1,2,3" },
{ issue: "2026002", openCode: "4,5,6" },
];
let trendRequest;
ApiClient.get = async function (url, params) {
trendRequest = { url, params };
return { code: 0, data: { records: rows, total: rows.length } };
};
ApiClient.requestWithMenu = async function () {
throw new Error("trend response should not fall back");
};
const res = await ApiClient.requestLegacyLotteryResultCompat({ suoxie: "pl3" });
assert.strictEqual(trendRequest.url, ApiClient.API.lotteryTrend);
assert.strictEqual(trendRequest.params.code, "pl3");
assert.strictEqual(trendRequest.params.pageSize, 100);
assert.ok(Array.isArray(res.data), "legacy trend data should be an array");
assert.deepStrictEqual(res.data.slice(0, 1), rows.slice(0, 1));
assert.deepStrictEqual(res.data.records, rows);
assert.deepStrictEqual(res.data.rows, rows);
assert.strictEqual(res.data.total, rows.length);
}
async function assertLegacyDataArrayFromFallbackObject() {
const rows = [{ issue: "2026003", openCode: "7,8,9" }];
ApiClient.API.lotteryTrend = "";
ApiClient.requestWithMenu = async function (url, data) {
assert.strictEqual(url, "/api/web/lottery/result/list");
assert.deepStrictEqual(data, { suoxie: "pl3" });
return { code: 0, data: { rows, totalRow: rows.length } };
};
const res = await ApiClient.requestLegacyLotteryResultCompat({ suoxie: "pl3" });
assert.ok(Array.isArray(res.data), "legacy fallback data should be an array");
assert.deepStrictEqual(res.data.slice(0, 1), rows);
assert.deepStrictEqual(res.data.records, rows);
assert.deepStrictEqual(res.data.rows, rows);
assert.strictEqual(res.data.totalRow, rows.length);
}
Promise.resolve()
.then(assertLegacyDataArrayFromTrendObject)
.then(assertLegacyDataArrayFromFallbackObject)
.then(() => {
console.log("trend compat regression passed");
})
.catch((error) => {
console.error(error && error.stack ? error.stack : error);
process.exit(1);
});