|
@@ -1,152 +1,10 @@
|
|
/* global mock, converse */
|
|
/* global mock, converse */
|
|
const { Strophe, sizzle, stx, u } = converse.env;
|
|
const { Strophe, sizzle, stx, u } = converse.env;
|
|
|
|
|
|
-
|
|
|
|
describe("A chat room", function () {
|
|
describe("A chat room", function () {
|
|
|
|
|
|
beforeEach(() => jasmine.addMatchers({ toEqualStanza: jasmine.toEqualStanza }));
|
|
beforeEach(() => jasmine.addMatchers({ toEqualStanza: jasmine.toEqualStanza }));
|
|
|
|
|
|
- it("can be bookmarked", mock.initConverse(['chatBoxesFetched'], {}, async (_converse) => {
|
|
|
|
- await mock.waitForRoster(_converse, 'current', 0);
|
|
|
|
- await mock.waitUntilDiscoConfirmed(
|
|
|
|
- _converse, _converse.bare_jid,
|
|
|
|
- [{'category': 'pubsub', 'type': 'pep'}],
|
|
|
|
- [
|
|
|
|
- 'http://jabber.org/protocol/pubsub#publish-options',
|
|
|
|
- 'urn:xmpp:bookmarks:1#compat'
|
|
|
|
- ]
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- const nick = 'JC';
|
|
|
|
- const muc_jid = 'theplay@conference.shakespeare.lit';
|
|
|
|
- await mock.openChatRoom(_converse, 'theplay', 'conference.shakespeare.lit', 'JC');
|
|
|
|
- await mock.getRoomFeatures(_converse, muc_jid, []);
|
|
|
|
- await mock.waitForReservedNick(_converse, muc_jid, nick);
|
|
|
|
- await mock.receiveOwnMUCPresence(_converse, muc_jid, nick);
|
|
|
|
- const view = _converse.chatboxviews.get(muc_jid);
|
|
|
|
- await u.waitUntil(() => (view.model.session.get('connection_status') === converse.ROOMSTATUS.ENTERED));
|
|
|
|
- await mock.returnMemberLists(_converse, muc_jid, [], ['member', 'admin', 'owner']);
|
|
|
|
-
|
|
|
|
- await u.waitUntil(() => view.querySelector('.toggle-bookmark') !== null);
|
|
|
|
-
|
|
|
|
- const toggle = view.querySelector('.toggle-bookmark');
|
|
|
|
- expect(toggle.title).toBe('Bookmark this groupchat');
|
|
|
|
- toggle.click();
|
|
|
|
-
|
|
|
|
- const modal = _converse.api.modal.get('converse-bookmark-form-modal');
|
|
|
|
- await u.waitUntil(() => u.isVisible(modal), 1000);
|
|
|
|
-
|
|
|
|
- expect(view.model.get('bookmarked')).toBeFalsy();
|
|
|
|
- const form = await u.waitUntil(() => modal.querySelector('.chatroom-form'));
|
|
|
|
- form.querySelector('input[name="name"]').value = "Play's the Thing";
|
|
|
|
- form.querySelector('input[name="autojoin"]').checked = 'checked';
|
|
|
|
- form.querySelector('input[name="nick"]').value = 'JC';
|
|
|
|
- form.querySelector('input[name="password"]').value = 'secret';
|
|
|
|
-
|
|
|
|
- const IQ_stanzas = _converse.api.connection.get().IQ_stanzas;
|
|
|
|
- modal.querySelector('converse-muc-bookmark-form .btn-primary').click();
|
|
|
|
-
|
|
|
|
- const sent_stanza = await u.waitUntil(
|
|
|
|
- () => IQ_stanzas.filter(s => sizzle('iq publish[node="urn:xmpp:bookmarks:1"]', s).length).pop());
|
|
|
|
- expect(sent_stanza).toEqualStanza(
|
|
|
|
- stx`<iq from="${_converse.bare_jid}"
|
|
|
|
- to="${_converse.bare_jid}"
|
|
|
|
- id="${sent_stanza.getAttribute('id')}"
|
|
|
|
- type="set"
|
|
|
|
- xmlns="jabber:client">
|
|
|
|
- <pubsub xmlns="http://jabber.org/protocol/pubsub">
|
|
|
|
- <publish node="urn:xmpp:bookmarks:1">
|
|
|
|
- <item id="${view.model.get('jid')}">
|
|
|
|
- <conference xmlns="urn:xmpp:bookmarks:1" autojoin="true" name="Play's the Thing">
|
|
|
|
- <nick>JC</nick>
|
|
|
|
- <password>secret</password>
|
|
|
|
- </conference>
|
|
|
|
- </item>
|
|
|
|
- </publish>
|
|
|
|
- <publish-options>
|
|
|
|
- <x type="submit" xmlns="jabber:x:data">
|
|
|
|
- <field type="hidden" var="FORM_TYPE">
|
|
|
|
- <value>http://jabber.org/protocol/pubsub#publish-options</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#persist_items'>
|
|
|
|
- <value>true</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#max_items'>
|
|
|
|
- <value>max</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#send_last_published_item'>
|
|
|
|
- <value>never</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#access_model'>
|
|
|
|
- <value>whitelist</value>
|
|
|
|
- </field>
|
|
|
|
- </x>
|
|
|
|
- </publish-options>
|
|
|
|
- </pubsub>
|
|
|
|
- </iq>`
|
|
|
|
- );
|
|
|
|
- /* Server acknowledges successful storage
|
|
|
|
- * <iq to='juliet@capulet.lit/balcony' type='result' id='pip1'/>
|
|
|
|
- */
|
|
|
|
- const stanza = stx`<iq
|
|
|
|
- xmlns="jabber:client"
|
|
|
|
- to="${_converse.api.connection.get().jid}"
|
|
|
|
- type="result"
|
|
|
|
- id="${sent_stanza.getAttribute('id')}"/>`;
|
|
|
|
- _converse.api.connection.get()._dataRecv(mock.createRequest(stanza));
|
|
|
|
- await u.waitUntil(() => view.model.get('bookmarked'));
|
|
|
|
- expect(view.model.get('bookmarked')).toBeTruthy();
|
|
|
|
- expect(u.hasClass('on-button', view.querySelector('.toggle-bookmark')), true);
|
|
|
|
- // We ignore this IQ stanza... (unless it's an error stanza), so
|
|
|
|
- // nothing to test for here.
|
|
|
|
- }));
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- it("will be automatically opened if 'autojoin' is set on the bookmark", mock.initConverse(
|
|
|
|
- ['chatBoxesFetched'], {}, async function (_converse) {
|
|
|
|
-
|
|
|
|
- const { u } = converse.env;
|
|
|
|
- const { api } = _converse;
|
|
|
|
- await mock.waitForRoster(_converse, 'current', 0);
|
|
|
|
- await mock.waitUntilDiscoConfirmed(
|
|
|
|
- _converse, _converse.bare_jid,
|
|
|
|
- [{'category': 'pubsub', 'type': 'pep'}],
|
|
|
|
- ['http://jabber.org/protocol/pubsub#publish-options']
|
|
|
|
- );
|
|
|
|
- await u.waitUntil(() => _converse.state.bookmarks);
|
|
|
|
- const { bookmarks } = _converse.state;
|
|
|
|
- let jid = 'lounge@montague.lit';
|
|
|
|
- bookmarks.create({
|
|
|
|
- 'jid': jid,
|
|
|
|
- 'autojoin': false,
|
|
|
|
- 'name': 'The Lounge',
|
|
|
|
- 'nick': ' Othello'
|
|
|
|
- });
|
|
|
|
- expect(_converse.chatboxviews.get(jid) === undefined).toBeTruthy();
|
|
|
|
-
|
|
|
|
- jid = 'theplay@conference.shakespeare.lit';
|
|
|
|
- bookmarks.create({
|
|
|
|
- 'jid': jid,
|
|
|
|
- 'autojoin': true,
|
|
|
|
- 'name': 'The Play',
|
|
|
|
- 'nick': ' Othello'
|
|
|
|
- });
|
|
|
|
- await new Promise(resolve => _converse.api.listen.once('chatRoomViewInitialized', resolve));
|
|
|
|
- expect(!!_converse.chatboxviews.get(jid)).toBe(true);
|
|
|
|
-
|
|
|
|
- // Check that we don't auto-join if muc_respect_autojoin is false
|
|
|
|
- api.settings.set('muc_respect_autojoin', false);
|
|
|
|
- jid = 'balcony@conference.shakespeare.lit';
|
|
|
|
- bookmarks.create({
|
|
|
|
- 'jid': jid,
|
|
|
|
- 'autojoin': true,
|
|
|
|
- 'name': 'Balcony',
|
|
|
|
- 'nick': ' Othello'
|
|
|
|
- });
|
|
|
|
- expect(_converse.chatboxviews.get(jid) === undefined).toBe(true);
|
|
|
|
- }));
|
|
|
|
-
|
|
|
|
-
|
|
|
|
describe("when bookmarked", function () {
|
|
describe("when bookmarked", function () {
|
|
|
|
|
|
it("will use the nickname from the bookmark", mock.initConverse([], {}, async function (_converse) {
|
|
it("will use the nickname from the bookmark", mock.initConverse([], {}, async function (_converse) {
|
|
@@ -204,91 +62,6 @@ describe("A chat room", function () {
|
|
view.model.set('bookmarked', false);
|
|
view.model.set('bookmarked', false);
|
|
await u.waitUntil(() => view.querySelector('.chatbox-title__text .fa-bookmark') === null);
|
|
await u.waitUntil(() => view.querySelector('.chatbox-title__text .fa-bookmark') === null);
|
|
}));
|
|
}));
|
|
-
|
|
|
|
- it("can be unbookmarked", mock.initConverse([], {}, async function (_converse) {
|
|
|
|
- const { u } = converse.env;
|
|
|
|
- await mock.waitForRoster(_converse, 'current', 0);
|
|
|
|
- await mock.waitUntilBookmarksReturned(_converse);
|
|
|
|
-
|
|
|
|
- const nick = 'romeo';
|
|
|
|
- const muc_jid = 'theplay@conference.shakespeare.lit';
|
|
|
|
- await _converse.api.rooms.open(muc_jid);
|
|
|
|
- await mock.getRoomFeatures(_converse, muc_jid);
|
|
|
|
- await mock.waitForReservedNick(_converse, muc_jid, nick);
|
|
|
|
-
|
|
|
|
- const view = _converse.chatboxviews.get(muc_jid);
|
|
|
|
- await u.waitUntil(() => view.querySelector('.toggle-bookmark'));
|
|
|
|
-
|
|
|
|
- const { bookmarks } = _converse.state;
|
|
|
|
-
|
|
|
|
- spyOn(view, 'showBookmarkModal').and.callThrough();
|
|
|
|
- spyOn(bookmarks, 'sendBookmarkStanza').and.callThrough();
|
|
|
|
-
|
|
|
|
- bookmarks.create({
|
|
|
|
- 'jid': view.model.get('jid'),
|
|
|
|
- 'autojoin': false,
|
|
|
|
- 'name': 'The Play',
|
|
|
|
- 'nick': 'Othello'
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- expect(bookmarks.length).toBe(1);
|
|
|
|
- await u.waitUntil(() => _converse.chatboxes.length >= 1);
|
|
|
|
- expect(view.model.get('bookmarked')).toBeTruthy();
|
|
|
|
- await u.waitUntil(() => view.querySelector('.chatbox-title__text .fa-bookmark') !== null);
|
|
|
|
- spyOn(_converse.api.connection.get(), 'getUniqueId').and.callThrough();
|
|
|
|
- const bookmark_icon = view.querySelector('.toggle-bookmark');
|
|
|
|
- bookmark_icon.click();
|
|
|
|
- expect(view.showBookmarkModal).toHaveBeenCalled();
|
|
|
|
-
|
|
|
|
- const modal = _converse.api.modal.get('converse-bookmark-form-modal');
|
|
|
|
- await u.waitUntil(() => u.isVisible(modal), 1000);
|
|
|
|
- const form = await u.waitUntil(() => modal.querySelector('.chatroom-form'));
|
|
|
|
-
|
|
|
|
- expect(form.querySelector('input[name="name"]').value).toBe('The Play');
|
|
|
|
- expect(form.querySelector('input[name="autojoin"]').checked).toBeFalsy();
|
|
|
|
- expect(form.querySelector('input[name="nick"]').value).toBe('Othello');
|
|
|
|
-
|
|
|
|
- // Remove the bookmark
|
|
|
|
- modal.querySelector('.button-remove').click();
|
|
|
|
-
|
|
|
|
- await u.waitUntil(() => view.querySelector('.chatbox-title__text .fa-bookmark') === null);
|
|
|
|
- expect(bookmarks.length).toBe(0);
|
|
|
|
-
|
|
|
|
- // Check that an IQ stanza is sent out, containing no
|
|
|
|
- // conferences to bookmark (since we removed the one and
|
|
|
|
- // only bookmark).
|
|
|
|
- const sent_stanza = _converse.api.connection.get().IQ_stanzas.pop();
|
|
|
|
- expect(sent_stanza).toEqualStanza(
|
|
|
|
- stx`<iq from="${_converse.bare_jid}"
|
|
|
|
- to="${_converse.bare_jid}"
|
|
|
|
- id="${sent_stanza.getAttribute('id')}"
|
|
|
|
- type="set"
|
|
|
|
- xmlns="jabber:client">
|
|
|
|
- <pubsub xmlns="http://jabber.org/protocol/pubsub">
|
|
|
|
- <publish node="urn:xmpp:bookmarks:1"/>
|
|
|
|
- <publish-options>
|
|
|
|
- <x type="submit" xmlns="jabber:x:data">
|
|
|
|
- <field type="hidden" var="FORM_TYPE">
|
|
|
|
- <value>http://jabber.org/protocol/pubsub#publish-options</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#persist_items'>
|
|
|
|
- <value>true</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#max_items'>
|
|
|
|
- <value>max</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#send_last_published_item'>
|
|
|
|
- <value>never</value>
|
|
|
|
- </field>
|
|
|
|
- <field var='pubsub#access_model'>
|
|
|
|
- <value>whitelist</value>
|
|
|
|
- </field>
|
|
|
|
- </x>
|
|
|
|
- </publish-options>
|
|
|
|
- </pubsub>
|
|
|
|
- </iq>`
|
|
|
|
- );
|
|
|
|
- }));
|
|
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
|