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