80 lines
2.6 KiB
JavaScript
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);
|
|
});
|