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

57 lines
1.4 KiB
JavaScript

import { context, mockClient, mockInput, promiseError } from "@xmpp/test";
import IncomingContext from "../lib/IncomingContext.js";
import OutgoingContext from "../lib/OutgoingContext.js";
import _middleware from "../index.js";
let ctx;
beforeEach(() => {
ctx = context();
const { entity } = ctx;
ctx.middleware = _middleware({ entity });
});
test("use", (done) => {
expect.assertions(4);
const stanza = <presence />;
ctx.middleware.use((ctx, next) => {
expect(ctx instanceof IncomingContext).toBe(true);
expect(ctx.stanza).toEqual(stanza);
expect(ctx.entity).toBe(ctx.entity);
expect(next() instanceof Promise).toBe(true);
done();
});
ctx.fakeIncoming(stanza);
});
test("filter", (done) => {
expect.assertions(3);
const stanza = <presence />;
ctx.middleware.filter((ctx, next) => {
expect(ctx instanceof OutgoingContext).toBe(true);
expect(ctx.stanza).toEqual(stanza);
expect(next() instanceof Promise).toBe(true);
done();
});
ctx.fakeOutgoing(stanza);
});
test("emits an error event if a middleware throws", async () => {
const xmpp = mockClient();
const { middleware } = xmpp;
const error = new Error("foobar");
const willError = promiseError(xmpp);
middleware.use(async () => {
await Promise.resolve();
throw error;
});
mockInput(xmpp, <presence id="hello" />);
const err = await willError;
expect(err).toEqual(error);
});