mirror of
http://192.168.0.88:13333/lywsvip/openclaw-zero-token.git
synced 2026-05-08 08:08:33 +08:00
Major upgrade from e26988a38 to upstream v2026.3.28 (f9b107928).
Key changes:
- Upstream src/, ui/, extensions/ (89 bundled extensions)
- Zero-token web providers preserved in src/zero-token/
- AskOnce plugin restored and registered as CLI command
- Added missing packages: @anthropic-ai/vertex-sdk, @modelcontextprotocol/sdk
- Fixed tsconfig rootDir, skipLibCheck for plugin-sdk DTS build
- Added askonce to bundled plugin metadata and package.json exports
- Fixed AskOnce CLI command registration (missing commands metadata)
- Restored AskOnce adapter imports (correct 5-level relative paths)
- Removed stale migration artifacts from root directory
72 lines
3.1 KiB
TypeScript
72 lines
3.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { hasPollCreationParams, resolveTelegramPollVisibility } from "./poll-params.js";
|
|
|
|
describe("poll params", () => {
|
|
it("does not treat explicit false booleans as poll creation params", () => {
|
|
expect(
|
|
hasPollCreationParams({
|
|
pollMulti: false,
|
|
pollAnonymous: false,
|
|
pollPublic: false,
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it.each([{ key: "pollMulti" }, { key: "pollAnonymous" }, { key: "pollPublic" }])(
|
|
"treats $key=true as poll creation intent",
|
|
({ key }) => {
|
|
expect(
|
|
hasPollCreationParams({
|
|
[key]: true,
|
|
}),
|
|
).toBe(true);
|
|
},
|
|
);
|
|
|
|
it("treats non-zero finite numeric poll params as poll creation intent", () => {
|
|
expect(hasPollCreationParams({ pollDurationSeconds: 60 })).toBe(true);
|
|
expect(hasPollCreationParams({ pollDurationSeconds: "60" })).toBe(true);
|
|
expect(hasPollCreationParams({ pollDurationSeconds: "1e3" })).toBe(true);
|
|
expect(hasPollCreationParams({ pollDurationHours: -1 })).toBe(true);
|
|
expect(hasPollCreationParams({ pollDurationSeconds: "-5" })).toBe(true);
|
|
expect(hasPollCreationParams({ pollDurationHours: Number.NaN })).toBe(false);
|
|
expect(hasPollCreationParams({ pollDurationSeconds: Infinity })).toBe(false);
|
|
expect(hasPollCreationParams({ pollDurationSeconds: "60abc" })).toBe(false);
|
|
});
|
|
|
|
it("does not treat zero-valued numeric poll params as poll creation intent", () => {
|
|
// Zero values are typically defaults/unset values from tool schemas,
|
|
// not intentional poll creation. Fixes #52118.
|
|
expect(hasPollCreationParams({ pollDurationHours: 0 })).toBe(false);
|
|
expect(hasPollCreationParams({ pollDurationSeconds: 0 })).toBe(false);
|
|
expect(hasPollCreationParams({ pollDurationHours: "0" })).toBe(false);
|
|
expect(hasPollCreationParams({ poll_duration_seconds: 0 })).toBe(false);
|
|
expect(hasPollCreationParams({ poll_duration_hours: "0" })).toBe(false);
|
|
});
|
|
|
|
it("treats string-encoded boolean poll params as poll creation intent when true", () => {
|
|
expect(hasPollCreationParams({ pollPublic: "true" })).toBe(true);
|
|
expect(hasPollCreationParams({ pollAnonymous: "false" })).toBe(false);
|
|
});
|
|
|
|
it("treats string poll options as poll creation intent", () => {
|
|
expect(hasPollCreationParams({ pollOption: "Yes" })).toBe(true);
|
|
});
|
|
|
|
it("detects snake_case poll fields as poll creation intent", () => {
|
|
expect(hasPollCreationParams({ poll_question: "Lunch?" })).toBe(true);
|
|
expect(hasPollCreationParams({ poll_option: ["Pizza", "Sushi"] })).toBe(true);
|
|
expect(hasPollCreationParams({ poll_duration_seconds: "60" })).toBe(true);
|
|
expect(hasPollCreationParams({ poll_public: "true" })).toBe(true);
|
|
});
|
|
|
|
it("resolves telegram poll visibility flags", () => {
|
|
expect(resolveTelegramPollVisibility({ pollAnonymous: true })).toBe(true);
|
|
expect(resolveTelegramPollVisibility({ pollPublic: true })).toBe(false);
|
|
expect(resolveTelegramPollVisibility({})).toBeUndefined();
|
|
expect(() => resolveTelegramPollVisibility({ pollAnonymous: true, pollPublic: true })).toThrow(
|
|
/mutually exclusive/i,
|
|
);
|
|
});
|
|
});
|