mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 07:27:28 +00:00
test(web): dedupe creds-update trigger helper in session tests
This commit is contained in:
@@ -9,6 +9,18 @@ const { createWaSocket, formatError, logWebSelfId, waitForWaConnection } =
|
|||||||
await import("./session.js");
|
await import("./session.js");
|
||||||
const useMultiFileAuthStateMock = vi.mocked(baileys.useMultiFileAuthState);
|
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) {
|
function mockCredsJsonSpies(readContents: string) {
|
||||||
const credsSuffix = path.join(".openclaw", "credentials", "whatsapp", "default", "creds.json");
|
const credsSuffix = path.join(".openclaw", "credentials", "whatsapp", "default", "creds.json");
|
||||||
const copySpy = vi.spyOn(fsSync, "copyFileSync").mockImplementation(() => {});
|
const copySpy = vi.spyOn(fsSync, "copyFileSync").mockImplementation(() => {});
|
||||||
@@ -69,7 +81,7 @@ describe("web session", () => {
|
|||||||
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
|
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
|
||||||
// trigger creds.update listener
|
// trigger creds.update listener
|
||||||
sock.ev.emit("creds.update", {});
|
sock.ev.emit("creds.update", {});
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
await flushCredsUpdate();
|
||||||
expect(saveCreds).toHaveBeenCalled();
|
expect(saveCreds).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -145,11 +157,7 @@ describe("web session", () => {
|
|||||||
const creds = mockCredsJsonSpies("{");
|
const creds = mockCredsJsonSpies("{");
|
||||||
|
|
||||||
await createWaSocket(false, false);
|
await createWaSocket(false, false);
|
||||||
const sock = getLastSocket();
|
const saveCreds = await emitCredsUpdateAndReadSaveCreds();
|
||||||
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
|
|
||||||
|
|
||||||
sock.ev.emit("creds.update", {});
|
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
||||||
|
|
||||||
expect(creds.copySpy).not.toHaveBeenCalled();
|
expect(creds.copySpy).not.toHaveBeenCalled();
|
||||||
expect(saveCreds).toHaveBeenCalled();
|
expect(saveCreds).toHaveBeenCalled();
|
||||||
@@ -182,14 +190,14 @@ describe("web session", () => {
|
|||||||
sock.ev.emit("creds.update", {});
|
sock.ev.emit("creds.update", {});
|
||||||
sock.ev.emit("creds.update", {});
|
sock.ev.emit("creds.update", {});
|
||||||
|
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
await flushCredsUpdate();
|
||||||
expect(inFlight).toBe(1);
|
expect(inFlight).toBe(1);
|
||||||
|
|
||||||
(release as (() => void) | null)?.();
|
(release as (() => void) | null)?.();
|
||||||
|
|
||||||
// let both queued saves complete
|
// let both queued saves complete
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
await flushCredsUpdate();
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
await flushCredsUpdate();
|
||||||
|
|
||||||
expect(saveCreds).toHaveBeenCalledTimes(2);
|
expect(saveCreds).toHaveBeenCalledTimes(2);
|
||||||
expect(maxInFlight).toBe(1);
|
expect(maxInFlight).toBe(1);
|
||||||
@@ -207,11 +215,7 @@ describe("web session", () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await createWaSocket(false, false);
|
await createWaSocket(false, false);
|
||||||
const sock = getLastSocket();
|
const saveCreds = await emitCredsUpdateAndReadSaveCreds();
|
||||||
const saveCreds = (await useMultiFileAuthStateMock.mock.results[0]?.value)?.saveCreds;
|
|
||||||
|
|
||||||
sock.ev.emit("creds.update", {});
|
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
||||||
|
|
||||||
expect(creds.copySpy).toHaveBeenCalledTimes(1);
|
expect(creds.copySpy).toHaveBeenCalledTimes(1);
|
||||||
const args = creds.copySpy.mock.calls[0] ?? [];
|
const args = creds.copySpy.mock.calls[0] ?? [];
|
||||||
|
|||||||
Reference in New Issue
Block a user