Files
claw3d/tests/unit/packagedSkills.test.ts
T
Luke The Dev 5e7812c352 Skills (#50)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
2026-03-23 11:44:25 -05:00

45 lines
1.8 KiB
TypeScript

import { readFileSync, readdirSync } from "node:fs";
import path from "node:path";
import { describe, expect, it } from "vitest";
import { buildPackagedSkillStatusEntry, listPackagedSkills } from "@/lib/skills/catalog";
import { resolveSkillMarketplaceMetadata } from "@/lib/skills/marketplace";
import { readPackagedSkillFiles } from "@/lib/skills/packaged";
const resolveAssetDir = (packageId: string) => path.join(process.cwd(), "assets/skills", packageId);
describe("packaged skills", () => {
it("keeps packaged skill files synchronized with the asset source files", () => {
for (const packagedSkill of listPackagedSkills()) {
const assetDir = resolveAssetDir(packagedSkill.packageId);
const expectedFiles = readdirSync(assetDir, { withFileTypes: true })
.filter((entry) => entry.isFile())
.map((entry) => entry.name)
.sort();
const packagedFiles = readPackagedSkillFiles(packagedSkill.packageId);
const packagedRelativePaths = packagedFiles.map((file) => file.relativePath).sort();
expect(packagedRelativePaths).toEqual(expectedFiles);
for (const file of packagedFiles) {
const assetContent = readFileSync(path.join(assetDir, file.relativePath), "utf8");
expect(file.content).toBe(assetContent);
}
}
});
it("exposes creator attribution and hides fake popularity stats for packaged skills", () => {
for (const packagedSkill of listPackagedSkills()) {
expect(packagedSkill.creatorName).toBeTruthy();
expect(packagedSkill.creatorUrl).toBeTruthy();
const metadata = resolveSkillMarketplaceMetadata(buildPackagedSkillStatusEntry(packagedSkill));
expect(metadata.poweredByName).toBe(packagedSkill.creatorName);
expect(metadata.poweredByUrl).toBe(packagedSkill.creatorUrl);
expect(metadata.hideStats).toBe(true);
}
});
});