5e7812c352
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
45 lines
1.8 KiB
TypeScript
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);
|
|
}
|
|
});
|
|
});
|