Commit 18c7ba4a authored by JC Brand's avatar JC Brand

Bugfix. Need to first create bookmark

Otherwise we don't include it in the stanza.
So if an error occurs, remove the bookmark again.
parent bb6d4f75
...@@ -59675,11 +59675,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -59675,11 +59675,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
}, },
createBookmark(options) { createBookmark(options) {
_converse.bookmarks.sendBookmarkStanza().then(() => _converse.bookmarks.create(options)).catch(() => this.onBookmarkError.apply(this, arguments)); this.create(options);
this.sendBookmarkStanza().catch(iq => this.onBookmarkError(iq, options));
}, },
sendBookmarkStanza() { sendBookmarkStanza() {
let stanza = $iq({ const stanza = $iq({
'type': 'set', 'type': 'set',
'from': _converse.connection.jid 'from': _converse.connection.jid
}).c('pubsub', { }).c('pubsub', {
...@@ -59691,8 +59692,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -59691,8 +59692,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
}).c('storage', { }).c('storage', {
'xmlns': 'storage:bookmarks' 'xmlns': 'storage:bookmarks'
}); });
this.each(function (model) { this.each(model => {
stanza = stanza.c('conference', { stanza.c('conference', {
'name': model.get('name'), 'name': model.get('name'),
'autojoin': model.get('autojoin'), 'autojoin': model.get('autojoin'),
'jid': model.get('jid') 'jid': model.get('jid')
...@@ -59713,12 +59714,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -59713,12 +59714,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
return _converse.api.sendIQ(stanza); return _converse.api.sendIQ(stanza);
}, },
onBookmarkError(iq) { onBookmarkError(iq, options) {
_converse.log("Error while trying to add bookmark", Strophe.LogLevel.ERROR); _converse.log("Error while trying to add bookmark", Strophe.LogLevel.ERROR);
_converse.log(iq); _converse.log(iq);
_converse.api.alert.show(Strophe.LogLevel.ERROR, __('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")]); _converse.api.alert.show(Strophe.LogLevel.ERROR, __('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")]);
this.findWhere({
'jid': options.jid
}).destroy();
}, },
fetchBookmarksFromServer(deferred) { fetchBookmarksFromServer(deferred) {
...@@ -26,15 +26,15 @@ ...@@ -26,15 +26,15 @@
[{'category': 'pubsub', 'type': 'pep'}], [{'category': 'pubsub', 'type': 'pep'}],
['http://jabber.org/protocol/pubsub#publish-options'] ['http://jabber.org/protocol/pubsub#publish-options']
).then(function () { ).then(function () {
var sent_stanza, IQ_id; let sent_stanza, IQ_id;
var sendIQ = _converse.connection.sendIQ; const sendIQ = _converse.connection.sendIQ;
spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) { spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
sent_stanza = iq; sent_stanza = iq;
IQ_id = sendIQ.bind(this)(iq, callback, errback); IQ_id = sendIQ.bind(this)(iq, callback, errback);
}); });
spyOn(_converse.connection, 'getUniqueId').and.callThrough(); spyOn(_converse.connection, 'getUniqueId').and.callThrough();
let view; let view, bookmark;
test_utils.openChatRoom(_converse, 'theplay', 'conference.shakespeare.lit', 'JC') test_utils.openChatRoom(_converse, 'theplay', 'conference.shakespeare.lit', 'JC')
.then(() => { .then(() => {
var jid = 'theplay@conference.shakespeare.lit'; var jid = 'theplay@conference.shakespeare.lit';
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
spyOn(view, 'closeForm').and.callThrough(); spyOn(view, 'closeForm').and.callThrough();
return test_utils.waitUntil(() => !_.isNull(view.el.querySelector('.toggle-bookmark'))); return test_utils.waitUntil(() => !_.isNull(view.el.querySelector('.toggle-bookmark')));
}).then(() => { }).then(() => {
var bookmark = view.el.querySelector('.toggle-bookmark'); bookmark = view.el.querySelector('.toggle-bookmark');
bookmark.click(); bookmark.click();
expect(view.renderBookmarkForm).toHaveBeenCalled(); expect(view.renderBookmarkForm).toHaveBeenCalled();
...@@ -86,15 +86,16 @@ ...@@ -86,15 +86,16 @@
* </iq> * </iq>
*/ */
expect(view.model.get('bookmarked')).toBeFalsy(); expect(view.model.get('bookmarked')).toBeFalsy();
var $form = $(view.el).find('.chatroom-form'); const form = view.el.querySelector('.chatroom-form');
$form.find('input[name="name"]').val('Play&apos;s the Thing'); form.querySelector('input[name="name"]').value = 'Play&apos;s the Thing';
$form.find('input[name="autojoin"]').prop('checked', true); form.querySelector('input[name="autojoin"]').checked = 'checked';
$form.find('input[name="nick"]').val('JC'); form.querySelector('input[name="nick"]').value = 'JC';
view.el.querySelector('.btn-primary').click();
expect(view.model.get('bookmarked')).toBeTruthy(); _converse.connection.IQ_stanzas = [];
expect(u.hasClass('on-button', bookmark), true); view.el.querySelector('.btn-primary').click();
return test_utils.waitUntil(() => sent_stanza);
}).then(() => {
expect(sent_stanza.toLocaleString()).toBe( expect(sent_stanza.toLocaleString()).toBe(
"<iq type='set' from='dummy@localhost/resource' xmlns='jabber:client' id='"+IQ_id+"'>"+ "<iq type='set' from='dummy@localhost/resource' xmlns='jabber:client' id='"+IQ_id+"'>"+
"<pubsub xmlns='http://jabber.org/protocol/pubsub'>"+ "<pubsub xmlns='http://jabber.org/protocol/pubsub'>"+
...@@ -123,21 +124,24 @@ ...@@ -123,21 +124,24 @@
"</pubsub>"+ "</pubsub>"+
"</iq>" "</iq>"
); );
/* Server acknowledges successful storage /* Server acknowledges successful storage
* *
* <iq to='juliet@capulet.lit/balcony' type='result' id='pip1'/> * <iq to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
*/ */
var stanza = $iq({ const stanza = $iq({
'to':_converse.connection.jid, 'to':_converse.connection.jid,
'type':'result', 'type':'result',
'id':IQ_id 'id':IQ_id
}); });
_converse.connection._dataRecv(test_utils.createRequest(stanza)); _converse.connection._dataRecv(test_utils.createRequest(stanza));
return test_utils.waitUntil(() => view.model.get('bookmarked'));
}).then(() => {
expect(view.model.get('bookmarked')).toBeTruthy();
expect(u.hasClass('on-button', bookmark), true);
// We ignore this IQ stanza... (unless it's an error stanza), so // We ignore this IQ stanza... (unless it's an error stanza), so
// nothing to test for here. // nothing to test for here.
done(); done();
}); }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
}); });
})); }));
......
...@@ -290,13 +290,12 @@ ...@@ -290,13 +290,12 @@
}, },
createBookmark (options) { createBookmark (options) {
_converse.bookmarks.sendBookmarkStanza() this.create(options);
.then(() => _converse.bookmarks.create(options)) this.sendBookmarkStanza().catch(iq => this.onBookmarkError(iq, options));
.catch(() => this.onBookmarkError.apply(this, arguments));
}, },
sendBookmarkStanza () { sendBookmarkStanza () {
let stanza = $iq({ const stanza = $iq({
'type': 'set', 'type': 'set',
'from': _converse.connection.jid, 'from': _converse.connection.jid,
}) })
...@@ -304,8 +303,8 @@ ...@@ -304,8 +303,8 @@
.c('publish', {'node': 'storage:bookmarks'}) .c('publish', {'node': 'storage:bookmarks'})
.c('item', {'id': 'current'}) .c('item', {'id': 'current'})
.c('storage', {'xmlns':'storage:bookmarks'}); .c('storage', {'xmlns':'storage:bookmarks'});
this.each(function (model) { this.each(model => {
stanza = stanza.c('conference', { stanza.c('conference', {
'name': model.get('name'), 'name': model.get('name'),
'autojoin': model.get('autojoin'), 'autojoin': model.get('autojoin'),
'jid': model.get('jid'), 'jid': model.get('jid'),
...@@ -323,13 +322,14 @@ ...@@ -323,13 +322,14 @@
return _converse.api.sendIQ(stanza); return _converse.api.sendIQ(stanza);
}, },
onBookmarkError (iq) { onBookmarkError (iq, options) {
_converse.log("Error while trying to add bookmark", Strophe.LogLevel.ERROR); _converse.log("Error while trying to add bookmark", Strophe.LogLevel.ERROR);
_converse.log(iq); _converse.log(iq);
_converse.api.alert.show( _converse.api.alert.show(
Strophe.LogLevel.ERROR, Strophe.LogLevel.ERROR,
__('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")] __('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")]
) )
this.findWhere({'jid': options.jid}).destroy();
}, },
fetchBookmarksFromServer (deferred) { fetchBookmarksFromServer (deferred) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment