69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const {
|
|
buildHashedCacheKey,
|
|
getStatsSnapshot,
|
|
resetStats,
|
|
} = require('../src/services/dataPageCache');
|
|
|
|
test('buildHashedCacheKey is stable for equivalent object key order', () => {
|
|
const left = buildHashedCacheKey('dashboard', {
|
|
query: {
|
|
keyword: ' sofa ',
|
|
filters: {
|
|
channel: 'tmall',
|
|
category: ' furniture ',
|
|
},
|
|
},
|
|
page: 1,
|
|
}, 'v2');
|
|
|
|
const right = buildHashedCacheKey('dashboard', {
|
|
page: 1,
|
|
query: {
|
|
filters: {
|
|
category: 'furniture',
|
|
channel: 'tmall',
|
|
},
|
|
keyword: 'sofa',
|
|
},
|
|
}, 'v2');
|
|
|
|
assert.equal(left, right);
|
|
assert.match(left, /^dashboard:v2:[a-f0-9]{32}$/);
|
|
});
|
|
|
|
test('buildHashedCacheKey keeps array order significant', () => {
|
|
const first = buildHashedCacheKey('dashboard', { ids: [1, 2, 3] }, 'v1');
|
|
const second = buildHashedCacheKey('dashboard', { ids: [3, 2, 1] }, 'v1');
|
|
|
|
assert.notEqual(first, second);
|
|
});
|
|
|
|
test('buildHashedCacheKey separates namespace and version', () => {
|
|
const payload = { page: 1, keyword: 'chair' };
|
|
|
|
assert.notEqual(
|
|
buildHashedCacheKey('dashboard', payload, 'v1'),
|
|
buildHashedCacheKey('dashboard', payload, 'v2'),
|
|
);
|
|
assert.notEqual(
|
|
buildHashedCacheKey('dashboard', payload, 'v1'),
|
|
buildHashedCacheKey('analysis', payload, 'v1'),
|
|
);
|
|
});
|
|
|
|
test('resetStats returns an empty stats snapshot', () => {
|
|
resetStats();
|
|
const snapshot = getStatsSnapshot();
|
|
|
|
assert.equal(snapshot.total, 0);
|
|
assert.equal(snapshot.memoryHits, 0);
|
|
assert.equal(snapshot.redisHits, 0);
|
|
assert.equal(snapshot.pendingHits, 0);
|
|
assert.equal(snapshot.misses, 0);
|
|
assert.deepEqual(snapshot.labels, []);
|
|
assert.deepEqual(snapshot.recentEvents, []);
|
|
});
|