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); });