/*global mock, converse */ // See: https://xmpp.org/rfcs/rfc3921.html describe("A received presence stanza", function () { it("has its priority taken into account", mock.initConverse([], {}, async (done, _converse) => { const u = converse.env.utils; mock.openControlBox(_converse); await mock.waitForRoster(_converse, 'current'); const contact_jid = mock.cur_names[8].replace(/ /g,'.').toLowerCase() + '@montague.lit'; const contact = await _converse.api.contacts.get(contact_jid); let stanza = u.toStanza(` 1 ce51d94f7f22b87a21274abb93710b9eb7cc1c65 `); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(contact.presence.get('show')).toBe('online'); expect(contact.presence.resources.length).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); stanza = u.toStanza( ''+ ' '+ ' 0'+ ' xa'+ ' '+ ' '+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(contact.presence.get('show')).toBe('online'); expect(contact.presence.resources.length).toBe(2); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); stanza = u.toStanza( ''+ ' 2'+ ' dnd'+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(contact.presence.get('show')).toBe('dnd'); expect(contact.presence.resources.length).toBe(3); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); expect(contact.presence.resources.get('priority-2-resource').get('priority')).toBe(2); expect(contact.presence.resources.get('priority-2-resource').get('show')).toBe('dnd'); stanza = u.toStanza( ''+ ' 3'+ ' away'+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('away'); expect(contact.presence.resources.length).toBe(4); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); expect(contact.presence.resources.get('priority-2-resource').get('priority')).toBe(2); expect(contact.presence.resources.get('priority-2-resource').get('show')).toBe('dnd'); expect(contact.presence.resources.get('priority-3-resource').get('priority')).toBe(3); expect(contact.presence.resources.get('priority-3-resource').get('show')).toBe('away'); stanza = u.toStanza( ''+ ' 1'+ ' dnd'+ ' '+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('away'); expect(contact.presence.resources.length).toBe(5); expect(contact.presence.resources.get('older-priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('older-priority-1-resource').get('show')).toBe('dnd'); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); expect(contact.presence.resources.get('priority-2-resource').get('priority')).toBe(2); expect(contact.presence.resources.get('priority-2-resource').get('show')).toBe('dnd'); expect(contact.presence.resources.get('priority-3-resource').get('priority')).toBe(3); expect(contact.presence.resources.get('priority-3-resource').get('show')).toBe('away'); stanza = u.toStanza( ''+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('dnd'); expect(contact.presence.resources.length).toBe(4); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); expect(contact.presence.resources.get('priority-2-resource').get('priority')).toBe(2); expect(contact.presence.resources.get('priority-2-resource').get('show')).toBe('dnd'); expect(contact.presence.resources.get('older-priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('older-priority-1-resource').get('show')).toBe('dnd'); stanza = u.toStanza( ''+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('online'); expect(contact.presence.resources.length).toBe(3); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('priority-1-resource').get('show')).toBe('online'); expect(contact.presence.resources.get('older-priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('older-priority-1-resource').get('show')).toBe('dnd'); stanza = u.toStanza( ''+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('dnd'); expect(contact.presence.resources.length).toBe(2); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); expect(contact.presence.resources.get('older-priority-1-resource').get('priority')).toBe(1); expect(contact.presence.resources.get('older-priority-1-resource').get('show')).toBe('dnd'); stanza = u.toStanza( ''+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('xa'); expect(contact.presence.resources.length).toBe(1); expect(contact.presence.resources.get('priority-0-resource').get('priority')).toBe(0); expect(contact.presence.resources.get('priority-0-resource').get('show')).toBe('xa'); stanza = u.toStanza( ''+ ''); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_converse.roster.get(contact_jid).presence.get('show')).toBe('offline'); expect(contact.presence.resources.length).toBe(0); done(); })); });