123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- (function (root, factory) {
- define(["jquery", "jasmine", "mock", "test-utils"], factory);
- } (this, function ($, jasmine, mock, test_utils) {
- var Strophe = converse.env.Strophe;
- var b64_sha1 = converse.env.b64_sha1;
- var $pres = converse.env.$pres;
- var _ = converse.env._;
- describe("A chatbox", function() {
-
- it("contains a button for starting an encrypted chat session",
- mock.initConverseWithPromises(
- null, ['rosterGroupsFetched'], {},
- function (done, _converse) {
- var timeout = true, $toolbar, view;
- test_utils.createContacts(_converse, 'current');
- test_utils.openControlBox();
- test_utils.waitUntil(function () {
- return $(_converse.rosterview.el).find('.roster-group').length;
- }, 300).then(function () {
- // TODO: More tests can be added here...
- var contact_jid = mock.cur_names[2].replace(/ /g,'.').toLowerCase() + '@localhost';
- test_utils.openChatBoxFor(_converse, contact_jid);
- view = _converse.chatboxviews.get(contact_jid);
- $toolbar = $(view.el).find('ul.chat-toolbar');
- expect($toolbar.find('.toggle-otr').length).toBe(1);
- // Register spies
- spyOn(view, 'toggleOTRMenu').and.callThrough();
- view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
- timeout = false;
- $toolbar[0].querySelector('.toggle-otr').click();
- return test_utils.waitUntil(function () {
- return view.el.querySelector('.otr-menu').offsetHeight;
- }, 300)
- }).then(function () {
- expect(view.toggleOTRMenu).toHaveBeenCalled();
- done();
- });
- }));
- describe("with an active OTR session", function() {
- it("will not show the spoiler toolbar button",
- mock.initConverseWithPromises(
- null, ['rosterGroupsFetched'], {},
- function (done, _converse) {
- test_utils.createContacts(_converse, 'current');
- var contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
- // XXX: We need to send a presence from the contact, so that we
- // have a resource, that resource is then queried to see
- // whether Strophe.NS.SPOILER is supported, in which case
- // the spoiler button will appear.
- var presence = $pres({
- 'from': contact_jid+'/phone',
- 'to': 'dummy@localhost'
- });
- _converse.connection._dataRecv(test_utils.createRequest(presence));
- test_utils.openChatBoxFor(_converse, contact_jid);
- test_utils.waitUntilDiscoConfirmed(_converse, contact_jid+'/phone', [], [Strophe.NS.SPOILER]).then(function () {
- var spoiler_toggle;
- var view = _converse.chatboxviews.get(contact_jid);
- spyOn(view, 'addSpoilerButton').and.callThrough();
- view.model.set('otr_status', 1);
- test_utils.waitUntil(function () {
- return _.isNull(view.el.querySelector('.toggle-compose-spoiler'));
- }).then(function () {
- spoiler_toggle = view.el.querySelector('.toggle-compose-spoiler');
- expect(spoiler_toggle).toBe(null);
- view.model.set('otr_status', 3);
- return test_utils.waitUntil(function () {
- return !_.isNull(view.el.querySelector('.toggle-compose-spoiler'));
- });
- }).then(function () {
- spoiler_toggle = view.el.querySelector('.toggle-compose-spoiler');
- expect(spoiler_toggle).not.toBe(null);
- view.model.set('otr_status', 2);
- return test_utils.waitUntil(function () {
- return _.isNull(view.el.querySelector('.toggle-compose-spoiler'));
- });
- }).then(function () {
- spoiler_toggle = view.el.querySelector('.toggle-compose-spoiler');
- expect(spoiler_toggle).toBe(null);
- view.model.set('otr_status', 4);
- return test_utils.waitUntil(function () {
- return !_.isNull(view.el.querySelector('.toggle-compose-spoiler'));
- });
- }).then(function () {
- spoiler_toggle = view.el.querySelector('.toggle-compose-spoiler');
- expect(spoiler_toggle).not.toBe(null);
- done();
- });
- });
- }));
- });
- });
- describe("The OTR module", function() {
- it("will add processing hints to sent out encrypted <message> stanzas",
- mock.initConverseWithPromises(
- null, ['rosterGroupsFetched'], {},
- function (done, _converse) {
- test_utils.openControlBox();
- test_utils.createContacts(_converse, 'current');
- var UNVERIFIED = 1, UNENCRYPTED = 0;
- var contact_name = mock.cur_names[0];
- var contact_jid = contact_name.replace(/ /g,'.').toLowerCase() + '@localhost';
- test_utils.openChatBoxFor(_converse, contact_jid);
- var chatview = _converse.chatboxviews.get(contact_jid);
- chatview.model.set('otr_status', UNVERIFIED);
- var stanza = chatview.model.createMessageStanza(new _converse.Message({ message: 'hello world'}));
- var $hints = $(stanza.nodeTree).find('[xmlns="'+Strophe.NS.HINTS+'"]');
- expect($hints.length).toBe(3);
- expect($hints.get(0).tagName).toBe('no-store');
- expect($hints.get(1).tagName).toBe('no-permanent-store');
- expect($hints.get(2).tagName).toBe('no-copy');
- chatview.model.set('otr_status', UNENCRYPTED); // Reset again to UNENCRYPTED
- done();
- }));
- describe("An OTR Chat Message", function () {
- it("will not be carbon copied when it's sent out",
- mock.initConverseWithPromises(
- null, ['rosterGroupsFetched'], {},
- function (done, _converse) {
- test_utils.openControlBox();
- test_utils.createContacts(_converse, 'current');
- var msgtext = "?OTR,1,3,?OTR:AAIDAAAAAAEAAAABAAAAwCQ8HKsag0y0DGKsneo0kzKu1ua5L93M4UKTkCf1I2kbm2RgS5kIxDTxrTj3wVRB+H5Si86E1fKtuBgsDf/bKkGTM0h/49vh5lOD9HkE8cnSrFEn5GN,";
- var sender_jid = mock.cur_names[3].replace(/ /g,'.').toLowerCase() + '@localhost';
- _converse.api.chats.open(sender_jid);
- var chatbox = _converse.chatboxes.get(sender_jid);
- spyOn(_converse.connection, 'send');
- chatbox.set('otr_status', 1); // Set OTR status to UNVERIFIED, to mock an encrypted session
- chatbox.sendMessage(new _converse.Message({'message': msgtext}));
- var $sent = $(_converse.connection.send.calls.argsFor(0)[0].tree());
- expect($sent.find('body').siblings('private').length).toBe(1);
- expect($sent.find('private').length).toBe(1);
- expect($sent.find('private').attr('xmlns')).toBe('urn:xmpp:carbons:2');
- chatbox.set('otr_status', 0); // Reset again to UNENCRYPTED
- done();
- }));
- });
- });
- }));
|