合并企业版代码(未测试,先提交到测试分支)

This commit is contained in:
qihao.gong@jikimo.com
2023-04-14 17:42:23 +08:00
parent 7a7b3d7126
commit d28525526a
1300 changed files with 513579 additions and 5426 deletions

View File

@@ -0,0 +1,84 @@
/** @odoo-module **/
import { click, legacyExtraNextTick } from "@web/../tests/helpers/utils";
import { getActionManagerServerData } from "@web/../tests/webclient/helpers";
import { registry } from "@web/core/registry";
import { createEnterpriseWebClient } from "@web_enterprise/../tests/helpers";
import { EnterpriseBurgerMenu } from "@web_enterprise/webclient/burger_menu/burger_menu";
import { homeMenuService } from "@web_enterprise/webclient/home_menu/home_menu_service";
import { companyService } from "@web/webclient/company_service";
import { ormService } from "@web/core/orm_service";
import { enterpriseSubscriptionService } from "@web_enterprise/webclient/home_menu/enterprise_subscription_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 Enterprise", {
beforeEach() {
serverData = getActionManagerServerData();
serviceRegistry.add("enterprise_subscription", enterpriseSubscriptionService);
serviceRegistry.add("orm", ormService);
serviceRegistry.add("company", companyService);
serviceRegistry.add("home_menu", homeMenuService);
registry.category("systray").add("burger_menu", {
Component: EnterpriseBurgerMenu,
});
},
});
QUnit.test("Burger Menu on home menu", async (assert) => {
assert.expect(5);
await createEnterpriseWebClient({ serverData });
assert.containsNone(document.body, ".o_burger_menu");
assert.isVisible(document.body.querySelector(".o_home_menu"));
await click(document.body, ".o_mobile_menu_toggle");
assert.containsOnce(document.body, ".o_burger_menu");
assert.containsOnce(document.body, ".o_user_menu_mobile");
await click(document.body, ".o_burger_menu_close");
assert.containsNone(document.body, ".o_burger_menu");
});
QUnit.test("Burger Menu on home menu over an App", async (assert) => {
assert.expect(5);
serverData.menus[1].children = [99];
serverData.menus[99] = {
id: 99,
children: [],
name: "SubMenu",
appID: 1,
actionID: 1002,
xmlid: "",
webIconData: undefined,
webIcon: false,
};
await createEnterpriseWebClient({ serverData });
await click(document.body, ".o_app:first-of-type");
await legacyExtraNextTick();
await click(document.body, ".o_menu_toggle");
await legacyExtraNextTick();
assert.containsNone(document.body, ".o_burger_menu");
assert.isVisible(document.body.querySelector(".o_home_menu"));
await click(document.body, ".o_mobile_menu_toggle");
assert.containsOnce(document.body, ".o_burger_menu");
assert.containsNone(
document.body,
".o_burger_menu nav.o_burger_menu_content li"
);
assert.doesNotHaveClass(
document.body.querySelector(".o_burger_menu_content"),
"o_burger_menu_dark"
);
});

View File

@@ -0,0 +1,185 @@
/** @odoo-module **/
import { dialogService } from "@web/core/dialog/dialog_service";
import { registry } from "@web/core/registry";
import {
makeFakeLocalizationService,
makeFakeUserService,
} from "@web/../tests/helpers/mock_services";
import { getFixture, patchWithCleanup } from "@web/../tests/helpers/utils";
import {
setupControlPanelFavoriteMenuRegistry,
setupControlPanelServiceRegistry,
} from "@web/../tests/search/helpers";
import { makeView } from "@web/../tests/views/helpers";
import { browser } from "@web/core/browser/browser";
const serviceRegistry = registry.category("services");
let serverData;
let target;
QUnit.module("Views", (hooks) => {
hooks.beforeEach(() => {
target = getFixture();
serverData = {
models: {
partner: {
fields: {
foo: {
string: "Foo",
type: "integer",
searchable: true,
group_operator: "sum",
},
bar: { string: "bar", type: "boolean", store: true, sortable: true },
date: { string: "Date", type: "date", store: true, sortable: true },
product_id: {
string: "Product",
type: "many2one",
relation: "product",
store: true,
sortable: true,
},
other_product_id: {
string: "Other Product",
type: "many2one",
relation: "product",
store: true,
sortable: true,
},
non_stored_m2o: {
string: "Non Stored M2O",
type: "many2one",
relation: "product",
},
customer: {
string: "Customer",
type: "many2one",
relation: "customer",
store: true,
sortable: true,
},
computed_field: {
string: "Computed and not stored",
type: "integer",
compute: true,
group_operator: "sum",
},
company_type: {
string: "Company Type",
type: "selection",
selection: [
["company", "Company"],
["individual", "individual"],
],
searchable: true,
sortable: true,
store: true,
},
},
records: [
{
id: 1,
foo: 12,
bar: true,
date: "2016-12-14",
product_id: 37,
customer: 1,
computed_field: 19,
company_type: "company",
},
{
id: 2,
foo: 1,
bar: true,
date: "2016-10-26",
product_id: 41,
customer: 2,
computed_field: 23,
company_type: "individual",
},
{
id: 3,
foo: 17,
bar: true,
date: "2016-12-15",
product_id: 41,
customer: 2,
computed_field: 26,
company_type: "company",
},
{
id: 4,
foo: 2,
bar: false,
date: "2016-04-11",
product_id: 41,
customer: 1,
computed_field: 19,
company_type: "individual",
},
],
},
product: {
fields: {
name: { string: "Product Name", type: "char" },
},
records: [
{
id: 37,
display_name: "xphone",
},
{
id: 41,
display_name: "xpad",
},
],
},
customer: {
fields: {
name: { string: "Customer Name", type: "char" },
},
records: [
{
id: 1,
display_name: "First",
},
{
id: 2,
display_name: "Second",
},
],
},
},
};
setupControlPanelFavoriteMenuRegistry();
setupControlPanelServiceRegistry();
serviceRegistry.add("dialog", dialogService);
serviceRegistry.add("localization", makeFakeLocalizationService());
serviceRegistry.add("user", makeFakeUserService());
patchWithCleanup(browser, { setTimeout: (fn) => fn() });
});
QUnit.module("PivotView");
QUnit.test("simple pivot rendering", async function (assert) {
assert.expect(2);
await makeView({
type: "pivot",
resModel: "partner",
serverData,
arch: `
<pivot string="Partners">
<field name="foo" type="measure"/>
</pivot>`,
});
assert.hasClass(target.querySelector(".o_pivot_view"), "o_view_controller");
assert.containsOnce(
target,
"td.o_pivot_cell_value:contains(32)",
"should contain a pivot cell with the sum of all records"
);
});
});

View File

@@ -0,0 +1,53 @@
/** @odoo-module **/
import { getActionManagerServerData, doAction } from "@web/../tests/webclient/helpers";
import { homeMenuService } from "@web_enterprise/webclient/home_menu/home_menu_service";
import { ormService } from "@web/core/orm_service";
import { enterpriseSubscriptionService } from "@web_enterprise/webclient/home_menu/enterprise_subscription_service";
import { registry } from "@web/core/registry";
import { createEnterpriseWebClient } from "../helpers";
import { click, getFixture } from "@web/../tests/helpers/utils";
const serviceRegistry = registry.category("services");
QUnit.module("WebClient Mobile", (hooks) => {
let serverData;
hooks.beforeEach(() => {
serverData = getActionManagerServerData();
serviceRegistry.add("home_menu", homeMenuService);
serviceRegistry.add("orm", ormService);
serviceRegistry.add("enterprise_subscription", enterpriseSubscriptionService);
});
QUnit.test("scroll position is kept", async (assert) => {
// This test relies on the fact that the scrollable element in mobile
// is view's root node.
const record = serverData.models.partner.records[0];
serverData.models.partner.records = [];
for (let i = 0; i < 80; i++) {
const rec = Object.assign({}, record);
rec.id = i + 1;
rec.display_name = `Record ${rec.id}`;
serverData.models.partner.records.push(rec);
}
// force the html node to be scrollable element
const target = getFixture();
const webClient = await createEnterpriseWebClient({ serverData });
await doAction(webClient, 3); // partners in list/kanban
assert.containsOnce(target, ".o_kanban_view");
target.querySelector(".o_kanban_view").scrollTo(0, 123);
await click(target.querySelectorAll(".o_kanban_record")[20]);
assert.containsOnce(target, ".o_form_view");
assert.containsNone(target, ".o_kanban_view");
await click(target.querySelector(".o_control_panel .o_back_button"));
assert.containsNone(target, ".o_form_view");
assert.containsOnce(target, ".o_kanban_view");
assert.strictEqual(target.querySelector(".o_kanban_view").scrollTop, 123);
});
});