Files
CyberStrikeAI/web/static/js/skill-description-save.test.cjs
T

34 lines
1.6 KiB
JavaScript

const fs = require('node:fs');
const vm = require('node:vm');
const test = require('node:test');
const assert = require('node:assert/strict');
const source = fs.readFileSync('web/static/js/skills.js', 'utf8');
const start = source.indexOf('async function selectSkillPackageFile(');
const end = source.indexOf('// 编辑skill', start);
function harness(dirty) {
const inputs = {'skill-description': {disabled:false}, 'skill-content': {value:''}};
let calls = 0;
const ctx = {
skillDescriptionDirty:dirty, skillFileDirty:false, skillActivePath:'SKILL.md',
document:{getElementById:id => inputs[id] || null},
_t:x => x, showNotification() {}, renderSkillPackageTree() {}, confirm:() => true,
apiFetch:async () => {calls++; return {ok:true,json:async () => ({content:'text',skill:{content:'body'}})};},
};
vm.createContext(ctx);
vm.runInContext(source.slice(start,end),ctx);
return {ctx,inputs,calls:() => calls};
}
test('auxiliary file editing disables description and returning to SKILL.md enables it', async () => {
const {ctx,inputs} = harness(false);
await ctx.selectSkillPackageFile('test','references/example.md',{});
assert.equal(inputs['skill-description'].disabled,true);
await ctx.selectSkillPackageFile('test','SKILL.md',{});
assert.equal(inputs['skill-description'].disabled,false);
});
test('unsaved description cannot disappear when switching files', async () => {
const h = harness(true);
await h.ctx.selectSkillPackageFile('test','references/example.md',{});
assert.equal(h.ctx.skillActivePath,'SKILL.md');
assert.equal(h.calls(),0);
});