cangku/backend/test/dataPageCache.test.js

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, []);
});