test(web): dedupe creds-update trigger helper in session tests

This commit is contained in:
Peter Steinberger
2026-02-19 07:52:27 +00:00
parent 18d4ad6aab
commit a82a41236e

View File

@@ -9,6 +9,18 @@ const { createWaSocket, formatError, logWebSelfId, waitForWaConnection } =
await import("./session.js");
const useMultiFileAuthStateMock = vi.mocked(baileys.useMultiFileAuthState);
async function flushCredsUpdate() {
await new Promise<void>((resolve) => setImmediate(resolve));
}
async function emitCredsUpdateAndReadSaveCreds() {
const sock = getLastSocket();
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
sock.ev.emit("creds.update", {});
await flushCredsUpdate();
return saveCreds;
}
function mockCredsJsonSpies(readContents: string) {
const credsSuffix = path.join(".openclaw", "credentials", "whatsapp", "default", "creds.json");
const copySpy = vi.spyOn(fsSync, "copyFileSync").mockImplementation(() => {});
@@ -69,7 +81,7 @@ describe("web session", () => {
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
// trigger creds.update listener
sock.ev.emit("creds.update", {});
await new Promise<void>((resolve) => setImmediate(resolve));
await flushCredsUpdate();
expect(saveCreds).toHaveBeenCalled();
});
@@ -145,11 +157,7 @@ describe("web session", () => {
const creds = mockCredsJsonSpies("{");
await createWaSocket(false, false);
const sock = getLastSocket();
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
sock.ev.emit("creds.update", {});
await new Promise<void>((resolve) => setImmediate(resolve));
const saveCreds = await emitCredsUpdateAndReadSaveCreds();
expect(creds.copySpy).not.toHaveBeenCalled();
expect(saveCreds).toHaveBeenCalled();
@@ -182,14 +190,14 @@ describe("web session", () => {
sock.ev.emit("creds.update", {});
sock.ev.emit("creds.update", {});
await new Promise<void>((resolve) => setImmediate(resolve));
await flushCredsUpdate();
expect(inFlight).toBe(1);
(release as (() => void) | null)?.();
// let both queued saves complete
await new Promise<void>((resolve) => setImmediate(resolve));
await new Promise<void>((resolve) => setImmediate(resolve));
await flushCredsUpdate();
await flushCredsUpdate();
expect(saveCreds).toHaveBeenCalledTimes(2);
expect(maxInFlight).toBe(1);
@@ -207,11 +215,7 @@ describe("web session", () => {
);
await createWaSocket(false, false);
const sock = getLastSocket();
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
sock.ev.emit("creds.update", {});
await new Promise<void>((resolve) => setImmediate(resolve));
const saveCreds = await emitCredsUpdateAndReadSaveCreds();
expect(creds.copySpy).toHaveBeenCalledTimes(1);
const args = creds.copySpy.mock.calls[0] ?? [];