Files
openclaw/test/scripts/extension-source-classifier.test.ts
Peter Steinberger c70aee247e refactor(scripts): migrate JavaScript tools to TypeScript (#121005)
* refactor(scripts): migrate JavaScript tools to TypeScript

* fix(ci): keep changed-scope preflight zero-install

* fix(ci): preserve zero-install script owners

* fix(ci): complete script migration follow-through

* fix(release): keep stable closeout zero-install

* fix(scripts): preserve standalone execution boundaries

* fix(scripts): repair standalone loader boundaries

* fix(scripts): normalize gateway observation ids

* fix(scripts): keep Docker packager standalone

* test(scripts): preserve rebase cleanup helpers

* test(sessions): use tracked temp directory
2026-08-09 07:21:35 -07:00

80 lines
2.4 KiB
TypeScript

// Extension Source Classifier tests cover extension source classifier script behavior.
import { describe, expect, it } from "vitest";
import { classifyBundledExtensionSourcePath } from "../../scripts/lib/extension-source-classifier.mts";
function expectClassification(
filePath: string,
expected: {
isCodeFile: boolean;
isRuntimeApiBarrel: boolean;
isPublicApiBarrel: boolean;
isTestLike: boolean;
isInfraArtifact: boolean;
isProductionSource: boolean;
},
) {
expect(classifyBundledExtensionSourcePath(filePath)).toEqual({
normalizedPath: filePath,
...expected,
});
}
describe("classifyBundledExtensionSourcePath", () => {
it("treats runtime barrels as non-production source", () => {
expectClassification("extensions/msteams/runtime-api.ts", {
isCodeFile: true,
isRuntimeApiBarrel: true,
isPublicApiBarrel: false,
isTestLike: false,
isInfraArtifact: false,
isProductionSource: false,
});
});
it("treats extension tests and fixtures as test-like across naming styles", () => {
expectClassification("extensions/feishu/src/monitor-handler.test.ts", {
isCodeFile: true,
isRuntimeApiBarrel: false,
isPublicApiBarrel: false,
isTestLike: true,
isInfraArtifact: false,
isProductionSource: false,
});
expectClassification("extensions/discord/src/test-fixtures/message.ts", {
isCodeFile: true,
isRuntimeApiBarrel: false,
isPublicApiBarrel: false,
isTestLike: true,
isInfraArtifact: false,
isProductionSource: false,
});
expectClassification("extensions/telegram/src/bot.test-harness.ts", {
isCodeFile: true,
isRuntimeApiBarrel: false,
isPublicApiBarrel: false,
isTestLike: true,
isInfraArtifact: false,
isProductionSource: false,
});
expectClassification("extensions/telegram/src/target-writeback.test-shared.ts", {
isCodeFile: true,
isRuntimeApiBarrel: false,
isPublicApiBarrel: false,
isTestLike: true,
isInfraArtifact: false,
isProductionSource: false,
});
});
it("keeps normal extension production files eligible for guardrails", () => {
expectClassification("extensions/msteams/src/send.ts", {
isCodeFile: true,
isRuntimeApiBarrel: false,
isPublicApiBarrel: false,
isTestLike: false,
isInfraArtifact: false,
isProductionSource: true,
});
});
});