diff --git a/spec/bookmarks.js b/spec/bookmarks.js index 8696aab9f..32e54631f 100644 --- a/spec/bookmarks.js +++ b/spec/bookmarks.js @@ -322,11 +322,7 @@ null, ['rosterGroupsFetched'], {}, async function (done, _converse) { - await test_utils.waitUntilDiscoConfirmed( - _converse, _converse.bare_jid, - [{'category': 'pubsub', 'type': 'pep'}], - ['http://jabber.org/protocol/pubsub#publish-options'] - ); + await test_utils.waitUntilBookmarksReturned(_converse); spyOn(_converse.api.rooms, 'create').and.callThrough(); const jid = 'theplay@conference.shakespeare.lit'; const model = _converse.bookmarks.create({ @@ -450,7 +446,7 @@ ''+ ''+ ''); - + /* * Server returns all items * ------------------------ diff --git a/src/headless/converse-bookmarks.js b/src/headless/converse-bookmarks.js index 6fe04b9c9..4c430db51 100644 --- a/src/headless/converse-bookmarks.js +++ b/src/headless/converse-bookmarks.js @@ -262,8 +262,7 @@ converse.plugins.add('converse-bookmarks', { if (!_converse.allow_bookmarks) { return; } - const supported = await _converse.checkBookmarksSupport(); - if (supported) { + if (await _converse.checkBookmarksSupport()) { _converse.bookmarks = new _converse.Bookmarks(); await _converse.bookmarks.fetchBookmarks(); /** diff --git a/tests/utils.js b/tests/utils.js index c1576d55c..cd99faba8 100644 --- a/tests/utils.js +++ b/tests/utils.js @@ -78,6 +78,35 @@ return this; }; + utils.waitUntilBookmarksReturned = async function (_converse, bookmarks=[]) { + await utils.waitUntilDiscoConfirmed( + _converse, _converse.bare_jid, + [{'category': 'pubsub', 'type': 'pep'}], + ['http://jabber.org/protocol/pubsub#publish-options'] + ); + const IQ_stanzas = _converse.connection.IQ_stanzas; + const sent_stanza = await u.waitUntil( + () => IQ_stanzas.filter(s => sizzle('items[node="storage:bookmarks"]', s).length).pop() + ); + const stanza = $iq({ + 'to': _converse.connection.jid, + 'type':'result', + 'id':sent_stanza.getAttribute('id') + }).c('pubsub', {'xmlns': Strophe.NS.PUBSUB}) + .c('items', {'node': 'storage:bookmarks'}) + .c('item', {'id': 'current'}) + .c('storage', {'xmlns': 'storage:bookmarks'}); + bookmarks.forEach(bookmark => { + stanza.c('conference', { + 'name': bookmark.name, + 'autojoin': bookmark.autojoin, + 'jid': bookmark.jid + }).c('nick').t(bookmark.nick).up().up() + }); + _converse.connection._dataRecv(utils.createRequest(stanza)); + await _converse.api.waitUntil('bookmarksInitialized'); + }; + utils.openChatBoxes = function (converse, amount) { var i = 0, jid, views = []; for (i; i view.on('messageInserted', resolve)); + const promise = new Promise(resolve => view.once('messageInserted', resolve)); view.el.querySelector('.chat-textarea').value = message; view.onKeyDown({ target: view.el.querySelector('textarea.chat-textarea'),