const assert = require('node:assert/strict'); const test = require('node:test'); const Module = require('node:module'); const express = require('express'); function loadDashboardRouter() { const originalLoad = Module._load; Module._load = function load(id, parent, ...rest) { if (parent?.filename.endsWith('/api/dashboard.js') && id.endsWith('/jianSunDatabase')) { return { query: async (sql) => { if (sql.includes('SELECT DISTINCT shopName')) return [{ shopName: '测试店铺' }]; if (sql.includes('FROM dbo.pdd_DataGoods g')) { return [{ statDate: '2026-09-12', latestDate: '2026-09-12', payAmount: 100, buyerCount: 2, visitorCount: 10, goodsPv: 20, payGoodsQty: 3, payOrderCount: 2, favoriteCount: 1, impressionCount: 30, }]; } if (sql.includes('FROM dbo.pdd_MallServiceScore')) return [{ shopCount: 1, cstmrServScore: 4.8 }]; if (sql.includes('FROM dbo.pdd_ShopStars')) return [{ shopCount: 1, mallStarTomms: 5 }]; return []; }, }; } return originalLoad.call(this, id, parent, ...rest); }; try { return require('../src/api/dashboard'); } finally { Module._load = originalLoad; } } test('dashboard keeps its read-only data endpoints after product analysis is retired', async () => { const app = express(); app.use('/api/dashboard', loadDashboardRouter()); const server = await new Promise((resolve) => { const listener = app.listen(0, '127.0.0.1', () => resolve(listener)); }); try { const base = `http://127.0.0.1:${server.address().port}`; const meta = await (await fetch(`${base}/api/dashboard/meta`)).json(); assert.deepEqual(meta.data.shops, ['测试店铺']); const summary = await (await fetch(`${base}/api/dashboard/summary?period=day`)).json(); assert.equal(summary.success, true); assert.equal(summary.data.latestDate, '2026-09-12'); assert.equal(summary.data.metrics.find((item) => item.key === 'payAmount').value, 100); assert.equal((await fetch(`${base}/api/product-analysis/products`)).status, 404); } finally { await new Promise((resolve) => server.close(resolve)); } });