91 lines
2.8 KiB
TypeScript
91 lines
2.8 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { issuePairingChallenge } from "./pairing-challenge.js";
|
|
|
|
describe("issuePairingChallenge", () => {
|
|
it("creates and sends a pairing reply when request is newly created", async () => {
|
|
const sent: string[] = [];
|
|
|
|
const result = await issuePairingChallenge({
|
|
channel: "telegram",
|
|
senderId: "123",
|
|
senderIdLine: "Your Telegram user id: 123",
|
|
upsertPairingRequest: async () => ({ code: "ABCD", created: true }),
|
|
sendPairingReply: async (text) => {
|
|
sent.push(text);
|
|
},
|
|
});
|
|
|
|
expect(result).toEqual({ created: true, code: "ABCD" });
|
|
expect(sent).toHaveLength(1);
|
|
expect(sent[0]).toContain("ABCD");
|
|
});
|
|
|
|
it("does not send a reply when request already exists", async () => {
|
|
const sendPairingReply = vi.fn(async () => {});
|
|
|
|
const result = await issuePairingChallenge({
|
|
channel: "telegram",
|
|
senderId: "123",
|
|
senderIdLine: "Your Telegram user id: 123",
|
|
upsertPairingRequest: async () => ({ code: "ABCD", created: false }),
|
|
sendPairingReply,
|
|
});
|
|
|
|
expect(result).toEqual({ created: false });
|
|
expect(sendPairingReply).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("supports custom reply text builder", async () => {
|
|
const sent: string[] = [];
|
|
|
|
await issuePairingChallenge({
|
|
channel: "line",
|
|
senderId: "u1",
|
|
senderIdLine: "Your line id: u1",
|
|
upsertPairingRequest: async () => ({ code: "ZXCV", created: true }),
|
|
buildReplyText: ({ code }) => `custom ${code}`,
|
|
sendPairingReply: async (text) => {
|
|
sent.push(text);
|
|
},
|
|
});
|
|
|
|
expect(sent).toEqual(["custom ZXCV"]);
|
|
});
|
|
|
|
it("calls onCreated and forwards meta to upsert", async () => {
|
|
const onCreated = vi.fn();
|
|
const upsert = vi.fn(async () => ({ code: "1111", created: true }));
|
|
|
|
await issuePairingChallenge({
|
|
channel: "discord",
|
|
senderId: "42",
|
|
senderIdLine: "Your Discord user id: 42",
|
|
meta: { name: "alice" },
|
|
upsertPairingRequest: upsert,
|
|
onCreated,
|
|
sendPairingReply: async () => {},
|
|
});
|
|
|
|
expect(upsert).toHaveBeenCalledWith({ id: "42", meta: { name: "alice" } });
|
|
expect(onCreated).toHaveBeenCalledWith({ code: "1111" });
|
|
});
|
|
|
|
it("captures reply errors through onReplyError", async () => {
|
|
const onReplyError = vi.fn();
|
|
|
|
const result = await issuePairingChallenge({
|
|
channel: "signal",
|
|
senderId: "+1555",
|
|
senderIdLine: "Your Signal sender id: +1555",
|
|
upsertPairingRequest: async () => ({ code: "9999", created: true }),
|
|
sendPairingReply: async () => {
|
|
throw new Error("send failed");
|
|
},
|
|
onReplyError,
|
|
});
|
|
|
|
expect(result).toEqual({ created: true, code: "9999" });
|
|
expect(onReplyError).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|