Files
odoo_source/addons/web/static/tests/services/crash_manager_tests.js
T
Géry Debongnie 02a75a560c [FIX] web: race condition in crash manager test
Since commit 2716828f25, the error dialog
has an additional JS lib dependency, which means that it may needs to
perform a request before it opens up. However, a test in the
crashmanager was only waiting for a next tick, which is possibly too
short for a network request.

So, depending on the network speed (and on the test order), this test
could fail. To fix it, we simply make sure that the test also wait for
the library to be loaded

closes odoo/odoo#66546

Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2021-02-22 08:25:45 +00:00

65 lines
2.4 KiB
JavaScript

odoo.define('web.crash_manager_tests', function (require) {
"use strict";
const CrashManager = require('web.CrashManager').CrashManager;
const Bus = require('web.Bus');
const testUtils = require('web.test_utils');
const core = require('web.core');
const ajax = require('web.ajax');
const createActionManager = testUtils.createActionManager;
QUnit.module('Services', {}, function() {
QUnit.module('CrashManager');
QUnit.test("Execute an action and close the RedirectWarning when clicking on the primary button", async function (assert) {
assert.expect(4);
var dummy_action_name = "crash_manager_tests_dummy_action";
var dummy_action = function() {
assert.step('do_action');
};
core.action_registry.add(dummy_action_name, dummy_action);
// What we want to test is a do-action triggered by the crashManagerService
// the intercept feature of testUtilsMock is not fit for this, because it is too low in the hierarchy
const bus = new Bus();
bus.on('do-action', null, payload => {
const { action, options } = payload;
actionManager.doAction(action, options);
});
var actionManager = await createActionManager({
actions: [dummy_action],
services: {
crash_manager: CrashManager,
},
bus
});
actionManager.call('crash_manager', 'rpc_error', {
code: 200,
data: {
name: "odoo.exceptions.RedirectWarning",
arguments: [
"crash_manager_tests_warning_modal_text",
dummy_action_name,
"crash_manager_tests_button_text",
null,
]
}
});
await ajax.loadJS('/web/static/lib/stacktracejs/stacktrace.js');
await testUtils.nextTick();
var modal_selector = 'div.modal:contains("crash_manager_tests_warning_modal_text")';
assert.containsOnce($, modal_selector, "Warning Modal should be opened");
await testUtils.dom.click($(modal_selector).find('button.btn-primary'));
assert.containsNone($, modal_selector, "Warning Modal should be closed");
assert.verifySteps(['do_action'], "Warning Modal Primary Button Action should be executed");
actionManager.destroy();
});
});
});