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);