Files
moltbot/test/qa-convex-credential-payload-validation.test.ts
2026-05-10 15:10:39 +05:30

163 lines
5.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
CredentialPayloadValidationError,
normalizeCredentialPayloadForKind,
} from "../qa/convex-credential-broker/convex/payload-validation.js";
describe("QA Convex credential payload validation", () => {
it("normalizes Discord credential payloads", () => {
expect(
normalizeCredentialPayloadForKind("discord", {
guildId: " 1496962067029299350 ",
channelId: "1496962068027281447",
voiceChannelId: "1496962069025263624",
driverBotToken: " driver-token ",
sutBotToken: "sut-token",
sutApplicationId: "1496963665587601428",
ignored: true,
}),
).toEqual({
guildId: "1496962067029299350",
channelId: "1496962068027281447",
voiceChannelId: "1496962069025263624",
driverBotToken: "driver-token",
sutBotToken: "sut-token",
sutApplicationId: "1496963665587601428",
});
});
it("rejects malformed Discord snowflakes", () => {
expect(() =>
normalizeCredentialPayloadForKind("discord", {
guildId: "not-a-snowflake",
channelId: "1496962068027281447",
driverBotToken: "driver-token",
sutBotToken: "sut-token",
sutApplicationId: "1496963665587601428",
}),
).toThrow(CredentialPayloadValidationError);
});
it("rejects empty Discord bot tokens", () => {
expect(() =>
normalizeCredentialPayloadForKind("discord", {
guildId: "1496962067029299350",
channelId: "1496962068027281447",
driverBotToken: " ",
sutBotToken: "sut-token",
sutApplicationId: "1496963665587601428",
}),
).toThrow(/driverBotToken/u);
});
it("rejects malformed optional Discord voice channel ids", () => {
expect(() =>
normalizeCredentialPayloadForKind("discord", {
guildId: "1496962067029299350",
channelId: "1496962068027281447",
voiceChannelId: "voice-channel",
driverBotToken: "driver-token",
sutBotToken: "sut-token",
sutApplicationId: "1496963665587601428",
}),
).toThrow(/voiceChannelId/u);
});
it("keeps unknown credential kinds pass-through-compatible", () => {
const payload = { anything: true };
expect(normalizeCredentialPayloadForKind("future-kind", payload)).toBe(payload);
});
it("normalizes Telegram user credential payloads", () => {
const sha256 = "a".repeat(64);
expect(
normalizeCredentialPayloadForKind("telegram-user", {
groupId: " -100123 ",
sutToken: " sut-token ",
testerUserId: " 8709353529 ",
testerUsername: " OpenClawTestUser ",
telegramApiId: " 123456 ",
telegramApiHash: " api-hash ",
tdlibDatabaseEncryptionKey: " db-key ",
tdlibArchiveBase64: " tdlib-archive ",
tdlibArchiveSha256: sha256.toUpperCase(),
desktopTdataArchiveBase64: " desktop-archive ",
desktopTdataArchiveSha256: sha256,
ignored: true,
}),
).toEqual({
groupId: "-100123",
sutToken: "sut-token",
testerUserId: "8709353529",
testerUsername: "OpenClawTestUser",
telegramApiId: "123456",
telegramApiHash: "api-hash",
tdlibDatabaseEncryptionKey: "db-key",
tdlibArchiveBase64: "tdlib-archive",
tdlibArchiveSha256: sha256,
desktopTdataArchiveBase64: "desktop-archive",
desktopTdataArchiveSha256: sha256,
});
});
it("rejects malformed Telegram user credential payloads", () => {
const validPayload = {
groupId: "-100123",
sutToken: "sut-token",
testerUserId: "8709353529",
testerUsername: "OpenClawTestUser",
telegramApiId: "123456",
telegramApiHash: "api-hash",
tdlibDatabaseEncryptionKey: "db-key",
tdlibArchiveBase64: "tdlib-archive",
tdlibArchiveSha256: "a".repeat(64),
desktopTdataArchiveBase64: "desktop-archive",
desktopTdataArchiveSha256: "b".repeat(64),
};
expect(() =>
normalizeCredentialPayloadForKind("telegram-user", {
...validPayload,
testerUserId: "tester",
}),
).toThrow(/testerUserId/u);
expect(() =>
normalizeCredentialPayloadForKind("telegram-user", {
...validPayload,
tdlibArchiveSha256: "not-sha",
}),
).toThrow(/tdlibArchiveSha256/u);
});
it("normalizes WhatsApp credential payloads", () => {
expect(
normalizeCredentialPayloadForKind("whatsapp", {
driverPhoneE164: "+15550000001",
sutPhoneE164: "+15550000002",
driverAuthArchiveBase64: "driver-archive",
sutAuthArchiveBase64: "sut-archive",
groupJid: "120363000000000000@g.us",
}),
).toEqual({
driverPhoneE164: "+15550000001",
sutPhoneE164: "+15550000002",
driverAuthArchiveBase64: "driver-archive",
sutAuthArchiveBase64: "sut-archive",
groupJid: "120363000000000000@g.us",
});
});
it("rejects WhatsApp payloads with duplicate phone numbers", () => {
expect(() =>
normalizeCredentialPayloadForKind("whatsapp", {
driverPhoneE164: "+15550000001",
sutPhoneE164: "+15550000001",
driverAuthArchiveBase64: "driver-archive",
sutAuthArchiveBase64: "sut-archive",
}),
).toThrow("distinct driverPhoneE164 and sutPhoneE164");
});
});