55 lines
2.2 KiB
JavaScript
55 lines
2.2 KiB
JavaScript
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));
|
|
}
|
|
});
|