From 36d2db78c4fb7055f85dc2dc1aa171ea262eb529 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Thu, 29 Nov 2018 11:39:00 +0100 Subject: [PATCH] Use async/await and remove jquery in some tests --- spec/push.js | 191 ++++++++++++----------- spec/register.js | 383 ++++++++++++++++++++++------------------------- 2 files changed, 273 insertions(+), 301 deletions(-) diff --git a/spec/push.js b/spec/push.js index 753e04d56..fc8025d10 100644 --- a/spec/push.js +++ b/spec/push.js @@ -2,10 +2,10 @@ define(["jasmine", "mock", "test-utils"], factory); } (this, function (jasmine, mock, test_utils) { "use strict"; - var $iq = converse.env.$iq; - var Strophe = converse.env.Strophe; - var _ = converse.env._; - var f = converse.env.f; + const $iq = converse.env.$iq; + const Strophe = converse.env.Strophe; + const _ = converse.env._; + const f = converse.env.f; describe("XEP-0357 Push Notifications", function () { @@ -16,40 +16,36 @@ 'jid': 'push-5@client.example', 'node': 'yxs32uqsflafdk3iuqo' }] - }, function (done, _converse) { + }, async function (done, _converse) { const IQ_stanzas = _converse.connection.IQ_stanzas; - let stanza; - expect(_converse.session.get('push_enabled')).toBeFalsy(); - test_utils.waitUntilDiscoConfirmed( + await test_utils.waitUntilDiscoConfirmed( _converse, _converse.push_app_servers[0].jid, [{'category': 'pubsub', 'type':'push'}], - ['urn:xmpp:push:0'], [], 'info') - .then(() => test_utils.waitUntilDiscoConfirmed( + ['urn:xmpp:push:0'], [], 'info'); + await test_utils.waitUntilDiscoConfirmed( _converse, _converse.bare_jid, [{'category': 'account', 'type':'registered'}], - ['urn:xmpp:push:0'], [], 'info')) - .then(() => { - return test_utils.waitUntil(() => - _.filter(IQ_stanzas, iq => iq.nodeTree.querySelector('iq[type="set"] enable[xmlns="urn:xmpp:push:0"]')).pop() - ) - }).then(node => { - const stanza = node.nodeTree; - expect(node.toLocaleString()).toEqual( - ``+ - ''+ - '' - ) - _converse.connection._dataRecv(test_utils.createRequest($iq({ - 'to': _converse.connection.jid, - 'type': 'result', - 'id': stanza.getAttribute('id') - }))); - return test_utils.waitUntil(() => _converse.session.get('push_enabled')) - }).then(done).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); + ['urn:xmpp:push:0'], [], 'info'); + const node = await test_utils.waitUntil(() => + _.filter(IQ_stanzas, iq => iq.nodeTree.querySelector('iq[type="set"] enable[xmlns="urn:xmpp:push:0"]')).pop() + ); + const stanza = node.nodeTree; + expect(node.toLocaleString()).toEqual( + ``+ + ''+ + '' + ) + _converse.connection._dataRecv(test_utils.createRequest($iq({ + 'to': _converse.connection.jid, + 'type': 'result', + 'id': stanza.getAttribute('id') + }))); + await test_utils.waitUntil(() => _converse.session.get('push_enabled')); + done(); })); it("can be enabled for a MUC domain", @@ -60,38 +56,36 @@ 'jid': 'push-5@client.example', 'node': 'yxs32uqsflafdk3iuqo' }] - }, function (done, _converse) { + }, async function (done, _converse) { const IQ_stanzas = _converse.connection.IQ_stanzas, room_jid = 'coven@chat.shakespeare.lit'; expect(_converse.session.get('push_enabled')).toBeFalsy(); - test_utils.openAndEnterChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'oldhag') - .then(() => test_utils.waitUntilDiscoConfirmed( + test_utils.openAndEnterChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'oldhag'); + await test_utils.waitUntilDiscoConfirmed( _converse, _converse.push_app_servers[0].jid, [{'category': 'pubsub', 'type':'push'}], - ['urn:xmpp:push:0'], [], 'info')) - .then(() => { - return test_utils.waitUntilDiscoConfirmed( - _converse, 'chat.shakespeare.lit', - [{'category': 'account', 'type':'registered'}], - ['urn:xmpp:push:0'], [], 'info') - }).then(() => { - return test_utils.waitUntil( - () => _.filter(IQ_stanzas, (iq) => iq.nodeTree.querySelector('iq[type="set"] enable[xmlns="urn:xmpp:push:0"]')).pop()) - }).then(stanza => { - expect(stanza.toLocaleString()).toEqual( - ``+ - ''+ - '' - ) - _converse.connection._dataRecv(test_utils.createRequest($iq({ - 'to': _converse.connection.jid, - 'type': 'result', - 'id': stanza.nodeTree.getAttribute('id') - }))); - return test_utils.waitUntil(() => f.includes('chat.shakespeare.lit', _converse.session.get('push_enabled'))); - }).then(done).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); + ['urn:xmpp:push:0'], [], 'info'); + await test_utils.waitUntilDiscoConfirmed( + _converse, 'chat.shakespeare.lit', + [{'category': 'account', 'type':'registered'}], + ['urn:xmpp:push:0'], [], 'info'); + const stanza = await test_utils.waitUntil( + () => _.filter(IQ_stanzas, (iq) => iq.nodeTree.querySelector('iq[type="set"] enable[xmlns="urn:xmpp:push:0"]')).pop() + ); + expect(stanza.toLocaleString()).toEqual( + ``+ + ''+ + '' + ); + _converse.connection._dataRecv(test_utils.createRequest($iq({ + 'to': _converse.connection.jid, + 'type': 'result', + 'id': stanza.nodeTree.getAttribute('id') + }))); + await test_utils.waitUntil(() => f.includes('chat.shakespeare.lit', _converse.session.get('push_enabled'))); + done(); })); it("can be disabled", @@ -102,33 +96,32 @@ 'node': 'yxs32uqsflafdk3iuqo', 'disable': true }] - }, function (done, _converse) { + }, async function (done, _converse) { const IQ_stanzas = _converse.connection.IQ_stanzas; - let stanza; expect(_converse.session.get('push_enabled')).toBeFalsy(); - test_utils.waitUntilDiscoConfirmed( + await test_utils.waitUntilDiscoConfirmed( _converse, _converse.bare_jid, [{'category': 'account', 'type':'registered'}], - ['urn:xmpp:push:0'], [], 'info') - .then(() => test_utils.waitUntil( + ['urn:xmpp:push:0'], [], 'info'); + const node = await test_utils.waitUntil( () => _.filter(IQ_stanzas, iq => iq.nodeTree.querySelector('iq[type="set"] disable[xmlns="urn:xmpp:push:0"]')).pop() - )).then(node => { - const stanza = node.nodeTree; - expect(node.toLocaleString()).toEqual( - ``+ - ''+ - '' - ) - _converse.connection._dataRecv(test_utils.createRequest($iq({ - 'to': _converse.connection.jid, - 'type': 'result', - 'id': stanza.getAttribute('id') - }))); - return test_utils.waitUntil(() => _converse.session.get('push_enabled')) - }).then(done).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); + ); + const stanza = node.nodeTree; + expect(node.toLocaleString()).toEqual( + ``+ + ''+ + '' + ) + _converse.connection._dataRecv(test_utils.createRequest($iq({ + 'to': _converse.connection.jid, + 'type': 'result', + 'id': stanza.getAttribute('id') + }))); + await test_utils.waitUntil(() => _converse.session.get('push_enabled')) + done(); })); @@ -140,42 +133,42 @@ 'node': 'yxs32uqsflafdk3iuqo', 'secret': 'eruio234vzxc2kla-91' }] - }, function (done, _converse) { + }, async function (done, _converse) { const IQ_stanzas = _converse.connection.IQ_stanzas; - let stanza; expect(_converse.session.get('push_enabled')).toBeFalsy(); - test_utils.waitUntilDiscoConfirmed( + await test_utils.waitUntilDiscoConfirmed( _converse, _converse.push_app_servers[0].jid, [{'category': 'pubsub', 'type':'push'}], - ['urn:xmpp:push:0'], [], 'info') - .then(() => test_utils.waitUntilDiscoConfirmed( + ['urn:xmpp:push:0'], [], 'info'); + await test_utils.waitUntilDiscoConfirmed( _converse, _converse.bare_jid, [{'category': 'account', 'type':'registered'}], - ['urn:xmpp:push:0'], [], 'info')) - .then(() => test_utils.waitUntil( + ['urn:xmpp:push:0'], [], 'info'); + + const node = await test_utils.waitUntil( () => _.filter(IQ_stanzas, iq => iq.nodeTree.querySelector('iq[type="set"] enable[xmlns="urn:xmpp:push:0"]')).pop() - )).then(node => { - const stanza = node.nodeTree; - expect(node.toLocaleString()).toEqual( - ``+ - ''+ - ''+ - 'http://jabber.org/protocol/pubsub#publish-options'+ - 'eruio234vzxc2kla-91'+ - ''+ - ''+ - '' - ) - _converse.connection._dataRecv(test_utils.createRequest($iq({ - 'to': _converse.connection.jid, - 'type': 'result', - 'id': stanza.getAttribute('id') - }))); - return test_utils.waitUntil(() => _converse.session.get('push_enabled')) - }).then(done).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); + ); + const stanza = node.nodeTree; + expect(node.toLocaleString()).toEqual( + ``+ + ''+ + ''+ + 'http://jabber.org/protocol/pubsub#publish-options'+ + 'eruio234vzxc2kla-91'+ + ''+ + ''+ + '' + ) + _converse.connection._dataRecv(test_utils.createRequest($iq({ + 'to': _converse.connection.jid, + 'type': 'result', + 'id': stanza.getAttribute('id') + }))); + await test_utils.waitUntil(() => _converse.session.get('push_enabled')) + done(); })); }); })); diff --git a/spec/register.js b/spec/register.js index 688656553..dd39ce96a 100644 --- a/spec/register.js +++ b/spec/register.js @@ -1,9 +1,10 @@ (function (root, factory) { - define(["jquery", "jasmine", "mock", "test-utils"], factory); -} (this, function ($, jasmine, mock, test_utils) { - var Strophe = converse.env.Strophe; - var $iq = converse.env.$iq; - var _ = converse.env._; + define(["jasmine", "mock", "test-utils"], factory); +} (this, function (jasmine, mock, test_utils) { + const Strophe = converse.env.Strophe; + const $iq = converse.env.$iq; + const { _, sizzle} = converse.env; + const u = converse.env.utils; describe("The Registration Panel", function () { @@ -12,15 +13,13 @@ null, ['connectionInitialized', 'chatBoxesInitialized'], { auto_login: false, allow_registration: false }, - function (done, _converse) { + async function (done, _converse) { - test_utils.waitUntil(() => _converse.chatboxviews.get('controlbox')) - .then(function () { - test_utils.openControlBox(); - var cbview = _converse.chatboxviews.get('controlbox'); - expect($(cbview.el.querySelector('a.register-account')).length).toBe(0); - done(); - }); + await test_utils.waitUntil(() => _converse.chatboxviews.get('controlbox')); + test_utils.openControlBox(); + const cbview = _converse.chatboxviews.get('controlbox'); + expect(cbview.el.querySelectorAll('a.register-account').length).toBe(0); + done(); })); it("can be opened by clicking on the registration tab", @@ -28,26 +27,20 @@ null, ['connectionInitialized', 'chatBoxesInitialized'], { auto_login: false, allow_registration: true }, - function (done, _converse) { + async function (done, _converse) { - test_utils.waitUntil(() => _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel'), 300) - .then(function () { - var cbview = _converse.chatboxviews.get('controlbox'); - test_utils.openControlBox(); - var $panels = $(cbview.el.querySelector('.controlbox-panes')); - var $login = $panels.children().first(); - var $registration = $panels.children().last(); - - var register_link = cbview.el.querySelector('a.register-account'); - expect(register_link.textContent).toBe("Create an account"); - register_link.click(); - test_utils.waitUntil(function () { - return $registration.is(':visible'); - }, 300).then(function () { - expect($login.is(':visible')).toBe(false); - done(); - }); - }); + await test_utils.waitUntil(() => _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel'), 300); + const cbview = _converse.chatboxviews.get('controlbox'); + test_utils.openControlBox(); + const panels = cbview.el.querySelector('.controlbox-panes'); + const login = panels.firstElementChild; + const registration = panels.childNodes[1]; + const register_link = cbview.el.querySelector('a.register-account'); + expect(register_link.textContent).toBe("Create an account"); + register_link.click(); + await test_utils.waitUntil(() => u.isVisible(registration)); + expect(u.isVisible(login)).toBe(false); + done(); })); it("allows the user to choose an XMPP provider's domain", @@ -55,16 +48,12 @@ null, ['connectionInitialized', 'chatBoxesInitialized'], { auto_login: false, allow_registration: true }, - function (done, _converse) { - - test_utils.waitUntil(function () { - return _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel'); - }, 300) - .then(function () { + async function (done, _converse) { + await test_utils.waitUntil(() => _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel')); test_utils.openControlBox(); - var cbview = _converse.chatboxviews.get('controlbox'); - var registerview = cbview.registerpanel; + const cbview = _converse.chatboxviews.get('controlbox'); + const registerview = cbview.registerpanel; spyOn(registerview, 'onProviderChosen').and.callThrough(); registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called spyOn(_converse.connection, 'connect'); @@ -73,21 +62,21 @@ cbview.el.querySelector('.toggle-register-login').click(); // Check the form layout - var $form = $(cbview.el.querySelector('#converse-register')); - expect($form.find('input').length).toEqual(2); - expect($form.find('input').first().attr('name')).toEqual('domain'); - expect($form.find('input').last().attr('type')).toEqual('submit'); + const form = cbview.el.querySelector('#converse-register'); + expect(form.querySelectorAll('input').length).toEqual(2); + expect(form.querySelectorAll('input')[0].getAttribute('name')).toEqual('domain'); + expect(sizzle('input:last', form).pop().getAttribute('type')).toEqual('submit'); // Check that the input[type=domain] input is required - $form.find('input[type=submit]')[0].click(); + const submit_button = form.querySelector('input[type=submit]'); + submit_button.click(); expect(registerview.onProviderChosen).not.toHaveBeenCalled(); // Check that the form is accepted if input[type=domain] has a value - $form.find('input[name=domain]').val('conversejs.org'); - $form.find('input[type=submit]')[0].click(); + form.querySelector('input[name=domain]').value = 'conversejs.org'; + submit_button.click(); expect(registerview.onProviderChosen).toHaveBeenCalled(); expect(_converse.connection.connect).toHaveBeenCalled(); done(); - }); })); it("will render a registration form as received from the XMPP provider", @@ -95,58 +84,55 @@ null, ['connectionInitialized', 'chatBoxesInitialized'], { auto_login: false, allow_registration: true }, - function (done, _converse) { + async function (done, _converse) { - test_utils.waitUntil(function () { - return _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel'); - }, 300).then(function () { - test_utils.openControlBox(); - var cbview = _converse.chatboxviews.get('controlbox'); - cbview.el.querySelector('.toggle-register-login').click(); + await test_utils.waitUntil(() => _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel')); + test_utils.openControlBox(); + const cbview = _converse.chatboxviews.get('controlbox'); + cbview.el.querySelector('.toggle-register-login').click(); - var registerview = _converse.chatboxviews.get('controlbox').registerpanel; - spyOn(registerview, 'onProviderChosen').and.callThrough(); - spyOn(registerview, 'getRegistrationFields').and.callThrough(); - spyOn(registerview, 'onRegistrationFields').and.callThrough(); - spyOn(registerview, 'renderRegistrationForm').and.callThrough(); - registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called - spyOn(_converse.connection, 'connect').and.callThrough(); + const registerview = _converse.chatboxviews.get('controlbox').registerpanel; + spyOn(registerview, 'onProviderChosen').and.callThrough(); + spyOn(registerview, 'getRegistrationFields').and.callThrough(); + spyOn(registerview, 'onRegistrationFields').and.callThrough(); + spyOn(registerview, 'renderRegistrationForm').and.callThrough(); + registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called + spyOn(_converse.connection, 'connect').and.callThrough(); - expect(registerview._registering).toBeFalsy(); - expect(_converse.connection.connected).toBeFalsy(); - registerview.el.querySelector('input[name=domain]').value = 'conversejs.org'; - registerview.el.querySelector('input[type=submit]').click(); - expect(registerview.onProviderChosen).toHaveBeenCalled(); - expect(registerview._registering).toBeTruthy(); - expect(_converse.connection.connect).toHaveBeenCalled(); + expect(registerview._registering).toBeFalsy(); + expect(_converse.connection.connected).toBeFalsy(); + registerview.el.querySelector('input[name=domain]').value = 'conversejs.org'; + registerview.el.querySelector('input[type=submit]').click(); + expect(registerview.onProviderChosen).toHaveBeenCalled(); + expect(registerview._registering).toBeTruthy(); + expect(_converse.connection.connect).toHaveBeenCalled(); - var stanza = new Strophe.Builder("stream:features", { - 'xmlns:stream': "http://etherx.jabber.org/streams", - 'xmlns': "jabber:client" - }) - .c('register', {xmlns: "http://jabber.org/features/iq-register"}).up() - .c('mechanisms', {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}); - _converse.connection._connect_cb(test_utils.createRequest(stanza)); + let stanza = new Strophe.Builder("stream:features", { + 'xmlns:stream': "http://etherx.jabber.org/streams", + 'xmlns': "jabber:client" + }) + .c('register', {xmlns: "http://jabber.org/features/iq-register"}).up() + .c('mechanisms', {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}); + _converse.connection._connect_cb(test_utils.createRequest(stanza)); - expect(registerview.getRegistrationFields).toHaveBeenCalled(); + expect(registerview.getRegistrationFields).toHaveBeenCalled(); - stanza = $iq({ - 'type': 'result', - 'id': 'reg1' - }).c('query', {'xmlns': 'jabber:iq:register'}) - .c('instructions') - .t('Please choose a username, password and provide your email address').up() - .c('username').up() - .c('password').up() - .c('email'); - _converse.connection._dataRecv(test_utils.createRequest(stanza)); - expect(registerview.onRegistrationFields).toHaveBeenCalled(); - expect(registerview.renderRegistrationForm).toHaveBeenCalled(); - expect(registerview.el.querySelectorAll('input').length).toBe(5); - expect(registerview.el.querySelectorAll('input[type=submit]').length).toBe(1); - expect(registerview.el.querySelectorAll('input[type=button]').length).toBe(1); - done(); - }); + stanza = $iq({ + 'type': 'result', + 'id': 'reg1' + }).c('query', {'xmlns': 'jabber:iq:register'}) + .c('instructions') + .t('Please choose a username, password and provide your email address').up() + .c('username').up() + .c('password').up() + .c('email'); + _converse.connection._dataRecv(test_utils.createRequest(stanza)); + expect(registerview.onRegistrationFields).toHaveBeenCalled(); + expect(registerview.renderRegistrationForm).toHaveBeenCalled(); + expect(registerview.el.querySelectorAll('input').length).toBe(5); + expect(registerview.el.querySelectorAll('input[type=submit]').length).toBe(1); + expect(registerview.el.querySelectorAll('input[type=button]').length).toBe(1); + done(); })); it("will set form_type to legacy and submit it as legacy", @@ -154,60 +140,56 @@ null, ['connectionInitialized', 'chatBoxesInitialized'], { auto_login: false, allow_registration: true }, - function (done, _converse) { + async function (done, _converse) { - test_utils.waitUntil(function () { - return _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel'); - }, 300) - .then(function () { - test_utils.openControlBox(); - var cbview = _converse.chatboxviews.get('controlbox'); - cbview.el.querySelector('.toggle-register-login').click(); + await test_utils.waitUntil(() => _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel')); + test_utils.openControlBox(); + const cbview = _converse.chatboxviews.get('controlbox'); + cbview.el.querySelector('.toggle-register-login').click(); - var registerview = cbview.registerpanel; - spyOn(registerview, 'onProviderChosen').and.callThrough(); - spyOn(registerview, 'getRegistrationFields').and.callThrough(); - spyOn(registerview, 'onRegistrationFields').and.callThrough(); - spyOn(registerview, 'renderRegistrationForm').and.callThrough(); - registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called - spyOn(_converse.connection, 'connect').and.callThrough(); + const registerview = cbview.registerpanel; + spyOn(registerview, 'onProviderChosen').and.callThrough(); + spyOn(registerview, 'getRegistrationFields').and.callThrough(); + spyOn(registerview, 'onRegistrationFields').and.callThrough(); + spyOn(registerview, 'renderRegistrationForm').and.callThrough(); + registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called + spyOn(_converse.connection, 'connect').and.callThrough(); - registerview.el.querySelector('input[name=domain]').value = 'conversejs.org'; - registerview.el.querySelector('input[type=submit]').click(); + registerview.el.querySelector('input[name=domain]').value = 'conversejs.org'; + registerview.el.querySelector('input[type=submit]').click(); - var stanza = new Strophe.Builder("stream:features", { - 'xmlns:stream': "http://etherx.jabber.org/streams", - 'xmlns': "jabber:client" - }) - .c('register', {xmlns: "http://jabber.org/features/iq-register"}).up() - .c('mechanisms', {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}); - _converse.connection._connect_cb(test_utils.createRequest(stanza)); - stanza = $iq({ - 'type': 'result', - 'id': 'reg1' - }).c('query', {'xmlns': 'jabber:iq:register'}) - .c('instructions') - .t('Please choose a username, password and provide your email address').up() - .c('username').up() - .c('password').up() - .c('email'); - _converse.connection._dataRecv(test_utils.createRequest(stanza)); - expect(registerview.form_type).toBe('legacy'); + let stanza = new Strophe.Builder("stream:features", { + 'xmlns:stream': "http://etherx.jabber.org/streams", + 'xmlns': "jabber:client" + }) + .c('register', {xmlns: "http://jabber.org/features/iq-register"}).up() + .c('mechanisms', {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}); + _converse.connection._connect_cb(test_utils.createRequest(stanza)); + stanza = $iq({ + 'type': 'result', + 'id': 'reg1' + }).c('query', {'xmlns': 'jabber:iq:register'}) + .c('instructions') + .t('Please choose a username, password and provide your email address').up() + .c('username').up() + .c('password').up() + .c('email'); + _converse.connection._dataRecv(test_utils.createRequest(stanza)); + expect(registerview.form_type).toBe('legacy'); - $(registerview.el.querySelector('input[name=username]')).val('testusername'); - $(registerview.el.querySelector('input[name=password]')).val('testpassword'); - $(registerview.el.querySelector('input[name=email]')).val('test@email.local'); + registerview.el.querySelector('input[name=username]').value = 'testusername'; + registerview.el.querySelector('input[name=password]').value = 'testpassword'; + registerview.el.querySelector('input[name=email]').value = 'test@email.local'; - spyOn(_converse.connection, 'send'); + spyOn(_converse.connection, 'send'); - registerview.el.querySelector('input[type=submit]').click(); + registerview.el.querySelector('input[type=submit]').click(); - expect(_converse.connection.send).toHaveBeenCalled(); - var $stanza = $(_converse.connection.send.calls.argsFor(0)[0].tree()); - expect($stanza.children('query').children().length).toBe(3); - expect($stanza.children('query').children()[0].tagName).toBe('username'); - done(); - }); + expect(_converse.connection.send).toHaveBeenCalled(); + stanza = _converse.connection.send.calls.argsFor(0)[0].tree(); + expect(stanza.querySelector('query').childNodes.length).toBe(3); + expect(stanza.querySelector('query').firstElementChild.tagName).toBe('username'); + done(); })); it("will set form_type to xform and submit it as xform", @@ -215,75 +197,72 @@ null, ['connectionInitialized', 'chatBoxesInitialized'], { auto_login: false, allow_registration: true }, - function (done, _converse) { + async function (done, _converse) { - test_utils.waitUntil(function () { - return _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel'); - }, 300).then(function () { - test_utils.openControlBox(); - var cbview = _converse.chatboxviews.get('controlbox'); - cbview.el.querySelector('.toggle-register-login').click(); - var registerview = _converse.chatboxviews.get('controlbox').registerpanel; - spyOn(registerview, 'onProviderChosen').and.callThrough(); - spyOn(registerview, 'getRegistrationFields').and.callThrough(); - spyOn(registerview, 'onRegistrationFields').and.callThrough(); - spyOn(registerview, 'renderRegistrationForm').and.callThrough(); - registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called - spyOn(_converse.connection, 'connect').and.callThrough(); + await test_utils.waitUntil(() => _.get(_converse.chatboxviews.get('controlbox'), 'registerpanel')); + test_utils.openControlBox(); + const cbview = _converse.chatboxviews.get('controlbox'); + cbview.el.querySelector('.toggle-register-login').click(); + const registerview = _converse.chatboxviews.get('controlbox').registerpanel; + spyOn(registerview, 'onProviderChosen').and.callThrough(); + spyOn(registerview, 'getRegistrationFields').and.callThrough(); + spyOn(registerview, 'onRegistrationFields').and.callThrough(); + spyOn(registerview, 'renderRegistrationForm').and.callThrough(); + registerview.delegateEvents(); // We need to rebind all events otherwise our spy won't be called + spyOn(_converse.connection, 'connect').and.callThrough(); - registerview.el.querySelector('input[name=domain]').value = 'conversejs.org'; - registerview.el.querySelector('input[type=submit]').click(); + registerview.el.querySelector('input[name=domain]').value = 'conversejs.org'; + registerview.el.querySelector('input[type=submit]').click(); - var stanza = new Strophe.Builder("stream:features", { - 'xmlns:stream': "http://etherx.jabber.org/streams", - 'xmlns': "jabber:client" - }) - .c('register', {xmlns: "http://jabber.org/features/iq-register"}).up() - .c('mechanisms', {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}); - _converse.connection._connect_cb(test_utils.createRequest(stanza)); - stanza = $iq({ - 'type': 'result', - 'id': 'reg1' - }).c('query', {'xmlns': 'jabber:iq:register'}) - .c('instructions') - .t('Using xform data').up() - .c('x', { 'xmlns': 'jabber:x:data', 'type': 'form' }) - .c('instructions').t('xform instructions').up() - .c('field', {'type': 'text-single', 'var': 'username'}).c('required').up().up() - .c('field', {'type': 'text-private', 'var': 'password'}).c('required').up().up() - .c('field', {'type': 'text-single', 'var': 'email'}).c('required').up().up(); - _converse.connection._dataRecv(test_utils.createRequest(stanza)); - expect(registerview.form_type).toBe('xform'); + let stanza = new Strophe.Builder("stream:features", { + 'xmlns:stream': "http://etherx.jabber.org/streams", + 'xmlns': "jabber:client" + }) + .c('register', {xmlns: "http://jabber.org/features/iq-register"}).up() + .c('mechanisms', {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}); + _converse.connection._connect_cb(test_utils.createRequest(stanza)); + stanza = $iq({ + 'type': 'result', + 'id': 'reg1' + }).c('query', {'xmlns': 'jabber:iq:register'}) + .c('instructions') + .t('Using xform data').up() + .c('x', { 'xmlns': 'jabber:x:data', 'type': 'form' }) + .c('instructions').t('xform instructions').up() + .c('field', {'type': 'text-single', 'var': 'username'}).c('required').up().up() + .c('field', {'type': 'text-private', 'var': 'password'}).c('required').up().up() + .c('field', {'type': 'text-single', 'var': 'email'}).c('required').up().up(); + _converse.connection._dataRecv(test_utils.createRequest(stanza)); + expect(registerview.form_type).toBe('xform'); - $(registerview.el.querySelector('input[name=username]')).val('testusername'); - $(registerview.el.querySelector('input[name=password]')).val('testpassword'); - $(registerview.el.querySelector('input[name=email]')).val('test@email.local'); + registerview.el.querySelector('input[name=username]').value = 'testusername'; + registerview.el.querySelector('input[name=password]').value = 'testpassword'; + registerview.el.querySelector('input[name=email]').value = 'test@email.local'; - spyOn(_converse.connection, 'send'); + spyOn(_converse.connection, 'send'); - registerview.el.querySelector('input[type=submit]').click(); + registerview.el.querySelector('input[type=submit]').click(); - expect(_converse.connection.send).toHaveBeenCalled(); - stanza = _converse.connection.send.calls.argsFor(0)[0].tree(); - expect(Strophe.serialize(stanza).toLocaleString().trim().replace(/(\n|\s{2,})/g, '')).toEqual( - ''+ - ''+ - ''+ - ''+ - 'testusername'+ - ''+ - ''+ - 'testpassword'+ - ''+ - ''+ - 'test@email.local'+ - ''+ - ''+ - ''+ - '' - ); - done(); - }); + expect(_converse.connection.send).toHaveBeenCalled(); + stanza = _converse.connection.send.calls.argsFor(0)[0].tree(); + expect(Strophe.serialize(stanza).toLocaleString().trim().replace(/(\n|\s{2,})/g, '')).toEqual( + ''+ + ''+ + ''+ + ''+ + 'testusername'+ + ''+ + ''+ + 'testpassword'+ + ''+ + ''+ + 'test@email.local'+ + ''+ + ''+ + ''+ + '' + ); + done(); })); }); }));