summaryrefslogtreecommitdiff
path: root/addons/mail/static/tests/document_thread_window_tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/static/tests/document_thread_window_tests.js')
-rw-r--r--addons/mail/static/tests/document_thread_window_tests.js276
1 files changed, 276 insertions, 0 deletions
diff --git a/addons/mail/static/tests/document_thread_window_tests.js b/addons/mail/static/tests/document_thread_window_tests.js
new file mode 100644
index 00000000000..c9814ada195
--- /dev/null
+++ b/addons/mail/static/tests/document_thread_window_tests.js
@@ -0,0 +1,276 @@
+odoo.define('mail.document_thread_window_tests', function (require) {
+"use strict";
+
+var mailTestUtils = require('mail.testUtils');
+var MessagingMenu = require('mail.systray.MessagingMenu');
+
+var testUtils = require('web.test_utils');
+
+QUnit.module('mail', {}, function () {
+
+QUnit.module('DocumentThreadWindow', {
+ beforeEach: function () {
+ var partnerID = 44;
+ this.data = {
+ 'mail.message': {
+ fields: {
+ body: {
+ string: "Contents",
+ type: 'html',
+ },
+ author_id: {
+ string: "Author",
+ type: 'many2one',
+ relation: 'res.partner',
+ },
+ channel_ids: {
+ string: "Channels",
+ type: 'many2many',
+ relation: 'mail.channel',
+ },
+ starred: {
+ string: "Starred",
+ type: 'boolean',
+ },
+ needaction: {
+ string: "Need Action",
+ type: 'boolean',
+ },
+ needaction_partner_ids: {
+ string: 'Needaction Partner IDs',
+ type: 'one2many',
+ relation: 'res.partner',
+ },
+ starred_partner_ids: {
+ string: "partner ids",
+ type: 'integer',
+ }
+ },
+ records: [{
+ id: 1,
+ author_id: [1, 'Me'],
+ body: '<p>Some Message on a document</p>',
+ channel_ids: [],
+ model: 'some.res.model',
+ record_name: "Some Record",
+ res_id: 1,
+ }, {
+ author_id: [2, "Demo"],
+ body: "<p>*MessageOnDocument*</p>",
+ id: 2,
+ model: 'some.res.model',
+ needaction: true,
+ needaction_partner_ids: [partnerID],
+ record_name: "Some Record",
+ res_id: 1,
+ }],
+ },
+ 'some.res.model': {
+ fields: {
+ message_ids: {string: 'Messages', type: 'one2many'},
+ },
+ records: [{
+ id: 1,
+ message_ids: [1, 2],
+ }],
+ },
+ initMessaging: {
+ channel_slots: {
+ channel_channel: [],
+ },
+ },
+ };
+ this.session = {
+ partner_id: partnerID, // so that needaction messages are treated as needactions
+ };
+ this.services = mailTestUtils.getMailServices();
+ },
+});
+
+QUnit.test('open a document thread in a thread window', function (assert) {
+ assert.expect(6);
+
+ var messagingMenu = new MessagingMenu();
+ testUtils.addMockEnvironment(messagingMenu, {
+ services: this.services,
+ data: this.data,
+ session: this.session,
+ mockRPC: function (route, args) {
+ if (args.method === 'read') {
+ assert.deepEqual(args.args, [[1], ['message_ids']],
+ "should read the message_ids on the document");
+ }
+ if (args.method === 'message_format') {
+ assert.deepEqual(args.args[0], [1],
+ "should only fetch the unknown message");
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+ messagingMenu.appendTo($('#qunit-fixture'));
+
+ // toggle the messaging menu and open the documentThread
+ messagingMenu.$('.dropdown-toggle').click();
+ assert.strictEqual(messagingMenu.$('.o_mail_preview').length, 1,
+ "should display one preview");
+ messagingMenu.$('.o_mail_preview').click();
+
+ assert.strictEqual($('.o_thread_window').length, 1,
+ "should have open the DocumentThread in a thread window");
+ assert.strictEqual($('.o_thread_window .o_thread_message').length, 2,
+ "should have fetched the history of the documentThread");
+ assert.strictEqual($('.o_thread_window_title').text().trim(), 'Some Record',
+ "should display the display_name of the record in the header");
+
+ messagingMenu.destroy();
+});
+
+QUnit.test('expand a document thread window', function (assert) {
+ assert.expect(4);
+
+ var messagingMenu = new MessagingMenu();
+ testUtils.addMockEnvironment(messagingMenu, {
+ services: this.services,
+ data: this.data,
+ session: this.session,
+ intercepts: {
+ do_action: function (ev) {
+ assert.deepEqual(ev.data.action, {
+ res_id: 1,
+ res_model: 'some.res.model',
+ type: 'ir.actions.act_window',
+ views: [[false, 'form']],
+ }, "should open the document in form view");
+ },
+ },
+ });
+ messagingMenu.appendTo($('#qunit-fixture'));
+
+ // toggle the messaging menu and open the documentThread
+ messagingMenu.$('.dropdown-toggle').click();
+ assert.strictEqual(messagingMenu.$('.o_mail_preview').length, 1,
+ "should display one preview");
+ messagingMenu.$('.o_mail_preview').click();
+ assert.strictEqual($('.o_thread_window').length, 1,
+ "should have open the DocumentThread in a thread window");
+
+ assert.strictEqual($('.o_thread_window .o_thread_window_expand').attr('title'),
+ 'Open document', "button should have correct title");
+
+ // click to expand
+ $('.o_thread_window .o_thread_window_expand').click();
+
+ messagingMenu.destroy();
+});
+
+QUnit.test('post messages in a document thread window', function (assert) {
+ assert.expect(8);
+
+ var newMessageBody = 'Some message';
+ var newMessage = {
+ id: 6783,
+ author_id: [this.session.partner_id, 'Me'],
+ body: newMessageBody,
+ channel_ids: [],
+ model: 'some.res.model',
+ record_name: "Some Record",
+ res_id: 1,
+ };
+ var messagingMenu = new MessagingMenu();
+ testUtils.addMockEnvironment(messagingMenu, {
+ services: this.services,
+ data: this.data,
+ session: this.session,
+ mockRPC: function (route, args) {
+ if (args.method === 'message_post') {
+ assert.strictEqual(args.model, 'some.res.model',
+ "should post the message on the correct model");
+ assert.deepEqual(args.args, [1],
+ "should post the message on the correct record");
+ assert.strictEqual(args.kwargs.body, newMessageBody,
+ "should post correct message");
+
+ // add the message to the fake DB
+ this.data['mail.message'].records.push(newMessage);
+ this.data['some.res.model'].records[0].message_ids.push(6783);
+ return $.when(6783);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+ testUtils.intercept(messagingMenu, 'call_service', function (ev) {
+ if (ev.data.service === 'local_storage' && ev.data.method === 'setItem' &&
+ ev.data.args[0] === 'mail.document_threads_last_message') {
+ assert.strictEqual(ev.data.args[1], JSON.stringify(newMessage),
+ "should write sent message in local storage, to share info with other tabs");
+ }
+ }, true);
+ messagingMenu.appendTo($('#qunit-fixture'));
+
+ // toggle the messaging menu and open the documentThread
+ messagingMenu.$('.dropdown-toggle').click();
+ assert.strictEqual(messagingMenu.$('.o_mail_preview').length, 1,
+ "should display one preview");
+ messagingMenu.$('.o_mail_preview').click();
+ assert.strictEqual($('.o_thread_window').length, 1,
+ "should have open the DocumentThread in a thread window");
+ assert.strictEqual($('.o_thread_window .o_thread_message').length, 2,
+ "should display 2 messages in the thread window");
+
+ // post a message
+ $('.o_thread_window .o_composer_text_field')
+ .val(newMessageBody)
+ .trigger($.Event('keydown', {which: $.ui.keyCode.ENTER}));
+
+ assert.strictEqual($('.o_thread_window .o_thread_message').length, 3,
+ "should display 3 messages in the thread window");
+
+ messagingMenu.destroy();
+});
+
+QUnit.test('open, fold, unfold and close a document thread window', function (assert) {
+ assert.expect(8);
+
+ var messagingMenu = new MessagingMenu();
+ testUtils.addMockEnvironment(messagingMenu, {
+ services: this.services,
+ data: this.data,
+ session: this.session,
+ });
+ testUtils.intercept(messagingMenu, 'call_service', function (ev) {
+ if (ev.data.service === 'local_storage' && ev.data.method === 'setItem') {
+ assert.step(ev.data.args);
+ }
+ }, true);
+ messagingMenu.appendTo($('#qunit-fixture'));
+
+ // toggle the messaging menu and open the documentThread
+ messagingMenu.$('.dropdown-toggle').click();
+ assert.strictEqual(messagingMenu.$('.o_mail_preview').length, 1,
+ "should display one preview");
+ messagingMenu.$('.o_mail_preview').click();
+ assert.strictEqual($('.o_thread_window').length, 1,
+ "should have open the DocumentThread in a thread window");
+ assert.strictEqual($('.o_thread_window .o_thread_message').length, 2,
+ "should display 2 messages in the thread window");
+
+ // fold and unfold thread window
+ $('.o_thread_window .o_thread_window_title').click();
+ $('.o_thread_window .o_thread_window_title').click();
+
+ // close thread window
+ $('.o_thread_window .o_thread_window_close').click();
+
+ assert.verifySteps([
+ ['mail.document_threads_state', "{\"some.res.model_1\":{\"name\":\"Some Record\",\"windowState\":\"open\"}}"],
+ ['mail.document_threads_state', "{\"some.res.model_1\":{\"name\":\"Some Record\",\"windowState\":\"folded\"}}"],
+ ['mail.document_threads_state', "{\"some.res.model_1\":{\"name\":\"Some Record\",\"windowState\":\"open\"}}"],
+ ['mail.document_threads_state', "{\"some.res.model_1\":{\"name\":\"Some Record\",\"windowState\":\"closed\"}}"],
+ ]);
+
+ messagingMenu.destroy();
+});
+
+});
+
+});