test: avoid single result filter assertions

This commit is contained in:
Peter Steinberger
2026-05-08 22:19:50 +01:00
parent aa78d9eab9
commit aa34ce41a1
4 changed files with 64 additions and 13 deletions

View File

@@ -55,6 +55,16 @@ const cleanStaleGatewayProcessesSync = vi.hoisted(() =>
);
const defaultProgramArguments = ["node", "-e", "process.exit(0)"];
function countMatching<T>(items: readonly T[], predicate: (item: T) => boolean): number {
let count = 0;
for (const item of items) {
if (predicate(item)) {
count += 1;
}
}
return count;
}
function createDefaultLaunchdEnv(): Record<string, string | undefined> {
return {
HOME: "/Users/test",
@@ -417,9 +427,11 @@ describe("launchd bootstrap repair", () => {
const { serviceId } = expectLaunchctlEnableBootstrapOrder(env);
expect(repair).toEqual({ ok: true, status: "already-loaded" });
expect(state.launchctlCalls.filter((call) => call[0] === "kickstart")).toEqual([
["kickstart", serviceId],
expect(state.launchctlCalls.find((call) => call[0] === "kickstart")).toEqual([
"kickstart",
serviceId,
]);
expect(countMatching(state.launchctlCalls, (call) => call[0] === "kickstart")).toBe(1);
});
it("skips kickstart when already-loaded service is actively running", async () => {
@@ -443,9 +455,11 @@ describe("launchd bootstrap repair", () => {
const { serviceId } = expectLaunchctlEnableBootstrapOrder(env);
expect(repair).toEqual({ ok: true, status: "already-loaded" });
expect(state.launchctlCalls.filter((call) => call[0] === "kickstart")).toEqual([
["kickstart", serviceId],
expect(state.launchctlCalls.find((call) => call[0] === "kickstart")).toEqual([
"kickstart",
serviceId,
]);
expect(countMatching(state.launchctlCalls, (call) => call[0] === "kickstart")).toBe(1);
});
it("keeps genuine bootstrap failures as failures", async () => {

View File

@@ -28,6 +28,16 @@ function makeTempDir() {
const mkdirSafe = mkdirSafeDir;
function countMatching<T>(items: readonly T[], predicate: (item: T) => boolean): number {
let count = 0;
for (const item of items) {
if (predicate(item)) {
count += 1;
}
}
return count;
}
function withOpenClawPackageArgv<T>(packageRoot: string, fn: () => T): T {
mkdirSafe(path.join(packageRoot, "bin"));
fs.writeFileSync(path.join(packageRoot, "package.json"), '{"name":"openclaw"}\n', "utf-8");
@@ -591,9 +601,10 @@ describe("discoverOpenClawPlugins", () => {
}),
);
expect(candidates.filter((candidate) => candidate.idHint === "feishu")).toEqual([
expect(candidates.find((candidate) => candidate.idHint === "feishu")).toEqual(
expect.objectContaining({ origin: "bundled" }),
]);
);
expect(countMatching(candidates, (candidate) => candidate.idHint === "feishu")).toBe(1);
expect(diagnostics).toEqual([
expect.objectContaining({
level: "warn",
@@ -628,9 +639,10 @@ describe("discoverOpenClawPlugins", () => {
}),
);
expect(candidates.filter((candidate) => candidate.idHint === "telegram")).toEqual([
expect(candidates.find((candidate) => candidate.idHint === "telegram")).toEqual(
expect.objectContaining({ origin: "bundled" }),
]);
);
expect(countMatching(candidates, (candidate) => candidate.idHint === "telegram")).toBe(1);
expect(diagnostics).toEqual([
expect.objectContaining({
level: "warn",
@@ -725,13 +737,14 @@ describe("discoverOpenClawPlugins", () => {
}),
);
expect(candidates.filter((candidate) => candidate.idHint === "synology-chat")).toEqual([
expect(candidates.find((candidate) => candidate.idHint === "synology-chat")).toEqual(
expect.objectContaining({
origin: "bundled",
rootDir: fs.realpathSync(bundledPluginDir),
source: fs.realpathSync(bundledEntryPath),
}),
]);
);
expect(countMatching(candidates, (candidate) => candidate.idHint === "synology-chat")).toBe(1);
expect(diagnostics).toEqual([]);
});