Purpose ======= This commit tests some behaviors with multi company mode after changes brought by f847a46. Specification ============= Ensure the robustness of the switch company menu for multiple cases like: - Bar rendering - Switch to another company in mono/multi environment - Toggle another company in mono/multi environment - Remove a company in mono/multi environment The widget itself has been slighty modified to make it more testable: - Reading from session is now in the `willStart` function instead of `init` to allow mocking the session (in tests, `init` is executed before the mock is applied). - In the event handlers, don't use `bbq` to retrieve current allowed company ids. `bbq` is not easily nor cleanly patched. - When reading allowed company ids from session, cast ids from string to integer. They are everywhere casted except there. and some linting
170 lines
7.0 KiB
JavaScript
170 lines
7.0 KiB
JavaScript
odoo.define('web.SwitchCompanyMenu_tests', function (require) {
|
|
"use strict";
|
|
|
|
var SwitchCompanyMenu = require('web.SwitchCompanyMenu');
|
|
var testUtils = require('web.test_utils');
|
|
|
|
|
|
async function createSwitchCompanyMenu(params) {
|
|
params = params || {};
|
|
var target = params.debug ? document.body : $('#qunit-fixture');
|
|
var menu = new SwitchCompanyMenu();
|
|
testUtils.mock.addMockEnvironment(menu, params);
|
|
await menu.appendTo(target)
|
|
return menu
|
|
}
|
|
|
|
|
|
async function initMockCompanyMenu(assert, params) {
|
|
var menu = await createSwitchCompanyMenu({
|
|
session: {
|
|
...params.session,
|
|
setCompanies: function (mainCompanyId, companyIds) {
|
|
assert.equal(mainCompanyId, params.assertMainCompany[0], params.assertMainCompany[1]);
|
|
assert.equal(_.intersection(companyIds, params.asserCompanies[0]).length, params.asserCompanies[0].length, params.asserCompanies[1]);
|
|
},
|
|
}
|
|
})
|
|
await testUtils.dom.click(menu.$('.dropdown-toggle')); // open company switcher dropdown
|
|
return menu
|
|
}
|
|
|
|
async function testSwitchCompany(assert, params) {
|
|
assert.expect(2);
|
|
var menu = await initMockCompanyMenu(assert, params);
|
|
await testUtils.dom.click(menu.$(`div[data-company-id=${params.company}] div.log_into`));
|
|
menu.destroy();
|
|
}
|
|
|
|
async function testToggleCompany(assert, params) {
|
|
assert.expect(2);
|
|
var menu = await initMockCompanyMenu(assert, params);
|
|
await testUtils.dom.click(menu.$(`div[data-company-id=${params.company}] div.toggle_company`));
|
|
menu.destroy();
|
|
}
|
|
|
|
QUnit.module('widgets', {
|
|
beforeEach: async function () {
|
|
this.session_mock_multi = {
|
|
user_companies: {
|
|
current_company: [1, "Company 1"],
|
|
allowed_companies: [[1, "Company 1"], [2, "Company 2"], [3, "Company 3"]],
|
|
},
|
|
user_context: { allowed_company_ids: [1, 3] },
|
|
},
|
|
this.session_mock_single = {
|
|
user_companies: {
|
|
current_company: [1, "Company 1"],
|
|
allowed_companies: [[1, "Company 1"], [2, "Company 2"], [3, "Company 3"]],
|
|
},
|
|
user_context: { allowed_company_ids: [1] },
|
|
}
|
|
},
|
|
|
|
}, function () {
|
|
|
|
QUnit.module('SwitchCompanyMenu', {}, function () {
|
|
|
|
QUnit.test("Company switcher basic rendering", async function (assert) {
|
|
assert.expect(6);
|
|
var menu = await createSwitchCompanyMenu({ session: this.session_mock_multi });
|
|
assert.equal(menu.$('.company_label:contains(Company 1)').length, 1, "it should display Company 1")
|
|
assert.equal(menu.$('.company_label:contains(Company 2)').length, 1, "it should display Company 2")
|
|
assert.equal(menu.$('.company_label:contains(Company 3)').length, 1, "it should display Company 3")
|
|
|
|
assert.equal(menu.$('div[data-company-id=1] .fa-check-square').length, 1, "Company 1 should be checked")
|
|
assert.equal(menu.$('div[data-company-id=2] .fa-square-o').length, 1, "Company 2 should not be checked")
|
|
assert.equal(menu.$('div[data-company-id=3] .fa-check-square').length, 1, "Company 3 should be checked")
|
|
menu.destroy();
|
|
});
|
|
});
|
|
|
|
QUnit.module('SwitchCompanyMenu', {}, function () {
|
|
|
|
QUnit.test("Toggle new company in multiple company mode", async function (assert) {
|
|
/**
|
|
* [x] **Company 1** [x] **Company 1**
|
|
* toggle->[ ] Company 2 ====> [x] Company 2
|
|
* [x] Company 3 [x] Company 3
|
|
*/
|
|
await testToggleCompany(assert, {
|
|
company: 2,
|
|
session: this.session_mock_multi,
|
|
assertMainCompany: [1, "Main company should not have changed"],
|
|
asserCompanies: [[1, 2, 3], "All companies should be activated"],
|
|
});
|
|
});
|
|
|
|
QUnit.test("Toggle active company in mutliple company mode", async function (assert) {
|
|
/**
|
|
* [x] **Company 1** [x] **Company 1**
|
|
* [ ] Company 2 ====> [ ] Company 2
|
|
* toggle->[x] Company 3 [ ] Company 3
|
|
*/
|
|
await testToggleCompany(assert, {
|
|
company: 3,
|
|
session: this.session_mock_multi,
|
|
assertMainCompany: [1, "Main company should not have changed"],
|
|
asserCompanies: [[1], "Companies 3 should be unactivated"],
|
|
});
|
|
});
|
|
|
|
QUnit.test("Switch main company in mutliple company mode", async function (assert) {
|
|
/**
|
|
* [x] **Company 1** [x] Company 1
|
|
* [ ] Company 2 ====> [ ] Company 2
|
|
* switch->[x] Company 3 [x] **Company 3**
|
|
*/
|
|
await testSwitchCompany(assert, {
|
|
company: 3,
|
|
session: this.session_mock_multi,
|
|
assertMainCompany: [3, "Main company should switch to Company 3"],
|
|
asserCompanies: [[1, 3], "Companies 1 and 3 should still be active"],
|
|
});
|
|
});
|
|
|
|
QUnit.test("Switch new company in mutliple company mode", async function (assert) {
|
|
/**
|
|
* [x] **Company 1** [x] Company 1
|
|
* switch->[ ] Company 2 ====> [x] **Company 2**
|
|
* [x] Company 3 [x] Company 3
|
|
*/
|
|
await testSwitchCompany(assert, {
|
|
company: 2,
|
|
session: this.session_mock_multi,
|
|
assertMainCompany: [2, "Company 2 should become the main company"],
|
|
asserCompanies: [[1, 2, 3], "Companies 1 and 3 should still be active"],
|
|
});
|
|
});
|
|
|
|
QUnit.test("Switch main company in single company mode", async function (assert) {
|
|
/**
|
|
* [x] **Company 1** [ ] Company 1
|
|
* [ ] Company 2 ====> [ ] Company 2
|
|
* switch->[ ] Company 3 [x] **Company 3**
|
|
*/
|
|
await testSwitchCompany(assert, {
|
|
company: 3,
|
|
session: this.session_mock_single,
|
|
assertMainCompany: [3, "Main company should switch to Company 3"],
|
|
asserCompanies: [[3], "Companies 1 should no longer be active"],
|
|
});
|
|
});
|
|
|
|
QUnit.test("Toggle new company in single company mode", async function (assert) {
|
|
/**
|
|
* [x] **Company 1** [ ] **Company 1**
|
|
* [ ] Company 2 ====> [ ] Company 2
|
|
* toggle->[ ] Company 3 [x] Company 3
|
|
*/
|
|
await testToggleCompany(assert, {
|
|
company: 3,
|
|
session: this.session_mock_single,
|
|
assertMainCompany: [1, "Company 1 should still be the main company"],
|
|
asserCompanies: [[1, 3], "Company 3 should be activated"],
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|