GPU_GUARD_MONOREPO/packages/backend/test/skill_env_schema.test.ts

107 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-05-20 21:39:12 +08:00
import {
buildSkillEnvSchema,
isSkillEnvSchemaEqual,
} from '../src/modules/netaclaw/service/skill_env_schema.js';
describe('buildSkillEnvSchema', () => {
it('uses skill.config.yaml env as the envSchema source of truth', () => {
const schema = buildSkillEnvSchema({
env: [
{
name: 'ARK_API_KEY',
required: true,
description: '火山方舟/豆包 OpenAI-compatible API Key',
},
{
name: 'DAMAGE_DETECT_MODEL',
required: true,
default: 'doubao-seed-2-0-pro-260215',
description: '用于环车旧伤候选检测的多模态模型 ID',
},
],
});
expect(schema).toEqual([
{
name: 'ARK_API_KEY',
required: true,
description: '火山方舟/豆包 OpenAI-compatible API Key',
default: undefined,
},
{
name: 'DAMAGE_DETECT_MODEL',
required: true,
description: '用于环车旧伤候选检测的多模态模型 ID',
default: 'doubao-seed-2-0-pro-260215',
},
]);
});
it('returns null when the skill has no env declaration', () => {
expect(buildSkillEnvSchema({})).toBeNull();
});
it('preserves empty-string defaults', () => {
expect(buildSkillEnvSchema({
env: [
{
name: 'OPTIONAL_PREFIX',
required: false,
default: '',
},
],
})).toEqual([
{
name: 'OPTIONAL_PREFIX',
required: false,
description: undefined,
default: '',
},
]);
});
});
describe('isSkillEnvSchemaEqual', () => {
it('treats schemas with the same items as equal', () => {
expect(isSkillEnvSchemaEqual(
[
{
name: 'DAMAGE_DETECT_MODEL',
required: true,
description: 'model',
default: '',
},
],
[
{
name: 'DAMAGE_DETECT_MODEL',
required: true,
description: 'model',
default: '',
},
],
)).toBe(true);
});
it('detects schema differences', () => {
expect(isSkillEnvSchemaEqual(
[
{
name: 'DAMAGE_DETECT_MODEL',
required: true,
description: 'model',
default: 'old-model',
},
],
[
{
name: 'DAMAGE_DETECT_MODEL',
required: true,
description: 'model',
default: 'new-model',
},
],
)).toBe(false);
});
});