diff --git a/spec/mam.js b/spec/mam.js index cbc6bd691..5b1d2cb7d 100644 --- a/spec/mam.js +++ b/spec/mam.js @@ -97,33 +97,103 @@ ); })); - it("checks whether returned messages are from the right JID", mock.initConverse(function (_converse) { + it("can be used to query for archived messages from a chat room", mock.initConverse(function (_converse) { + if (!_converse.disco_entities.get(_converse.domain).features.findWhere({'var': Strophe.NS.MAM})) { + _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM}); + } var sent_stanza, IQ_id; var sendIQ = _converse.connection.sendIQ; spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) { sent_stanza = iq; IQ_id = sendIQ.bind(this)(iq, callback, errback); }); + var callback = jasmine.createSpy('callback'); + + _converse.api.archive.query({'with': 'coven@chat.shakespeare.lit', 'groupchat': true}, callback); + var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid'); + + expect(sent_stanza.toString()).toBe( + ""+ + ""+ + ""+ + ""+ + "urn:xmpp:mam:2"+ + ""+ + ""+ + ""+ + ""); + })); + + it("checks whether returned MAM messages from a MUC room are from the right JID", mock.initConverse(function (_converse) { if (!_converse.disco_entities.get(_converse.domain).features.findWhere({'var': Strophe.NS.MAM})) { _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM}); } - _converse.api.archive.query({'with':'juliet@capulet.lit'}); - var queryid = sent_stanza.toString().querySelector('query').getAttribute('queryid'); - expect(sent_stanza.toString()).toBe( - ""+ - ""+ - ""+ - ""+ - "urn:xmpp:mam:2"+ - ""+ - ""+ - "juliet@capulet.lit"+ - ""+ - ""+ - ""+ - "" - ); - })); + var sent_stanza, IQ_id; + var sendIQ = _converse.connection.sendIQ; + spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) { + sent_stanza = iq; + IQ_id = sendIQ.bind(this)(iq, callback, errback); + }); + var callback = jasmine.createSpy('callback'); + + _converse.api.archive.query({'with': 'coven@chat.shakespear.lit', 'groupchat': true, 'max':'10'}, callback); + var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid'); + + /* + * + * + * + * + * Thrice the brinded cat hath mew'd. + * + * + * + * + * + * + * + */ + var msg1 = $msg({'id':'iasd207', 'from': 'other@chat.shakespear.lit', 'to': 'dummy@localhost'}) + .c('result', {'xmlns': 'urn:xmpp:mam:2', 'queryid':queryid, 'id':'34482-21985-73620'}) + .c('forwarded', {'xmlns':'urn:xmpp:forward:0'}) + .c('delay', {'xmlns':'urn:xmpp:delay', 'stamp':'2010-07-10T23:08:25Z'}).up() + .c('message', { + 'xmlns':'jabber:client', + 'to':'dummy@localhost', + 'id':'162BEBB1-F6DB-4D9A-9BD8-CFDCC801A0B2', + 'from':'coven@chat.shakespeare.lit/firstwitch', + 'type':'groupchat' }) + .c('body').t("Thrice the brinded cat hath mew'd."); + _converse.connection._dataRecv(test_utils.createRequest(msg1)); + + /* Send an stanza to indicate the end of the result set. + * + * + * + * + * 28482-98726-73623 + * 09af3-cc343-b409f + * 20 + * + * + */ + var stanza = $iq({'type': 'result', 'id': IQ_id}) + .c('fin', {'xmlns': 'urn:xmpp:mam:2'}) + .c('set', {'xmlns': 'http://jabber.org/protocol/rsm'}) + .c('first', {'index': '0'}).t('23452-4534-1').up() + .c('last').t('09af3-cc343-b409f').up() + .c('count').t('16'); + _converse.connection._dataRecv(test_utils.createRequest(stanza)); + + expect(callback).toHaveBeenCalled(); + var args = callback.calls.argsFor(0); + expect(args[0].length).toBe(0); + })); it("can be used to query for all messages in a certain timespan", mock.initConverse(function (_converse) { var sent_stanza, IQ_id; diff --git a/src/converse-mam.js b/src/converse-mam.js index c5196cd03..295266a07 100644 --- a/src/converse-mam.js +++ b/src/converse-mam.js @@ -84,6 +84,11 @@ const messages = []; const message_handler = _converse.connection.addHandler(function (message) { + if (options.groupchat) { + if (message.getAttribute('from') !== options['with']) { // eslint-disable-line dot-notation + return true; + } + } const result = message.querySelector('result'); if (!_.isNull(result) && result.getAttribute('queryid') === queryid) { messages.push(message);