2025-11-05 17:04:23 -03:00

54 lines
1.3 KiB
JavaScript

import { EventEmitter } from "@xmpp/events";
import Connection from "../index.js";
test("stop", async () => {
const conn = new Connection();
const close_el = {};
const spy_disconnect = jest
.spyOn(conn, "disconnect")
.mockImplementation(async () => {
return close_el;
});
const spy_status = jest.spyOn(conn, "_status");
conn.status = "online";
await conn.stop();
expect(spy_disconnect).toHaveBeenCalledTimes(1);
expect(spy_status).toHaveBeenCalledTimes(1);
expect(spy_status).toHaveBeenCalledWith("offline", close_el);
expect(conn.status).toBe("offline");
});
// https://github.com/xmppjs/xmpp.js/issues/956
test("socket closes after timeout", (done) => {
const conn = new Connection();
conn.timeout = 100;
const socket = new EventEmitter();
socket.end = jest.fn(async () => {
// Mock receiving "close" event after timeout
setTimeout(() => {
socket.emit("close");
}, conn.timeout * 2);
});
conn._attachSocket(socket);
const statuses = [conn.status];
conn.on("status", (status) => {
statuses.push(status);
});
conn.stop();
// Wait a bit and assert that status is correct
setTimeout(() => {
expect(conn.status).toBe("offline");
expect(conn.status).not.toBe("disconnect");
done();
}, conn.timeout * 3);
});