mirror of
https://github.com/OCA/web.git
synced 2025-02-22 13:21:25 +02:00
[16.0][MIG]web_widget_dropdown_dynamic: Migrate to version 16.0
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {editInput, getFixture} from "@web/../tests/helpers/utils";
|
||||
import {makeView, setupViewRegistries} from "@web/../tests/views/helpers";
|
||||
const {QUnit} = window;
|
||||
|
||||
let serverData = {};
|
||||
let target = getFixture();
|
||||
|
||||
QUnit.module("web_widget_dropdown_dynamic", (hooks) => {
|
||||
hooks.beforeEach(() => {
|
||||
target = getFixture();
|
||||
serverData = {
|
||||
models: {
|
||||
"sale.order": {
|
||||
fields: {
|
||||
content_string: {string: "Content", type: "char"},
|
||||
bool_field: {string: "Boolean", type: "boolean"},
|
||||
content_integer: {string: "Integer", type: "integer"},
|
||||
change_field: {string: "Change", type: "char"},
|
||||
content_selection: {
|
||||
string: "Selection",
|
||||
type: "selection",
|
||||
selection: [["default", "Default"]],
|
||||
},
|
||||
},
|
||||
records: [
|
||||
{id: 1, bool_field: false, change_field: ""},
|
||||
{id: 2, bool_field: true, change_field: ""},
|
||||
],
|
||||
methods: {
|
||||
method_name() {
|
||||
return Promise.resolve([["value a", "Value A"]]);
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
setupViewRegistries();
|
||||
});
|
||||
QUnit.test("values are fetched with changing context", async function (assert) {
|
||||
assert.expect(13);
|
||||
|
||||
await makeView({
|
||||
type: "form",
|
||||
resModel: "sale.order",
|
||||
serverData,
|
||||
arch: `
|
||||
<form>
|
||||
<field name="change_field"/>
|
||||
<field name="content_string" widget="dynamic_dropdown" options="{'values':'method_name'}" context="{'depending_on': change_field}" />
|
||||
</form>`,
|
||||
resId: 1,
|
||||
mockRPC: function (route, args) {
|
||||
assert.step(args.method);
|
||||
if (args.method === "method_name") {
|
||||
if (args.kwargs.context.depending_on === "step-1") {
|
||||
return Promise.resolve([["value", "Title"]]);
|
||||
} else if (args.kwargs.context.depending_on === "step-2") {
|
||||
return Promise.resolve([
|
||||
["value", "Title"],
|
||||
["value_2", "Title 2"],
|
||||
]);
|
||||
}
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
await editInput(target, ".o_field_widget[name='change_field'] input", "step-1");
|
||||
assert.containsN(target, "option", 2);
|
||||
assert.containsOnce(target, "option[value='\"value\"']");
|
||||
await editInput(target, ".o_field_widget[name='change_field'] input", "step-2");
|
||||
|
||||
assert.containsN(target, "option", 3);
|
||||
assert.containsOnce(target, "option[value='\"value\"']");
|
||||
assert.containsOnce(target, "option[value='\"value_2\"']");
|
||||
await editInput(
|
||||
target,
|
||||
".o_field_widget[name='change_field'] input",
|
||||
"step-other"
|
||||
);
|
||||
|
||||
assert.containsN(target, "option", 1);
|
||||
assert.verifySteps([
|
||||
"get_views",
|
||||
"read",
|
||||
"method_name",
|
||||
"method_name",
|
||||
"method_name",
|
||||
"method_name",
|
||||
]);
|
||||
});
|
||||
QUnit.test("values are fetched w/o context (char)", async (assert) => {
|
||||
assert.expect(6);
|
||||
console.log("Start assert", serverData);
|
||||
console.log("Start makeView");
|
||||
await makeView({
|
||||
type: "form",
|
||||
resModel: "sale.order",
|
||||
serverData,
|
||||
arch: `
|
||||
<form>
|
||||
<field name="bool_field"/>
|
||||
<field name="content_string" widget="dynamic_dropdown" options="{'values':'method_name'}" context="{'depending_on': bool_field}" />
|
||||
</form>`,
|
||||
resId: 2,
|
||||
mockRPC(route, args) {
|
||||
assert.step(args.method);
|
||||
if (args.method === "method_name") {
|
||||
if (args.kwargs.context.depending_on) {
|
||||
return Promise.resolve([["value b", "Value B"]]);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
const field_target = target.querySelector("div[name='content_string']");
|
||||
assert.verifySteps(["get_views", "read", "method_name"]);
|
||||
assert.containsN(field_target, "option", 2);
|
||||
assert.containsOnce(
|
||||
field_target,
|
||||
"option[value='\"value b\"']",
|
||||
"got `value b` "
|
||||
);
|
||||
|
||||
console.log("Ending makeView", target);
|
||||
});
|
||||
|
||||
QUnit.test("values are fetched w/o context (integer)", async (assert) => {
|
||||
assert.expect(6);
|
||||
await makeView({
|
||||
type: "form",
|
||||
resModel: "sale.order",
|
||||
serverData,
|
||||
arch: `
|
||||
<form>
|
||||
<field name="bool_field"/>
|
||||
<field name="content_integer" widget="dynamic_dropdown" options="{'values':'method_name'}" context="{'depending_on': bool_field}" />
|
||||
</form>`,
|
||||
resId: 2,
|
||||
mockRPC(route, args) {
|
||||
assert.step(args.method);
|
||||
if (args.method === "method_name") {
|
||||
if (args.kwargs.context.depending_on) {
|
||||
return Promise.resolve([["10", "Value B"]]);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
const field_target = target.querySelector("div[name='content_integer']");
|
||||
assert.verifySteps(["get_views", "read", "method_name"]);
|
||||
assert.containsN(field_target, "option", 2);
|
||||
assert.containsOnce(field_target, 'option[value="10"]');
|
||||
});
|
||||
|
||||
QUnit.test("values are fetched w/o context (selection)", async (assert) => {
|
||||
assert.expect(6);
|
||||
await makeView({
|
||||
type: "form",
|
||||
resModel: "sale.order",
|
||||
serverData,
|
||||
arch: `
|
||||
<form>
|
||||
<field name="bool_field"/>
|
||||
<field name="content_selection" widget="dynamic_dropdown" options="{'values':'method_name'}" context="{'depending_on': bool_field}" />
|
||||
</form>`,
|
||||
resId: 2,
|
||||
mockRPC(route, args) {
|
||||
assert.step(args.method);
|
||||
if (args.method === "method_name") {
|
||||
if (args.kwargs.context.depending_on) {
|
||||
return Promise.resolve([["choice b", "Choice B"]]);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
const field_target = target.querySelector("div[name='content_selection']");
|
||||
assert.verifySteps(["get_views", "read", "method_name"]);
|
||||
assert.containsN(field_target, "option", 2);
|
||||
assert.containsOnce(field_target, "option[value='\"choice b\"']");
|
||||
});
|
||||
});
|
||||
@@ -1,187 +0,0 @@
|
||||
odoo.define(
|
||||
"web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests",
|
||||
function (require) {
|
||||
"use strict";
|
||||
|
||||
/* global QUnit*/
|
||||
|
||||
var FormView = require("web.FormView");
|
||||
var testUtils = require("web.test_utils");
|
||||
|
||||
QUnit.module("web_widget_dropdown_dynamic", {}, function () {
|
||||
QUnit.test(
|
||||
"values are fetched w/o context (char)",
|
||||
async function (assert) {
|
||||
assert.expect(2);
|
||||
|
||||
var form = await testUtils.createView({
|
||||
View: FormView,
|
||||
model: "demo_entry",
|
||||
data: {
|
||||
demo_entry: {
|
||||
fields: {
|
||||
test_field: {string: "Test Field", type: "char"},
|
||||
},
|
||||
records: [{id: 1, test_field: ""}],
|
||||
},
|
||||
},
|
||||
arch:
|
||||
"<form>" +
|
||||
'<field name="test_field" widget="dynamic_dropdown" values="_get_test_field_values"/>' +
|
||||
"</form>",
|
||||
mockRPC: function (route, args) {
|
||||
if (args.method === "_get_test_field_values") {
|
||||
return Promise.resolve([["value", "Title"]]);
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsN(form, "option", 2);
|
||||
assert.containsOnce(form, "option[value='\"value\"']");
|
||||
|
||||
form.destroy();
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test(
|
||||
"values are fetched w/o context (integer)",
|
||||
async function (assert) {
|
||||
assert.expect(2);
|
||||
|
||||
var form = await testUtils.createView({
|
||||
View: FormView,
|
||||
model: "demo_entry",
|
||||
data: {
|
||||
demo_entry: {
|
||||
fields: {
|
||||
test_field: {string: "Test Field", type: "integer"},
|
||||
},
|
||||
records: [{id: 1, test_field: 0}],
|
||||
},
|
||||
},
|
||||
arch:
|
||||
"<form>" +
|
||||
'<field name="test_field" widget="dynamic_dropdown" values="_get_test_field_values"/>' +
|
||||
"</form>",
|
||||
mockRPC: function (route, args) {
|
||||
if (args.method === "_get_test_field_values") {
|
||||
return Promise.resolve([[0, "Title"]]);
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsN(form, "option", 2);
|
||||
assert.containsOnce(form, "option[value='0']");
|
||||
|
||||
form.destroy();
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test(
|
||||
"values are fetched w/o context (selection)",
|
||||
async function (assert) {
|
||||
assert.expect(2);
|
||||
|
||||
var form = await testUtils.createView({
|
||||
View: FormView,
|
||||
model: "demo_entry",
|
||||
data: {
|
||||
demo_entry: {
|
||||
fields: {
|
||||
test_field: {
|
||||
string: "Test Field",
|
||||
type: "selection",
|
||||
},
|
||||
},
|
||||
records: [{id: 1, test_field: ""}],
|
||||
},
|
||||
},
|
||||
arch:
|
||||
"<form>" +
|
||||
'<field name="test_field" widget="dynamic_dropdown" values="_get_test_field_values"/>' +
|
||||
"</form>",
|
||||
mockRPC: function (route, args) {
|
||||
if (args.method === "_get_test_field_values") {
|
||||
return Promise.resolve([["value", "Title"]]);
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsN(form, "option", 2);
|
||||
assert.containsOnce(form, "option[value='\"value\"']");
|
||||
|
||||
form.destroy();
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test(
|
||||
"values are fetched with changing context",
|
||||
async function (assert) {
|
||||
assert.expect(6);
|
||||
|
||||
var form = await testUtils.createView({
|
||||
View: FormView,
|
||||
model: "demo_entry",
|
||||
data: {
|
||||
demo_entry: {
|
||||
fields: {
|
||||
other_field: {string: "Other Field", type: "char"},
|
||||
test_field: {string: "Test Field", type: "char"},
|
||||
},
|
||||
records: [{id: 1, other_field: "", test_field: ""}],
|
||||
},
|
||||
},
|
||||
arch:
|
||||
"<form>" +
|
||||
'<field name="other_field" />' +
|
||||
'<field name="test_field" widget="dynamic_dropdown" values="_get_test_field_values" context="{\'step\': other_field}"/>' +
|
||||
"</form>",
|
||||
mockRPC: function (route, args) {
|
||||
if (args.method === "_get_test_field_values") {
|
||||
if (args.kwargs.context.step === "step-1") {
|
||||
return Promise.resolve([["value", "Title"]]);
|
||||
} else if (args.kwargs.context.step === "step-2") {
|
||||
return Promise.resolve([
|
||||
["value", "Title"],
|
||||
["value_2", "Title 2"],
|
||||
]);
|
||||
}
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
});
|
||||
|
||||
await testUtils.fields.editAndTrigger(
|
||||
form.$('.o_field_widget[name="other_field"]'),
|
||||
"step-1",
|
||||
["input"]
|
||||
);
|
||||
assert.containsN(form, "option", 2);
|
||||
assert.containsOnce(form, "option[value='\"value\"']");
|
||||
|
||||
await testUtils.fields.editAndTrigger(
|
||||
form.$('.o_field_widget[name="other_field"]'),
|
||||
"step-2",
|
||||
["input"]
|
||||
);
|
||||
assert.containsN(form, "option", 3);
|
||||
assert.containsOnce(form, "option[value='\"value\"']");
|
||||
assert.containsOnce(form, "option[value='\"value_2\"']");
|
||||
|
||||
await testUtils.fields.editAndTrigger(
|
||||
form.$('.o_field_widget[name="other_field"]'),
|
||||
"step-other",
|
||||
["input"]
|
||||
);
|
||||
assert.containsN(form, "option", 1);
|
||||
|
||||
form.destroy();
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
);
|
||||
Reference in New Issue
Block a user