cangku/backend/test/retiredFeatures.test.js

27 lines
1.6 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const { pruneRetiredSidebarConfig, cleanupRetiredFeatureSettings, isRetiredSystemConfigKey } = require('../src/services/retiredFeatures');
test('retired sidebar cleanup is recursive and idempotent', () => {
const saved = JSON.stringify({ entries: [{ key: 'agent' }, { key: 'manage', children: [{ key: 'ai-skill-tags' }, { key: 'settings', label: '管理设置' }] }] });
const clean = pruneRetiredSidebarConfig(saved);
assert.deepEqual(JSON.parse(clean).entries, [{ key: 'manage', children: [{ key: 'settings', label: '管理设置' }] }]);
assert.equal(pruneRetiredSidebarConfig(clean), clean);
assert.equal(pruneRetiredSidebarConfig('{invalid'), '{invalid');
assert.equal(isRetiredSystemConfigKey('openclaw_chat_skill_tags'), true);
assert.equal(isRetiredSystemConfigKey('site_name'), false);
});
test('upgrade removes only retired settings and permission rows', async () => {
const calls = [];
await cleanupRetiredFeatureSettings({ query: async (sql, params) => {
calls.push({ sql, params });
return sql.startsWith('SELECT') ? [{ config_value: '{"entries":[{"key":"agent"},{"key":"product-analysis"}]}' }] : [];
} });
const deletes = calls.filter((call) => call.sql.startsWith('DELETE'));
assert.equal(deletes.length, 4);
assert.ok(deletes.every((call) => call.sql.includes(' WHERE ') && call.params.length > 0));
const update = calls.find((call) => call.sql.startsWith('UPDATE'));
assert.deepEqual(JSON.parse(update.params[0]).entries, [{ key: 'product-analysis' }]);
});