GPU_GUARD_MONOREPO/packages/backend/test/tool_registry.test.ts
2026-05-20 21:39:12 +08:00

94 lines
2.2 KiB
TypeScript

import { NetaClawToolRegistryService } from '../src/modules/netaclaw/service/tool_registry.js';
describe('NetaClawToolRegistryService', () => {
let service: NetaClawToolRegistryService;
beforeEach(() => {
service = new NetaClawToolRegistryService();
});
it('keeps governance fields from db during catalog sync', async () => {
const save = jest.fn().mockResolvedValue(undefined);
service.toolRepo = {
find: jest.fn().mockResolvedValue([
{
id: 1,
name: 'clarify',
label: '自定义澄清',
description: '自定义描述',
toolset: 'interaction',
visibility: 'tool',
capability: 'text',
status: 0,
isCore: 0,
canDisable: 1,
supportsPromptHint: 1,
promptHint: 'custom',
sort: 30,
extra: { source: 'db' },
},
]),
create: jest.fn((data: any) => data),
save,
} as any;
await service.syncCatalogToDb();
expect(save).toHaveBeenCalledWith(
expect.arrayContaining([
expect.objectContaining({
name: 'clarify',
label: '自定义澄清',
description: '自定义描述',
status: 0,
isCore: 0,
canDisable: 1,
promptHint: 'custom',
sort: 30,
extra: { source: 'db' },
}),
])
);
});
it('allows updating isCore and canDisable from tool management', async () => {
const current = {
id: 1,
name: 'clarify',
label: 'clarify',
description: 'old',
toolset: 'interaction',
visibility: 'tool',
capability: 'text',
status: 1,
isCore: 1,
canDisable: 0,
supportsPromptHint: 1,
promptHint: null,
sort: 0,
extra: null,
};
const save = jest.fn().mockResolvedValue(undefined);
service.toolRepo = {
findOneBy: jest.fn().mockResolvedValue(current),
save,
} as any;
await service.update({
id: 1,
isCore: 0,
canDisable: 1,
status: 0,
});
expect(save).toHaveBeenCalledWith(
expect.objectContaining({
id: 1,
isCore: 0,
canDisable: 1,
status: 0,
})
);
});
});