Files
odoo_source/addons/web/static/tests/mobile/burger_menu_tests.js
T
Pierre Paridans 48134b44d6 [FIX] web: don't show empty burger menu on mobile
When the current app doesn't provides menu-items (or the user doesn't
have the rights to access them), the mobile burger menu should fallback
to the user menu instead of an empty one (like on the App Switcher).

Steps to reproduce (on mobile):
- on a newly database, install only "notes" app
- connect as 'demo' user
- open the notes app
- open the burger menu
=> as there is no submenus, burger menu is empty.

task-2345001

closes odoo/odoo#84692

X-original-commit: odoo/enterprise@f8e85c39e6
Signed-off-by: Adrien Dieudonné (adr) <adr@odoo.com>
2022-02-16 11:30:43 +00:00

125 lines
4.0 KiB
JavaScript

/** @odoo-module **/
import { click, legacyExtraNextTick } from "@web/../tests/helpers/utils";
import {
createWebClient,
doAction,
getActionManagerServerData,
} from "@web/../tests/webclient/helpers";
import { registry } from "@web/core/registry";
import { BurgerMenu } from "@web/webclient/burger_menu/burger_menu";
import { companyService } from "@web/webclient/company_service";
/**
* Note: The asserts are all based on document.body (instead of getFixture() by example) because
* the burger menu is porteled into the dom and is not part of the qunit fixture.
*/
let serverData;
const serviceRegistry = registry.category("services");
QUnit.module("Burger Menu", {
beforeEach() {
serverData = getActionManagerServerData();
serviceRegistry.add("company", companyService);
registry.category("systray").add("burger_menu", {
Component: BurgerMenu,
});
},
});
QUnit.test("Burger menu can be opened and closed", async (assert) => {
assert.expect(2);
await createWebClient({ serverData });
await click(document.body, ".o_mobile_menu_toggle");
assert.containsOnce(document.body, ".o_burger_menu");
await click(document.body, ".o_burger_menu_close");
assert.containsNone(document.body, ".o_burger_menu");
});
QUnit.test("Burger Menu on an App", async (assert) => {
assert.expect(7);
serverData.menus[1].children = [99];
serverData.menus[99] = {
id: 99,
children: [],
name: "SubMenu",
appID: 1,
actionID: 1002,
xmlid: "",
webIconData: undefined,
webIcon: false,
};
await createWebClient({ serverData });
await click(document.body, ".o_navbar_apps_menu .dropdown-toggle");
await legacyExtraNextTick();
await click(document.body, ".o_app:nth-of-type(2)");
await legacyExtraNextTick();
assert.containsNone(document.body, ".o_burger_menu");
await click(document.body, ".o_mobile_menu_toggle");
assert.containsOnce(document.body, ".o_burger_menu");
assert.containsOnce(
document.body,
".o_burger_menu .o_burger_menu_app .o_menu_sections .dropdown-item"
);
assert.strictEqual(
document.body.querySelector(
".o_burger_menu .o_burger_menu_app .o_menu_sections .dropdown-item"
).textContent,
"SubMenu"
);
assert.hasClass(document.body.querySelector(".o_burger_menu_content"), "o_burger_menu_dark");
await click(document.body, ".o_burger_menu_topbar");
assert.doesNotHaveClass(
document.body.querySelector(".o_burger_menu_content"),
"o_burger_menu_dark"
);
await click(document.body, ".o_burger_menu_topbar");
assert.hasClass(document.body.querySelector(".o_burger_menu_content"), "o_burger_menu_dark");
});
QUnit.test("Burger Menu on an App without SubMenu", async (assert) => {
assert.expect(6);
await createWebClient({ serverData });
await click(document.body, ".o_navbar_apps_menu .dropdown-toggle");
await legacyExtraNextTick();
await click(document.body, ".o_app:nth-of-type(2)");
await legacyExtraNextTick();
assert.containsNone(document.body, ".o_burger_menu");
await click(document.body, ".o_mobile_menu_toggle");
assert.containsOnce(document.body, ".o_burger_menu");
assert.containsOnce(document.body, ".o_user_menu_mobile");
assert.containsOnce(document.body, ".o_burger_menu_user");
assert.containsNone(document.body, ".o_burger_menu_app");
await click(document.body, ".o_burger_menu_close");
assert.containsNone(document.body, ".o_burger_menu");
});
QUnit.test("Burger menu closes when an action is requested", async (assert) => {
assert.expect(3);
const wc = await createWebClient({ serverData });
await click(document.body, ".o_mobile_menu_toggle");
assert.containsOnce(document.body, ".o_burger_menu");
await doAction(wc, 1);
await legacyExtraNextTick();
assert.containsNone(document.body, ".o_burger_menu");
assert.containsOnce(document.body, ".o_kanban_view");
});