Spaces:
Sleeping
Sleeping
| import { beforeEach, describe, expect, it, vi } from "vitest"; | |
| vi.mock("./session.js", () => { | |
| const createWaSocket = vi.fn( | |
| async (_printQr: boolean, _verbose: boolean, opts?: { onQr?: (qr: string) => void }) => { | |
| const sock = { ws: { close: vi.fn() } }; | |
| if (opts?.onQr) { | |
| setImmediate(() => opts.onQr?.("qr-data")); | |
| } | |
| return sock; | |
| }, | |
| ); | |
| const waitForWaConnection = vi.fn(); | |
| const formatError = vi.fn((err: unknown) => `formatted:${String(err)}`); | |
| const getStatusCode = vi.fn( | |
| (err: unknown) => | |
| (err as { output?: { statusCode?: number } })?.output?.statusCode ?? | |
| (err as { status?: number })?.status, | |
| ); | |
| const webAuthExists = vi.fn(async () => false); | |
| const readWebSelfId = vi.fn(() => ({ e164: null, jid: null })); | |
| const logoutWeb = vi.fn(async () => true); | |
| return { | |
| createWaSocket, | |
| waitForWaConnection, | |
| formatError, | |
| getStatusCode, | |
| webAuthExists, | |
| readWebSelfId, | |
| logoutWeb, | |
| }; | |
| }); | |
| vi.mock("./qr-image.js", () => ({ | |
| renderQrPngBase64: vi.fn(async () => "base64"), | |
| })); | |
| const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr.js"); | |
| const { createWaSocket, waitForWaConnection, logoutWeb } = await import("./session.js"); | |
| describe("login-qr", () => { | |
| beforeEach(() => { | |
| vi.clearAllMocks(); | |
| }); | |
| it("restarts login once on status 515 and completes", async () => { | |
| waitForWaConnection | |
| .mockRejectedValueOnce({ output: { statusCode: 515 } }) | |
| .mockResolvedValueOnce(undefined); | |
| const start = await startWebLoginWithQr({ timeoutMs: 5000 }); | |
| expect(start.qrDataUrl).toBe("data:image/png;base64,base64"); | |
| const result = await waitForWebLogin({ timeoutMs: 5000 }); | |
| expect(result.connected).toBe(true); | |
| expect(createWaSocket).toHaveBeenCalledTimes(2); | |
| expect(logoutWeb).not.toHaveBeenCalled(); | |
| }); | |
| }); | |