Files
zn-ai/tests/skill-planner.test.ts
DEV_DSW 4c61e93c3e Add unit tests for skill capabilities, skill planner, and UV setup
- Implement tests for random ID generation, ensuring preference for crypto.randomUUID.
- Create tests for runtime context capabilities, validating the injection of enabled skill capabilities.
- Add tests for skill capability parsing, including classification and command example extraction.
- Introduce tests for the skill planner, verifying tool call planning based on user requests and attachment requirements.
- Establish tests for UV setup, ensuring proper handling of Python installation scenarios and environment checks.
2026-04-24 17:02:59 +08:00

78 lines
2.5 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @vitest-environment node
import { describe, expect, it } from 'vitest';
import { planToolCall } from '../electron/gateway/skill-planner';
const spreadsheetCapability = {
capabilityKey: 'minimax-xlsx',
toolName: 'minimax-xlsx',
skillKey: 'minimax-xlsx',
slug: 'minimax-xlsx',
name: 'MiniMax XLSX',
displayName: 'MiniMax XLSX',
description: 'Analyze spreadsheet files such as .xlsx, .csv, and .tsv.',
kind: 'skill' as const,
aliases: ['minimax-xlsx', 'xlsx', 'spreadsheet', 'excel'],
inputKinds: ['text', 'file', 'attachment'],
outputKinds: ['text', 'json', 'artifacts'],
triggerHints: ['spreadsheet', 'excel', 'xlsx', 'csv'],
supportedFileTypes: ['.xlsx', '.csv', '.tsv'],
requiresFiles: true,
enabled: true,
metadata: {
renderHints: {
card: 'document-analysis',
preferredView: 'table',
skillType: 'spreadsheet',
},
},
};
describe('skill planner', () => {
it('plans a spreadsheet tool call when the user explicitly requests minimax-xlsx with an attachment', () => {
const decision = planToolCall({
userText: '使用minimax-xlsx这个skill帮我分析下。',
message: {
role: 'user',
content: '使用minimax-xlsx这个skill帮我分析下。',
},
attachments: [
{
fileName: 'report.xlsx',
mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
fileSize: 1024,
preview: null,
filePath: 'C:\\tmp\\report.xlsx',
source: 'user-upload',
},
],
capabilities: [spreadsheetCapability],
});
expect(decision.kind).toBe('tool');
expect(decision.reason).toBe('explicit_skill_request');
expect(decision.toolCall?.name).toBe('minimax-xlsx');
expect(decision.toolCall?.input).toEqual(expect.objectContaining({
filePaths: ['C:\\tmp\\report.xlsx'],
skillKey: 'minimax-xlsx',
}));
});
it('returns a blocking no-tool decision when spreadsheet analysis is requested without an attachment', () => {
const decision = planToolCall({
userText: '使用minimax-xlsx这个skill帮我分析下。',
message: {
role: 'user',
content: '使用minimax-xlsx这个skill帮我分析下。',
},
capabilities: [spreadsheetCapability],
});
expect(decision.kind).toBe('no-tool');
expect(decision.reason).toBe('missing_required_attachment');
expect(decision.blockingIssue).toEqual(expect.objectContaining({
code: 'missing_required_attachment',
}));
});
});