diff --git a/addons/mail/static/src/views/web/activity/activity_controller.js b/addons/mail/static/src/views/web/activity/activity_controller.js index 63ab433f928..829c21540b7 100644 --- a/addons/mail/static/src/views/web/activity/activity_controller.js +++ b/addons/mail/static/src/views/web/activity/activity_controller.js @@ -54,6 +54,11 @@ export class ActivityController extends Component { }); } + getSearchProps() { + const { comparision, context, domain, groupBy, orderBy } = this.env.searchModel; + return { comparision, context, domain, groupBy, orderBy }; + } + scheduleActivity() { this.dialog.add(SelectCreateDialog, { resModel: this.props.resModel, @@ -64,7 +69,7 @@ export class ActivityController extends Component { context: this.props.context, onSelected: async (resIds) => { await this.activity.schedule(this.props.resModel, resIds); - this.model.load(this.props); + this.model.load(this.getSearchProps()); }, }); } @@ -86,7 +91,7 @@ export class ActivityController extends Component { }, }, { - onClose: () => this.model.load(this.props), + onClose: () => this.model.load(this.getSearchProps()), } ); } @@ -119,7 +124,7 @@ export class ActivityController extends Component { archInfo: this.props.archInfo, groupedActivities: this.model.activityData.grouped_activities, scheduleActivity: this.scheduleActivity.bind(this), - onReloadData: () => this.model.load(this.props), + onReloadData: () => this.model.load(this.getSearchProps()), onEmptyCell: this.openActivityFormView.bind(this), onSendMailTemplate: this.sendMailTemplate.bind(this), openRecord: this.openRecord.bind(this), diff --git a/addons/test_mail/static/tests/activity_tests.js b/addons/test_mail/static/tests/activity_tests.js index 129afc8d7ad..81879c83aac 100644 --- a/addons/test_mail/static/tests/activity_tests.js +++ b/addons/test_mail/static/tests/activity_tests.js @@ -2,6 +2,7 @@ import { startServer } from "@bus/../tests/helpers/mock_python_environment"; +import { ActivityController } from "@mail/views/web/activity/activity_controller"; import { ActivityModel } from "@mail/views/web/activity/activity_model"; import { ActivityRenderer } from "@mail/views/web/activity/activity_renderer"; import { start } from "@mail/../tests/helpers/test_utils"; @@ -22,6 +23,22 @@ const { DateTime } = luxon; let serverData; let pyEnv; +async function openViewAndPatchDoAction(assert) { + const { env, openView } = await start({ + serverData, + }); + await openView({ + res_model: "mail.test.activity", + views: [[false, "activity"]], + }); + patchWithCleanup(env.services.action, { + doAction(action, options) { + assert.step("doAction"); + options.onClose(); + }, + }); +} + QUnit.module("test_mail", {}, function () { QUnit.module("activity view", { async beforeEach() { @@ -883,37 +900,99 @@ QUnit.module("test_mail", {}, function () { ); QUnit.test("activity view: Domain should not reset on load", async function (assert) { + Object.assign(serverData.views, { + "mail.test.activity,false,list": + '', + }); + const { env, openView } = await start({ + serverData, + }); + await openView({ + res_model: "mail.test.activity", + views: [[false, "activity"]], + domain: [['id', '=', 1]], + }); + patchWithCleanup(env.services.action, { + doAction(action, options) { + assert.step("doAction"); + options.onClose(); + }, + }); + + await click(document.querySelector(".o_activity_view .o_record_selector")); + // search create dialog + await click(document.querySelector(".modal-lg .o_data_row .o_data_cell")); + assert.verifySteps(["doAction"]); + + await click(document.querySelector(".o_activity_view .o_record_selector")); + // again open search create dialog + assert.strictEqual( + document.querySelectorAll(".modal-lg .o_data_row").length, + 1, + "Should contains only one record after calling schedule activity which load view again" + ); + }); + + QUnit.test( + "activity view: 'scheduleActivity' does not add activity_ids condition as selectCreateDialog domain", + async function (assert) { + patchWithCleanup(ActivityController.prototype, { + scheduleActivity() { + super.scheduleActivity(); + assert.step(JSON.stringify(this.getSearchProps().domain)); + }, + }); Object.assign(serverData.views, { "mail.test.activity,false,list": '', }); - const { env, openView } = await start({ - serverData, - }); - await openView({ - res_model: "mail.test.activity", - views: [[false, "activity"]], - domain: [['id', '=', 1]], - }); - patchWithCleanup(env.services.action, { - doAction(action, options) { - assert.step("doAction"); - options.onClose(); + await openViewAndPatchDoAction(assert); + + // open search create dialog and schedule an activity + await click(document.querySelector(".o_activity_view .o_record_selector")); + await click(document.querySelectorAll(".modal-lg .o_data_row .o_data_cell")[0]); + + // again open search create dialog + await click(document.querySelector(".o_activity_view .o_record_selector")); + assert.verifySteps(["[]", "doAction", "[]"]); + } + ); + + QUnit.test( + "activity view: 'onClose' of 'openActivityFormView' does not add activity_ids condition as selectCreateDialog domain", + async function (assert) { + patchWithCleanup(ActivityController.prototype, { + openActivityFormView(resId, activityTypeId) { + super.openActivityFormView(resId, activityTypeId); + assert.step(JSON.stringify(this.getSearchProps().domain)); }, }); + await openViewAndPatchDoAction(assert); - await click(document.querySelector(".o_activity_view .o_record_selector")); - // search create dialog - await click(document.querySelector(".modal-lg .o_data_row .o_data_cell")); - assert.verifySteps(["doAction"]); - - await click(document.querySelector(".o_activity_view .o_record_selector")); - // again open search create dialog - assert.strictEqual( - document.querySelectorAll(".modal-lg .o_data_row").length, - 1, - "Should contains only one record after calling schedule activity which load view again" + //schedule an activity on an empty activity cell + await click( + document.querySelector(".o_activity_view .o_data_row .o_activity_empty_cell") ); + assert.verifySteps(["doAction", "[]"]); + } + ); + + QUnit.test( + "activity view: 'onReloadData' does not add activity_ids condition as selectCreateDialog domain", + async function (assert) { + patchWithCleanup(ActivityController.prototype, { + get rendererProps() { + const rendererProps = { ...super.rendererProps }; + assert.step(JSON.stringify(this.getSearchProps().domain)); + return rendererProps; + }, + }); + await openViewAndPatchDoAction(assert); + + //schedule another activity on an activity cell with a scheduled activity + await click(document.querySelector(".today .o-mail-ActivityCell-deadline")); + await click($(".o-mail-ActivityListPopover button:contains(Schedule an activity)")[0]); + assert.verifySteps(["[]", "doAction", "[]", "[]"]); } );