test(lint): remove non-null assertions in skills loader tests

This commit is contained in:
William Valentin
2026-02-15 22:33:37 -08:00
parent 021435ac27
commit 06ff94e197
3 changed files with 47 additions and 39 deletions
+40 -33
View File
@@ -118,6 +118,13 @@ describe('loadSkill', () => {
// Objective: verify that a single skill directory is correctly loaded into a Skill object.
let tmpDir: string;
function assertSkill(skill: ReturnType<typeof loadSkill>): NonNullable<ReturnType<typeof loadSkill>> {
if (!skill) {
throw new Error('Expected skill to be loaded');
}
return skill;
}
afterEach(() => {
if (tmpDir) {
rmSync(tmpDir, { recursive: true, force: true });
@@ -138,12 +145,12 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.manifest.name).toBe('my-skill');
expect(skill!.manifest.description).toBe('A test skill');
expect(skill!.manifest.version).toBe('1.2.0');
expect(skill!.instructions).toBe('# My Skill\nDo something useful.');
expect(skill!.available).toBe(true);
expect(skill!.directory).toBe(skillDir);
expect(assertSkill(skill).manifest.name).toBe('my-skill');
expect(assertSkill(skill).manifest.description).toBe('A test skill');
expect(assertSkill(skill).manifest.version).toBe('1.2.0');
expect(assertSkill(skill).instructions).toBe('# My Skill\nDo something useful.');
expect(assertSkill(skill).available).toBe(true);
expect(assertSkill(skill).directory).toBe(skillDir);
});
it('returns null when SKILL.md is missing', () => {
@@ -171,10 +178,10 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'workspace');
expect(skill).not.toBeNull();
expect(skill!.manifest.name).toBe('inferred-skill');
expect(skill!.manifest.description).toBe('A useful skill description');
expect(skill!.manifest.version).toBe('0.0.0');
expect(skill!.manifest.tier).toBe('workspace');
expect(assertSkill(skill).manifest.name).toBe('inferred-skill');
expect(assertSkill(skill).manifest.description).toBe('A useful skill description');
expect(assertSkill(skill).manifest.version).toBe('0.0.0');
expect(assertSkill(skill).manifest.tier).toBe('workspace');
});
it('marks skill unavailable when manifest.json has invalid JSON', () => {
@@ -188,8 +195,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_json|manifest\.invalid_json/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_json|manifest\.invalid_json/i);
});
it('marks skill unavailable when manifest.json is missing required fields', () => {
@@ -203,8 +210,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/manifest\.missing_required_fields/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/manifest\.missing_required_fields/i);
});
it('marks skill unavailable when manifest.json has invalid permissions specification', () => {
@@ -227,8 +234,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_permissions/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_permissions/i);
});
it('marks skill unavailable when skill directory contains a symlink', () => {
@@ -243,8 +250,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/fs\.symlink/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/fs\.symlink/i);
});
it('marks skill unavailable when SKILL.md contains prompt injection markers', () => {
@@ -256,8 +263,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/prompt\./i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/prompt\./i);
});
it('marks skill unavailable when a file exceeds the max size threshold', () => {
@@ -272,8 +279,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/fs\.oversize/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/fs\.oversize/i);
});
it('strips markdown heading markers from inferred description', () => {
@@ -286,7 +293,7 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.manifest.description).toBe('Heading Skill Title');
expect(assertSkill(skill).manifest.description).toBe('Heading Skill Title');
});
it('sets tier from the argument, not from manifest content', () => {
@@ -303,7 +310,7 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'managed');
expect(skill).not.toBeNull();
expect(skill!.manifest.tier).toBe('managed');
expect(assertSkill(skill).manifest.tier).toBe('managed');
});
it('accepts valid manifest installers definitions', () => {
@@ -329,7 +336,7 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.manifest.installers).toHaveLength(4);
expect(assertSkill(skill).manifest.installers).toHaveLength(4);
});
it('marks skill unavailable when installers is not an array', () => {
@@ -350,8 +357,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_installers/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_installers/i);
});
it('marks skill unavailable when installer entries are invalid', () => {
@@ -375,8 +382,8 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_installers/i);
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons?.join('\n')).toMatch(/manifest\.invalid_installers/i);
});
it('marks skill unavailable when requirements are not met', () => {
@@ -398,10 +405,10 @@ describe('loadSkill', () => {
const skill = loadSkill(skillDir, 'bundled');
expect(skill).not.toBeNull();
expect(skill!.available).toBe(false);
expect(skill!.unavailableReasons).toBeDefined();
expect(skill!.unavailableReasons!.length).toBeGreaterThan(0);
expect(skill!.unavailableReasons![0]).toContain('nonexistent-binary-xyz123');
expect(assertSkill(skill).available).toBe(false);
expect(assertSkill(skill).unavailableReasons).toBeDefined();
expect((assertSkill(skill).unavailableReasons ?? []).length).toBeGreaterThan(0);
expect((assertSkill(skill).unavailableReasons ?? [])[0]).toContain('nonexistent-binary-xyz123');
});
});