UNPKG

@xmpp/stream-management

Version:
197 lines (143 loc) 4.26 kB
"use strict"; const test = require("ava"); const { mockClient } = require("@xmpp/test"); function tick() { return new Promise((resolve) => { process.nextTick(resolve); }); } test("enable - enabled", async (t) => { const { entity } = mockClient(); entity.mockInput( <features xmlns="http://etherx.jabber.org/streams"> <sm xmlns="urn:xmpp:sm:3" /> </features>, ); entity.streamManagement.outbound = 45; t.deepEqual( await entity.catchOutgoing(), <enable xmlns="urn:xmpp:sm:3" resume="true" />, ); await tick(); t.is(entity.streamManagement.outbound, 0); t.is(entity.streamManagement.enabled, false); t.is(entity.streamManagement.id, ""); entity.mockInput( <enabled xmlns="urn:xmpp:sm:3" id="some-long-sm-id" location="[2001:41D0:1:A49b::1]:9222" resume="true" />, ); await tick(); t.is(entity.streamManagement.id, "some-long-sm-id"); t.is(entity.streamManagement.enabled, true); }); test("enable - send rejects", async (t) => { const { entity } = mockClient(); entity.send = () => Promise.reject(new Error("nope")); entity.mockInput( <enabled xmlns="urn:xmpp:sm:3" id="some-long-sm-id" location="[2001:41D0:1:A49b::1]:9222" resume="true" />, ); await tick(); t.is(entity.streamManagement.enabled, false); }); test("enable - message - enabled", async (t) => { const { entity } = mockClient(); entity.mockInput( <features xmlns="http://etherx.jabber.org/streams"> <sm xmlns="urn:xmpp:sm:3" /> </features>, ); entity.streamManagement.outbound = 45; t.deepEqual( await entity.catchOutgoing(), <enable xmlns="urn:xmpp:sm:3" resume="true" />, ); t.is(entity.streamManagement.outbound, 0); t.is(entity.streamManagement.enabled, false); t.is(entity.streamManagement.id, ""); await tick(); entity.mockInput(<message />); t.is(entity.streamManagement.enabled, false); t.is(entity.streamManagement.inbound, 1); entity.mockInput( <enabled xmlns="urn:xmpp:sm:3" id="some-long-sm-id" location="[2001:41D0:1:A49b::1]:9222" resume="true" />, ); await tick(); t.is(entity.streamManagement.id, "some-long-sm-id"); t.is(entity.streamManagement.enabled, true); }); test("enable - failed", async (t) => { const { entity } = mockClient(); entity.mockInput( <features xmlns="http://etherx.jabber.org/streams"> <sm xmlns="urn:xmpp:sm:3" /> </features>, ); entity.streamManagement.outbound = 45; t.deepEqual( await entity.catchOutgoing(), <enable xmlns="urn:xmpp:sm:3" resume="true" />, ); t.is(entity.streamManagement.outbound, 0); entity.streamManagement.enabled = true; await tick(); entity.mockInput(<failed xmlns="urn:xmpp:sm:3" />); await tick(); t.is(entity.streamManagement.enabled, false); }); test("resume - resumed", async (t) => { const { entity } = mockClient(); entity.status = "offline"; entity.streamManagement.id = "bar"; entity.mockInput( <features xmlns="http://etherx.jabber.org/streams"> <sm xmlns="urn:xmpp:sm:3" /> </features>, ); entity.streamManagement.outbound = 45; t.deepEqual( await entity.catchOutgoing(), <resume xmlns="urn:xmpp:sm:3" previd="bar" h="0" />, ); t.is(entity.streamManagement.enabled, false); t.is(entity.status, "offline"); entity.mockInput(<resumed xmlns="urn:xmpp:sm:3" />); await tick(); t.is(entity.streamManagement.outbound, 45); t.is(entity.status, "online"); }); test("resume - failed", async (t) => { const { entity } = mockClient(); entity.status = "bar"; entity.streamManagement.id = "bar"; entity.streamManagement.enabled = true; entity.streamManagement.outbound = 45; entity.mockInput( <features xmlns="http://etherx.jabber.org/streams"> <sm xmlns="urn:xmpp:sm:3" /> </features>, ); t.deepEqual( await entity.catchOutgoing(), <resume xmlns="urn:xmpp:sm:3" previd="bar" h="0" />, ); entity.mockInput(<failed xmlns="urn:xmpp:sm:3" />); await tick(); t.is(entity.status, "bar"); t.is(entity.streamManagement.id, ""); t.is(entity.streamManagement.enabled, false); t.is(entity.streamManagement.outbound, 0); });