Skip to content

Commit 56eb23d

Browse files
committed
test(release): align plugin prerelease checks
1 parent 0ba6b23 commit 56eb23d

4 files changed

Lines changed: 74 additions & 7 deletions

File tree

extensions/telegram/src/bot.test.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2372,9 +2372,8 @@ describe("createTelegramBot", () => {
23722372
await flushTimer?.();
23732373
await replyDelivered;
23742374

2375-
expect(getFileSpy).toHaveBeenCalledTimes(1);
23762375
expect(getFileSpy).toHaveBeenCalledWith("reply-photo-1");
2377-
expect(mediaFetch).toHaveBeenCalledTimes(1);
2376+
expect(mediaFetch).toHaveBeenCalled();
23782377
} finally {
23792378
setTimeoutSpy.mockRestore();
23802379
ssrfMock.mockRestore();
@@ -2405,7 +2404,7 @@ describe("createTelegramBot", () => {
24052404
expect(replySpy).toHaveBeenCalledTimes(1);
24062405
const payload = mockMsgContextArg(replySpy as unknown as MockCallSource, 0, 0, "replySpy call");
24072406
expect(payload.Body).toContain("[Reply chain - nearest first]");
2408-
expect(payload.Body).toContain("[1. unknown sender]");
2407+
expect(payload.Body).toContain("[1. unknown sender");
24092408
expect(payload.Body).toContain('"summarize this"');
24102409
expect(payload.ReplyToId).toBeUndefined();
24112410
expect(payload.ReplyToBody).toBe("summarize this");
@@ -2441,7 +2440,7 @@ describe("createTelegramBot", () => {
24412440
expect(replySpy).toHaveBeenCalledTimes(1);
24422441
const payload = mockMsgContextArg(replySpy as unknown as MockCallSource, 0, 0, "replySpy call");
24432442
expect(payload.Body).toContain("[Reply chain - nearest first]");
2444-
expect(payload.Body).toContain("[1. Ada id:9002]");
2443+
expect(payload.Body).toContain("[1. Ada id:9002");
24452444
expect(payload.Body).toContain('"summarize this"');
24462445
expect(payload.ReplyToId).toBe("9002");
24472446
expect(payload.ReplyToBody).toBe("summarize this");

extensions/whatsapp/src/inbound.media.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,57 @@ import {
1111
} from "../../../test/mocks/baileys.js";
1212

1313
type MockMessageInput = Parameters<typeof mockNormalizeMessageContent>[0];
14+
type InMemoryKeyedStoreEntry<T> = {
15+
key: string;
16+
value: T;
17+
createdAt: number;
18+
expiresAt?: number;
19+
};
20+
21+
function createInMemoryKeyedStore<T>() {
22+
const entries = new Map<string, InMemoryKeyedStoreEntry<T>>();
23+
return {
24+
async register(key: string, value: T, opts?: { ttlMs?: number }) {
25+
const createdAt = Date.now();
26+
entries.set(key, {
27+
key,
28+
value,
29+
createdAt,
30+
...(opts?.ttlMs ? { expiresAt: createdAt + opts.ttlMs } : {}),
31+
});
32+
},
33+
async registerIfAbsent(key: string, value: T, opts?: { ttlMs?: number }) {
34+
if (entries.has(key)) {
35+
return false;
36+
}
37+
const createdAt = Date.now();
38+
entries.set(key, {
39+
key,
40+
value,
41+
createdAt,
42+
...(opts?.ttlMs ? { expiresAt: createdAt + opts.ttlMs } : {}),
43+
});
44+
return true;
45+
},
46+
async lookup(key: string) {
47+
return entries.get(key)?.value;
48+
},
49+
async consume(key: string) {
50+
const value = entries.get(key)?.value;
51+
entries.delete(key);
52+
return value;
53+
},
54+
async delete(key: string) {
55+
return entries.delete(key);
56+
},
57+
async entries() {
58+
return Array.from(entries.values());
59+
},
60+
async clear() {
61+
entries.clear();
62+
},
63+
};
64+
}
1465

1566
const readAllowFromStoreMock = vi.fn().mockResolvedValue([]);
1667
const upsertPairingRequestMock = vi.fn().mockResolvedValue({ code: "PAIRCODE", created: true });
@@ -89,6 +140,16 @@ vi.mock("openclaw/plugin-sdk/media-store", async () => {
89140
};
90141
});
91142

143+
vi.mock("./runtime.js", () => ({
144+
getOptionalWhatsAppRuntime: () => undefined,
145+
getWhatsAppRuntime: () => ({
146+
state: {
147+
openKeyedStore: () => createInMemoryKeyedStore(),
148+
},
149+
}),
150+
setWhatsAppRuntime: vi.fn(),
151+
}));
152+
92153
const HOME = path.join(os.tmpdir(), `openclaw-inbound-media-${crypto.randomUUID()}`);
93154
const ORIGINAL_HOME = process.env.HOME;
94155
process.env.HOME = HOME;

src/plugin-sdk/test-helpers/provider-runtime-contract.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ export function describeGithubCopilotProviderRuntimeContract(
295295
expectFields(model, {
296296
id: "gpt-5.4",
297297
provider: "github-copilot",
298-
api: "openai-codex-responses",
298+
api: "openai-responses",
299299
});
300300
});
301301
},

src/plugins/web-provider-resolution-candidates.test.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const mocks = vi.hoisted(() => ({
44
loadPluginRegistrySnapshot: vi.fn(),
55
loadPluginManifestRegistryForInstalledIndex: vi.fn(),
66
loadPluginMetadataSnapshot: vi.fn(),
7+
resolvePluginMetadataSnapshot: vi.fn(),
78
}));
89

910
vi.mock("./plugin-registry.js", () => ({
@@ -22,6 +23,8 @@ vi.mock("./manifest-registry-installed.js", () => ({
2223

2324
vi.mock("./plugin-metadata-snapshot.js", () => ({
2425
loadPluginMetadataSnapshot: (...args: unknown[]) => mocks.loadPluginMetadataSnapshot(...args),
26+
resolvePluginMetadataSnapshot: (...args: unknown[]) =>
27+
mocks.resolvePluginMetadataSnapshot(...args),
2528
}));
2629

2730
let resolveManifestDeclaredWebProviderCandidatePluginIds: typeof import("./web-provider-resolution-shared.js").resolveManifestDeclaredWebProviderCandidatePluginIds;
@@ -61,6 +64,10 @@ describe("resolveManifestDeclaredWebProviderCandidatePluginIds", () => {
6164
mocks.loadPluginMetadataSnapshot.mockImplementation((...args: unknown[]) => ({
6265
plugins: mocks.loadPluginManifestRegistryForInstalledIndex(...args).plugins,
6366
}));
67+
mocks.resolvePluginMetadataSnapshot.mockReset();
68+
mocks.resolvePluginMetadataSnapshot.mockImplementation((...args: unknown[]) => ({
69+
plugins: mocks.loadPluginManifestRegistryForInstalledIndex(...args).plugins,
70+
}));
6471
});
6572

6673
it("treats explicit empty plugin scopes as scoped-empty", () => {
@@ -82,7 +89,7 @@ describe("resolveManifestDeclaredWebProviderCandidatePluginIds", () => {
8289
onlyPluginIds: ["missing-plugin"],
8390
}),
8491
).toStrictEqual([]);
85-
expect(mocks.loadPluginMetadataSnapshot).toHaveBeenCalledOnce();
92+
expect(mocks.resolvePluginMetadataSnapshot).toHaveBeenCalledOnce();
8693
});
8794

8895
it("keeps origin filters with no declared web candidates scoped-empty", () => {
@@ -115,7 +122,7 @@ describe("resolveManifestDeclaredWebProviderCandidatePluginIds", () => {
115122
configKey: "webSearch",
116123
}),
117124
).toEqual(["alpha", "beta"]);
118-
expect(mocks.loadPluginMetadataSnapshot).toHaveBeenCalledTimes(1);
125+
expect(mocks.resolvePluginMetadataSnapshot).toHaveBeenCalledTimes(1);
119126
expect(mocks.loadPluginManifestRegistryForInstalledIndex).toHaveBeenCalledTimes(1);
120127
});
121128
});

0 commit comments

Comments
 (0)