From 063e38c4fd565178e43489af173e31b5e06bfabd Mon Sep 17 00:00:00 2001 From: Simon Genin Date: Fri, 2 Jul 2021 06:42:21 +0000 Subject: [PATCH] [IMP] web,mail: add resetLocalState to rendererWrapper add resetLocalState method to rendererWrapper and test activity view is not crashed on on_destroy_callback task-2466057 closes odoo/odoo#73022 Signed-off-by: Simon Genin (ges@odoo) --- addons/mail/static/tests/activity_tests.js | 39 +++++++++++++++++++ .../src/legacy/js/views/renderer_wrapper.js | 1 + .../static/tests/legacy/views/form_tests.js | 1 + 3 files changed, 41 insertions(+) diff --git a/addons/mail/static/tests/activity_tests.js b/addons/mail/static/tests/activity_tests.js index 2e37e8f4123..92f264fb9f7 100644 --- a/addons/mail/static/tests/activity_tests.js +++ b/addons/mail/static/tests/activity_tests.js @@ -1,10 +1,13 @@ /** @odoo-module **/ +import ActivityRenderer from '@mail/js/views/activity/activity_renderer'; import ActivityView from '@mail/js/views/activity/activity_view'; import testUtils from 'web.test_utils'; +import domUtils from 'web.dom'; import { legacyExtraNextTick, patchWithCleanup } from "@web/../tests/helpers/utils"; import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; +import { patch, unpatch } from 'web.utils'; import { registry } from "@web/core/registry"; let serverData; @@ -581,4 +584,40 @@ QUnit.test('Activity view: many2one_avatar_user widget in activity view', async "should not have text on many2one_avatar_user if onlyImage node option is passed"); }); +QUnit.test("Activity view: on_destroy_callback doesn't crash", async function (assert) { + assert.expect(3); + + const params = { + View: ActivityView, + model: 'task', + data: this.data, + arch: ` + +
+ +
+
+
`, + }; + + patchWithCleanup(ActivityRenderer.prototype, { + mounted() { + assert.step('mounted'); + }, + willUnmount() { + assert.step('willUnmount'); + } + }); + + const activity = await createView(params); + domUtils.detach([{ widget: activity }]); + + assert.verifySteps([ + 'mounted', + 'willUnmount' + ]); + + activity.destroy(); +}); + }); diff --git a/addons/web/static/src/legacy/js/views/renderer_wrapper.js b/addons/web/static/src/legacy/js/views/renderer_wrapper.js index ba34ed9a912..826d41e6f4c 100644 --- a/addons/web/static/src/legacy/js/views/renderer_wrapper.js +++ b/addons/web/static/src/legacy/js/views/renderer_wrapper.js @@ -7,6 +7,7 @@ getLocalState() { } setLocalState() { } giveFocus() { } + resetLocalState() { } } export default RendererWrapper; diff --git a/addons/web/static/tests/legacy/views/form_tests.js b/addons/web/static/tests/legacy/views/form_tests.js index 442065b76ce..cf79de76a93 100644 --- a/addons/web/static/tests/legacy/views/form_tests.js +++ b/addons/web/static/tests/legacy/views/form_tests.js @@ -1097,6 +1097,7 @@ QUnit.module('Views', { await doAction(webClient, 1); await testUtils.dom.click(webClient.el.querySelector('.o_list_button_add')); + await legacyExtraNextTick(); assert.containsOnce(webClient, '.o_form_view'); // click on second page tab