[REF] *: rename onchange2 to onchange

closes odoo/odoo#133049

Related: odoo/enterprise#46240
Signed-off-by: Raphael Collet <rco@odoo.com>
This commit is contained in:
Raphael Collet
2023-08-31 05:11:44 +00:00
parent 109935dbc1
commit 132e9f72ed
37 changed files with 324 additions and 330 deletions
+2 -2
View File
@@ -2519,7 +2519,7 @@ class AccountMove(models.Model):
for move in self:
move.display_name = move._get_move_display_name(show_ref=True)
def onchange2(self, values, field_names, fields_spec):
def onchange(self, values, field_names, fields_spec):
# Since only one field can be changed at the same time (the record is
# saved when changing tabs) we can avoid building the snapshots for the
# other field
@@ -2529,7 +2529,7 @@ class AccountMove(models.Model):
elif 'invoice_line_ids' in field_names:
values = {key: val for key, val in values.items() if key != 'line_ids'}
fields_spec = {key: val for key, val in fields_spec.items() if key != 'line_ids'}
return super().onchange2(values, field_names, fields_spec)
return super().onchange(values, field_names, fields_spec)
# -------------------------------------------------------------------------
# RECONCILIATION METHODS
@@ -84,5 +84,5 @@ class TestAutomation(TransactionCase):
self_portal = self.env["ir.filters"].with_user(self.env.ref("base.user_demo").id)
# simulate a onchange call on name
result = self_portal.onchange2({}, [], {"name": {}, "active": {}})
result = self_portal.onchange({}, [], {"name": {}, "active": {}})
self.assertEqual(result["value"]["active"], False)
+2 -2
View File
@@ -840,14 +840,14 @@ class HolidaysRequest(models.Model):
start=display_date,
)
def onchange2(self, values, field_names, fields_spec):
def onchange(self, values, field_names, fields_spec):
# Try to force the leave_type display_name when creating new records
# This is called right after pressing create and returns the display_name for
# most fields in the view.
if values and 'employee_id' in fields_spec and 'employee_id' not in self._context:
employee_id = get_employee_from_context(values, self._context, self.env.user.employee_id.id)
self = self.with_context(employee_id=employee_id)
return super().onchange2(values, field_names, fields_spec)
return super().onchange(values, field_names, fields_spec)
def add_follower(self, employee_id):
employee = self.env['hr.employee'].browse(employee_id)
@@ -538,14 +538,14 @@ class HolidaysAllocation(models.Model):
# ORM Overrides methods
####################################################
def onchange2(self, values, field_names, fields_spec):
def onchange(self, values, field_names, fields_spec):
# Try to force the leave_type display_name when creating new records
# This is called right after pressing create and returns the display_name for
# most fields in the view.
if values and 'employee_id' in fields_spec and 'employee_id' not in self._context:
employee_id = get_employee_from_context(values, self._context, self.env.user.employee_id.id)
self = self.with_context(employee_id=employee_id)
return super().onchange2(values, field_names, fields_spec)
return super().onchange(values, field_names, fields_spec)
@api.depends(
'holiday_type', 'mode_company_id', 'department_id',
@@ -54,7 +54,7 @@ QUnit.test(
<field name="description" onchange_on_keydown="True" keydown_debounce_delay="0"/>
</form>`,
mockRPC(route, params) {
if (params.method === "onchange2") {
if (params.method === "onchange") {
// the onchange will be called twice: at record creation & when keydown is detected
// the second call should have our description value completed.
assert.ok(true);
@@ -118,8 +118,8 @@ QUnit.module("Fields", (hooks) => {
assert.containsOnce(target, ".modal:contains(Create new product as a new Product)")
assert.verifySteps([
"get_views",
"onchange2",
"onchange2",
"onchange",
"onchange",
"name_search",
]);
+2 -2
View File
@@ -886,7 +886,7 @@ class Base(models.AbstractModel):
return { 'values': field_range, }
def onchange2(self, values: Dict, field_names: List[str], fields_spec: Dict):
def onchange(self, values: Dict, field_names: List[str], fields_spec: Dict):
"""
Perform an onchange on the given fields, and return the result.
@@ -1062,7 +1062,7 @@ class Base(models.AbstractModel):
while todo:
# apply field-specific onchange methods
for field_name in todo:
record._onchange_eval(field_name, "1", result)
record._apply_onchange_methods(field_name, result)
done.add(field_name)
if not env.context.get('recursive_onchanges', True):
@@ -585,7 +585,7 @@ export class RelationalModel extends Model {
}
const spec = getFieldsSpec(activeFields, fields, evalContext, { withInvisible: true });
const args = [resId ? [resId] : [], changes, fieldNames, spec];
const response = await this.orm.call(resModel, "onchange2", args, { context });
const response = await this.orm.call(resModel, "onchange", args, { context });
if (response.warning) {
const { type, title, message, className, sticky } = response.warning;
if (type === "dialog") {
@@ -607,7 +607,7 @@ export class MockServer {
return this.mockNameCreate(args.model, args.args[0], args.kwargs);
case "name_search":
return this.mockNameSearch(args.model, args.args, args.kwargs);
case "onchange2":
case "onchange":
return this.mockOnchange(args.model, args.args, args.kwargs);
case "read":
return this.mockRead(args.model, args.args);
@@ -320,7 +320,7 @@ QUnit.module("Mobile Views", ({ beforeEach }) => {
</form>
`,
mockRPC(route, { method, args }) {
if (method === "onchange2" && args[2][0] === "display_name") {
if (method === "onchange" && args[2][0] === "display_name") {
return onchangeDef;
}
},
@@ -257,7 +257,7 @@ QUnit.module("Fields", (hooks) => {
textArea.value = "a";
await triggerEvent(textArea, null, "input", {});
await triggerEvents(textArea, null, ["blur"]);
assert.verifySteps(['onchange2: [[1],{"foo":"a"},["foo"],{"display_name":{},"foo":{}}]']);
assert.verifySteps(['onchange: [[1],{"foo":"a"},["foo"],{"display_name":{},"foo":{}}]']);
await click(target, ".o_form_button_save");
assert.verifySteps(['write: [[1],{"foo":"a"}]', "web_read: [[1]]"]);
});
@@ -749,7 +749,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
async mockRPC(route, { method }) {
if (method === "onchange2") {
if (method === "onchange") {
await def;
}
},
@@ -48,7 +48,7 @@ QUnit.module("Fields", (hooks) => {
</group>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(`onchange ${JSON.stringify(args.args)}`);
}
},
@@ -159,7 +159,7 @@ QUnit.module("Fields", (hooks) => {
<field name="hex_color" widget="color" />
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(`onchange ${JSON.stringify(args.args)}`);
}
},
@@ -132,8 +132,8 @@ QUnit.module("Fields", (hooks) => {
serverData,
arch: '<form><field name="datetime"/></form>',
mockRPC(route, { method }) {
if (method === "onchange2") {
assert.step("onchange2");
if (method === "onchange") {
assert.step("onchange");
}
},
});
@@ -165,7 +165,7 @@ QUnit.module("Fields", (hooks) => {
target.querySelector(".o_field_datetime input").value,
"04/22/2018 08:25:00"
);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
}
);
@@ -212,7 +212,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, { method }) {
if (method === "onchange2") {
if (method === "onchange") {
return Promise.resolve({
value: {
foo: "lara.espin@unknown", // onchange to update foo in readonly mode directly
@@ -501,7 +501,7 @@ QUnit.module("Fields", (hooks) => {
// execute the setTimeout callback
mockSetTimeout();
await nextTick();
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
});
QUnit.test("Many2ManyCheckBoxesField sends batched changes on save", async function (assert) {
@@ -541,7 +541,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps(["get_views", "web_read", "name_search"]);
// save
await clickSave(target);
assert.verifySteps(["onchange2", "write", "web_read"]);
assert.verifySteps(["onchange", "write", "web_read"]);
});
QUnit.test("Many2ManyCheckBoxesField in a notebook tab", async function (assert) {
@@ -666,7 +666,7 @@ QUnit.module("Fields", (hooks) => {
"web_read",
"get_views",
"unity_web_search_read",
"onchange2",
"onchange",
]);
modal = target.querySelector(".modal");
await editInput(modal, "[name='display_name'] input", "Hello");
@@ -725,7 +725,7 @@ QUnit.module("Fields", (hooks) => {
"web_read",
"get_views",
"unity_web_search_read",
"onchange2",
"onchange",
]);
modal = target.querySelector(".modal");
@@ -1614,7 +1614,7 @@ QUnit.module("Fields", (hooks) => {
mockRPC(route, args) {
const { method, kwargs } = args;
assert.step(method);
if (method === "onchange2") {
if (method === "onchange") {
assert.strictEqual(kwargs.context.default_turtle_trululu, 1);
assert.deepEqual(args.args, [
[],
@@ -1642,7 +1642,7 @@ QUnit.module("Fields", (hooks) => {
target.querySelector("[name='turtle_trululu'] input").value,
"first record"
);
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
}
);
@@ -1699,7 +1699,7 @@ QUnit.module("Fields", (hooks) => {
await editInput(target, ".o_field_widget[name=foo] input", "trigger onchange");
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
assert.strictEqual(
$(target).find(".o_x2m_control_panel .o_pager_counter").text().trim(),
"1-40 / 45",
@@ -1787,7 +1787,7 @@ QUnit.module("Fields", (hooks) => {
</sheet>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
if (firstOnChange) {
firstOnChange = false;
return {
@@ -2020,7 +2020,7 @@ QUnit.module("Fields", (hooks) => {
<field name="timmy" widget="many2many_tags" context="{ 'default_partner_id': active_id, 'ids': active_ids, 'model': active_model, 'company_id': current_company_id}"/>
</tree>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.strictEqual(args.kwargs.context.default_partner_id, 1);
assert.strictEqual(args.kwargs.context.model, "partner");
assert.deepEqual(args.kwargs.context.ids, [1]);
@@ -2077,7 +2077,7 @@ QUnit.module("Fields", (hooks) => {
<field name="timmy" widget="many2many_tags" context="{ 'default_partner_id': active_id, 'ids': active_ids, 'model': active_model, 'company_id': current_company_id}"/>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.strictEqual(args.kwargs.context.default_partner_id, 1);
assert.strictEqual(args.kwargs.context.model, "partner");
assert.deepEqual(args.kwargs.context.ids, [1]);
@@ -2142,7 +2142,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.strictEqual(args.kwargs.context.default_partner_id, 1);
assert.strictEqual(args.kwargs.context.model, "partner");
assert.deepEqual(args.kwargs.context.ids, [1]);
@@ -1355,7 +1355,7 @@ QUnit.module("Fields", (hooks) => {
if (args.method === "name_search") {
nameSearchProm.resolve();
}
if (args.method === "onchange2") {
if (args.method === "onchange") {
if (onchangeCalls === 0) {
assert.deepEqual(
args.kwargs.context,
@@ -1778,7 +1778,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views",
"onchange2",
"onchange",
]);
assert.containsNone(target, ".o_tag");
@@ -347,7 +347,7 @@ QUnit.module("Fields", (hooks) => {
<field name="trululu" context="{'blip': int_field, 'blop': 3}" />
</form>`,
mockRPC(route, { method, args }) {
if (method === "onchange2") {
if (method === "onchange") {
const context = args[3].trululu.context;
assert.strictEqual(
context.blip,
@@ -800,7 +800,7 @@ QUnit.module("Fields", (hooks) => {
if (method === "get_formview_id") {
return Promise.resolve(false);
}
if (method === "onchange2") {
if (method === "onchange") {
assert.strictEqual(
args[1].user_id,
17,
@@ -829,7 +829,7 @@ QUnit.module("Fields", (hooks) => {
"web_read",
"write",
"read",
"onchange2",
"onchange",
]);
}
);
@@ -2742,7 +2742,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
async mockRPC(route, { args, method }, performRPC) {
assert.step(method);
if (method === "onchange2") {
if (method === "onchange") {
const result = await performRPC(...arguments);
result.value.trululu = {
...result.value.trululu,
@@ -2758,7 +2758,7 @@ QUnit.module("Fields", (hooks) => {
"hello world",
"should have taken the correct display name"
);
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
});
QUnit.test(
@@ -3589,7 +3589,7 @@ QUnit.module("Fields", (hooks) => {
"get_views",
"unity_web_search_read", // to display results in the dialog
"name_search",
"onchange2",
"onchange",
"write",
"web_read",
]);
@@ -3639,7 +3639,7 @@ QUnit.module("Fields", (hooks) => {
"get_views",
"unity_web_search_read", // to display results in the dialog
"name_search",
"onchange2",
"onchange",
"write",
"web_read",
]);
@@ -3791,7 +3791,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views", // main form view
"onchange2",
"onchange",
"name_search", // to display results in the dropdown
"get_views", // list view in dialog
"unity_web_search_read", // to display results in the dialog
@@ -3849,7 +3849,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views", // main form view
"onchange2",
"onchange",
"name_search", // empty search, triggered when the user clicks in the input
"name_search", // to display results in the dropdown
"name_search", // to get preselected ids matching the search
@@ -4000,7 +4000,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views",
"onchange2",
"onchange",
"name_search", // to display results in the dropdown
"get_views", // list view in dialog
"unity_web_search_read", // to display results in the dialog
@@ -283,7 +283,7 @@ QUnit.module("Fields", (hooks) => {
// of the lines of "p"
await dragAndDrop("tbody tr:nth-child(2) .o_handle_cell", "tbody tr", "top");
assert.verifySteps(["onchange2 partner"]);
assert.verifySteps(["onchange partner"]);
}
);
@@ -728,7 +728,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
await def;
assert.step("onchange");
}
@@ -1042,7 +1042,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step("onchange");
}
},
@@ -1875,7 +1875,7 @@ QUnit.module("Fields", (hooks) => {
</sheet>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.args[3], {
// spec
display_name: {},
@@ -2126,7 +2126,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2" && args.model === "partner") {
if (args.method === "onchange" && args.model === "partner") {
assert.deepEqual(args.args[3], {
display_name: {},
foo: {},
@@ -2398,7 +2398,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2" && args.model === "partner") {
if (args.method === "onchange" && args.model === "partner") {
assert.deepEqual(args.args[3], {
display_name: {},
foo: {},
@@ -3265,7 +3265,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2" && args.model === "turtle") {
if (args.method === "onchange" && args.model === "turtle") {
// done by the X2ManyFieldDialog
assert.deepEqual(args.kwargs.context, {
abc: 2,
@@ -3357,7 +3357,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2" && args.model === "partner") {
if (args.method === "onchange" && args.model === "partner") {
if (args.args[1].display_name === "test") {
assert.deepEqual(args.args[3], {
display_name: {},
@@ -4364,8 +4364,8 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views",
"web_read",
"onchange2",
"onchange2",
"onchange",
"onchange",
"write",
"web_read",
]);
@@ -4692,7 +4692,7 @@ QUnit.module("Fields", (hooks) => {
triggerHotkey("Enter");
await nextTick();
assert.hasClass(target.querySelector('div[name="turtle_foo"]'), "o_field_invalid");
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
});
QUnit.test("pressing enter several times in a one2many", async function (assert) {
@@ -4826,8 +4826,8 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views",
"web_read",
"onchange2",
"onchange2",
"onchange",
"onchange",
"write",
"web_read",
]);
@@ -4857,7 +4857,7 @@ QUnit.module("Fields", (hooks) => {
await triggerEvent(target, '[name="turtle_foo"] input', "keydown", { key: "Escape" });
assert.containsNone(target, "tr.o_data_row");
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
});
QUnit.test(
@@ -4889,7 +4889,7 @@ QUnit.module("Fields", (hooks) => {
await triggerEvent(target, '[name="turtle_foo"] input', "keydown", { key: "Escape" });
assert.containsNone(target, "tr.o_data_row");
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
}
);
@@ -4963,7 +4963,7 @@ QUnit.module("Fields", (hooks) => {
await editInput(target, ".o_field_widget[name=product_id] input", "");
assert.verifySteps([], "no onchange should be done as line is invalid");
await click(target.querySelector(".o_list_record_remove"));
assert.verifySteps(["onchange2"], "onchange should have been done");
assert.verifySteps(["onchange"], "onchange should have been done");
}
);
@@ -4989,7 +4989,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
value: {
p: [
@@ -5033,7 +5033,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return {
value: {
p: [
@@ -5098,7 +5098,7 @@ QUnit.module("Fields", (hooks) => {
assert.strictEqual(td.textContent, "9");
await click(td);
await editInput(target, 'td [name="turtle_int"] input', "3");
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
});
QUnit.test("one2many and onchange (with date)", async function (assert) {
@@ -5132,7 +5132,7 @@ QUnit.module("Fields", (hooks) => {
await click(getPickerCell("1").at(0));
await clickSave(target);
assert.verifySteps(["get_views", "web_read", "onchange2", "write", "web_read"]);
assert.verifySteps(["get_views", "web_read", "onchange", "write", "web_read"]);
});
QUnit.test("one2many and onchange only write modified field", async function (assert) {
@@ -5459,7 +5459,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2" && checkOnchange) {
if (args.method === "onchange" && checkOnchange) {
assert.deepEqual(
args.args[1].p,
[[0, args.args[1].p[0][1], { product_id: 41 }]],
@@ -5750,7 +5750,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.strictEqual(
args.kwargs.context.date,
"2017-01-25",
@@ -5782,7 +5782,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(
args.kwargs.context.turtles,
[2],
@@ -5857,7 +5857,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
var context = args.kwargs.context;
assert.strictEqual(context.hello, "world");
assert.strictEqual(context.abc, 10);
@@ -6121,7 +6121,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
n++;
if (n === 2) {
var context = args.kwargs.context;
@@ -6154,7 +6154,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
const fieldValues = args.args[1];
assert.deepEqual(
fieldValues.trululu,
@@ -6200,7 +6200,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
const fieldValues = args.args[1];
if (count === 1) {
assert.deepEqual(fieldValues.trululu, {
@@ -6254,7 +6254,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2" && args.model === "turtle") {
if (args.method === "onchange" && args.model === "turtle") {
var fieldValues = args.args[1];
assert.strictEqual(
fieldValues.turtle_trululu.foo,
@@ -6265,7 +6265,7 @@ QUnit.module("Fields", (hooks) => {
},
});
await addRow(target);
assert.verifySteps(["get_views", "onchange2", "onchange2"]);
assert.verifySteps(["get_views", "onchange", "onchange"]);
}
);
@@ -6606,8 +6606,8 @@ QUnit.module("Fields", (hooks) => {
"get_views", // main form view
"web_read", // initial read on partner
"web_read", // after first delete, read on turtle (to fetch 3rd record)
"onchange2", // after first delete, onchange on field turtles
"onchange2", // onchange after second delete
"onchange", // after first delete, onchange on field turtles
"onchange", // onchange after second delete
]);
}
);
@@ -7048,7 +7048,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.args[3], {
bar: {},
display_name: {},
@@ -7758,10 +7758,10 @@ QUnit.module("Fields", (hooks) => {
target.querySelector('.o_field_widget[name="int_field"] input').value,
"0"
);
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
await editInput(target, '.o_field_widget[name="turtle_foo"] input', "some text");
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
assert.strictEqual(
target.querySelector('.o_field_widget[name="int_field"] input').value,
"1"
@@ -7830,7 +7830,7 @@ QUnit.module("Fields", (hooks) => {
"0",
"int_field should still be 0 (no onchange should have been done yet)"
);
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
// fill turtle_foo field
await editInput(target, '.o_field_widget[name="turtle_foo"] input', "some text");
@@ -7849,7 +7849,7 @@ QUnit.module("Fields", (hooks) => {
"1",
"int_field should now be 1 (the onchange should have been done"
);
assert.verifySteps(["name_search", "web_read", "onchange2"]);
assert.verifySteps(["name_search", "web_read", "onchange"]);
}
);
@@ -7972,7 +7972,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
await Promise.resolve(def);
}
},
@@ -8022,7 +8022,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
await Promise.resolve(def);
}
},
@@ -8119,7 +8119,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(args.method);
return {
value: {},
@@ -8143,7 +8143,7 @@ QUnit.module("Fields", (hooks) => {
// and a warning again)
await addRow(target);
assert.verifySteps(["onchange2", "warning", "onchange2", "warning"]);
assert.verifySteps(["onchange", "warning", "onchange", "warning"]);
});
QUnit.test("editable list: contexts are correctly sent", async function (assert) {
@@ -8222,7 +8222,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(
args.kwargs.context,
{
@@ -8287,7 +8287,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
onchangeNb++;
if (onchangeNb === 1) {
assert.deepEqual(args.args[3].p.context, { parent_foo: "yop" });
@@ -8325,7 +8325,7 @@ QUnit.module("Fields", (hooks) => {
},
});
await editInput(target, '[name="foo"] input', "abcd");
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
});
QUnit.test(
@@ -8356,7 +8356,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.args[3], {
display_name: {},
name: {},
@@ -8485,7 +8485,7 @@ QUnit.module("Fields", (hooks) => {
// triggers an onchange on partner, because the new record is valid
await addRow(target);
assert.verifySteps(["get_views", "web_read", "onchange2", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange", "onchange"]);
});
QUnit.test("onchange on a one2many containing a one2many", async function (assert) {
@@ -8518,7 +8518,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2" && checkOnchange) {
if (args.method === "onchange" && checkOnchange) {
assert.deepEqual(args.args[3], {
display_name: {},
p: {
@@ -8592,7 +8592,7 @@ QUnit.module("Fields", (hooks) => {
await clickSave(target);
assert.containsN(target, "tr.o_data_row", 40);
assert.verifySteps(["get_views", "web_read", "onchange2", "write", "web_read"]);
assert.verifySteps(["get_views", "web_read", "onchange", "write", "web_read"]);
});
QUnit.test("editing tabbed one2many (editable=bottom), again...", async function (assert) {
@@ -8671,7 +8671,7 @@ QUnit.module("Fields", (hooks) => {
await clickSave(target);
assert.containsN(target, "tr.o_data_row", 40);
assert.verifySteps(["get_views", "web_read", "web_read", "onchange2", "write", "web_read"]);
assert.verifySteps(["get_views", "web_read", "web_read", "onchange", "write", "web_read"]);
});
QUnit.test(
@@ -8987,7 +8987,7 @@ QUnit.module("Fields", (hooks) => {
</sheet>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
if (args.args[1].turtles[0][2].turtle_foo === "pinky") {
throw makeServerError({ type: "ValidationError" });
}
@@ -9044,7 +9044,7 @@ QUnit.module("Fields", (hooks) => {
"shy",
"view context key should be used for every rpcs"
);
if (args.method === "onchange2") {
if (args.method === "onchange") {
if (args.model === "partner") {
assert.strictEqual(
args.kwargs.context.default_flutter,
@@ -9212,7 +9212,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return {
value: {
turtles: [
@@ -9258,7 +9258,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return {
value: {
turtles: [
@@ -9614,7 +9614,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views",
"web_read [1]", // main record
"onchange2",
"onchange",
// this test's purpose is to assert that this rpc isn't
// done, but yet it is. Actually, it wasn't before because mockOnChange
// returned [1] as command list, instead of [[6, false, [1]]], so basically
@@ -9732,7 +9732,7 @@ QUnit.module("Fields", (hooks) => {
// swap 2 lines in the one2many
await dragAndDrop("tbody tr:nth-child(2) .o_handle_cell", "tbody tr", "top");
assert.verifySteps(["get_views", "get_views", "web_read", "onchange2", "onchange2"]);
assert.verifySteps(["get_views", "get_views", "web_read", "onchange", "onchange"]);
}
);
@@ -9779,9 +9779,9 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views", // load main form
"get_views", // load sub list
"onchange2", // main record
"onchange2", // sub record
"onchange2", // edition of display_name of sub record
"onchange", // main record
"onchange", // sub record
"onchange", // edition of display_name of sub record
]);
}
);
@@ -10425,7 +10425,7 @@ QUnit.module("Fields", (hooks) => {
resId: 1,
mockRPC(route, args) {
const { method, kwargs } = args;
if (method === "onchange2") {
if (method === "onchange") {
assert.step("onchange");
assert.strictEqual(kwargs.context.default_turtle_foo, "soft");
}
@@ -10461,20 +10461,20 @@ QUnit.module("Fields", (hooks) => {
</form>`,
async mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2") {
if (args.method === "onchange") {
await Promise.resolve(def);
}
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
const value = "hello";
// add a new line
await addRow(target);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// we want to add a delay to simulate an onchange
def = makeDeferred();
@@ -10490,7 +10490,7 @@ QUnit.module("Fields", (hooks) => {
assert.strictEqual(target.querySelector("[name=turtle_foo] input").value, value);
assert.containsOnce(target, ".o_data_row");
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// unlock onchange
def.resolve();
@@ -10507,7 +10507,7 @@ QUnit.module("Fields", (hooks) => {
""
);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
});
QUnit.test("edit a field with a slow onchange in one2many", async function (assert) {
@@ -10530,20 +10530,20 @@ QUnit.module("Fields", (hooks) => {
</form>`,
async mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2") {
if (args.method === "onchange") {
await Promise.resolve(def);
}
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
const value = "hello";
// add a new line
await addRow(target);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// we want to add a delay to simulate an onchange
def = makeDeferred();
@@ -10557,7 +10557,7 @@ QUnit.module("Fields", (hooks) => {
// check that nothing changed before the onchange finished
assert.strictEqual(target.querySelector("[name=turtle_foo] input").value, value);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// unlock onchange
def.resolve();
@@ -10606,9 +10606,9 @@ QUnit.module("Fields", (hooks) => {
);
assert.verifySteps([
"get_views", // main form view
"onchange2", // main record
"onchange2", // line 1
"onchange2", // line 2
"onchange", // main record
"onchange", // line 1
"onchange", // line 2
"create",
"web_read", // main record
]);
@@ -10922,7 +10922,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step("onchange");
}
},
@@ -11007,7 +11007,7 @@ QUnit.module("Fields", (hooks) => {
["second record", "second recordaaa"]
);
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
}
);
@@ -11495,7 +11495,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
async mockRPC(route, args) {
if (step === 3 && args.method === "onchange2" && args.model === "partner") {
if (step === 3 && args.method === "onchange" && args.model === "partner") {
assert.deepEqual(args.args[1].turtles[0][2], {
o2m: [],
turtle_bar: false,
@@ -11649,7 +11649,7 @@ QUnit.module("Fields", (hooks) => {
</sheet>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
if (args.model === "turtle") {
assert.deepEqual(
args.kwargs.context,
@@ -11701,7 +11701,7 @@ QUnit.module("Fields", (hooks) => {
target.querySelector(".o_field_widget[name=product_id] input").value,
"xphone"
);
assert.verifySteps(["get_views on partner", "onchange2 on partner"]);
assert.verifySteps(["get_views on partner", "onchange on partner"]);
});
QUnit.test("x2many default_order multiple fields", async function (assert) {
@@ -11930,11 +11930,11 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps([
"get_views partner",
"web_read partner",
"onchange2 turtle",
"onchange2 partner",
"onchange2 partner",
"onchange2 turtle",
"onchange2 partner",
"onchange turtle",
"onchange partner",
"onchange partner",
"onchange turtle",
"onchange partner",
]);
});
@@ -13096,7 +13096,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps(["get_views partner", "web_read partner"]);
await click(target, ".o_boolean_toggle");
assert.verifySteps(["onchange2 partner", "write turtle", "web_read turtle"]);
assert.verifySteps(["onchange partner", "write turtle", "web_read turtle"]);
});
QUnit.test("create a new record with an x2m invisible", async function (assert) {
@@ -13115,7 +13115,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.args[3], {
display_name: {},
p: {
@@ -13160,7 +13160,7 @@ QUnit.module("Fields", (hooks) => {
});
assert.containsNone(target, "[name='p']");
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
await click(target, ".o_form_button_save");
assert.verifySteps(["create", "web_read"]);
@@ -13684,15 +13684,15 @@ QUnit.module("Fields", (hooks) => {
},
});
assert.verifySteps(["get_views: partner", "onchange2: partner"]);
assert.verifySteps(["get_views: partner", "onchange: partner"]);
await click(target, ".o_field_x2many_list_row_add a");
assert.verifySteps(["get_views: partner_type", "onchange2: partner_type"]);
assert.verifySteps(["get_views: partner_type", "onchange: partner_type"]);
await editInput(
target.querySelector(".modal"),
".o_field_widget[name='display_name'] input",
"changed"
);
assert.verifySteps(["onchange2: partner_type"]);
assert.verifySteps(["onchange: partner_type"]);
await click(target.querySelector(".modal .o_form_button_save"));
assert.strictEqual(target.querySelector(".o_data_row").textContent, "changed5");
await click(target, ".o_form_button_save");
@@ -13844,7 +13844,7 @@ QUnit.module("Fields", (hooks) => {
</form>`,
async mockRPC(route, args) {
if (
args.method === "onchange2" &&
args.method === "onchange" &&
args.args[2].length === 1 &&
args.args[2][0] === "display_name"
) {
@@ -13894,7 +13894,7 @@ QUnit.module("Fields", (hooks) => {
</field>
</form>`,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return {
value: {
p: [
@@ -248,7 +248,7 @@ QUnit.module("Fields", (hooks) => {
assert.verifySteps(
[
"get_views",
"onchange2",
"onchange",
"name_search", // for the select
"name_search", // for the spawned many2one
"name_create",
@@ -861,7 +861,7 @@ QUnit.module("Fields", (hooks) => {
<field name="display_name"/>
</tree>`,
mockRPC: (route, { method, args }) => {
if (method === "onchange2") {
if (method === "onchange") {
return {
value: {
reference: {
@@ -147,7 +147,7 @@ QUnit.module("Fields", (hooks) => {
"should have correct value in color field"
);
assert.verifySteps(["get_views", "web_read", "name_search", "name_search", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "name_search", "name_search", "onchange"]);
});
QUnit.test("unset selection field with 0 as key", async function (assert) {
@@ -1068,7 +1068,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 2,
mockRPC: (route, { method, model, kwargs }) => {
if (["get_views", "onchange2"].includes(method)) {
if (["get_views", "onchange"].includes(method)) {
const { context } = kwargs;
assert.step(`${method} (${model})`);
assert.deepEqual(context, expectedContexts.get(model));
@@ -1089,7 +1089,7 @@ QUnit.module("Views", (hooks) => {
// Create a new timmy
await click(target, ".modal .o_create_button");
assert.verifySteps(["get_views (partner_type)", "onchange2 (partner_type)"]);
assert.verifySteps(["get_views (partner_type)", "onchange (partner_type)"]);
// Create a new company
expectedContexts.clear();
@@ -1099,7 +1099,7 @@ QUnit.module("Views", (hooks) => {
form_view_ref: "bar_rescompany_form_view",
});
await click(target, ".modal [name=company_ids] .o_field_x2many_list_row_add a");
assert.verifySteps(["get_views (res.company)", "onchange2 (res.company)"]);
assert.verifySteps(["get_views (res.company)", "onchange (res.company)"]);
});
QUnit.test("invisible fields are properly hidden", async function (assert) {
@@ -2404,7 +2404,7 @@ QUnit.module("Views", (hooks) => {
assert.containsN(target, ".o_form_label.o_field_invalid", 2);
assert.containsN(target, ".o_field_widget.o_field_invalid", 2);
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
});
QUnit.test("twice same field with different readonly attributes", async function (assert) {
@@ -2491,7 +2491,7 @@ QUnit.module("Views", (hooks) => {
await clickSave(target);
assert.hasClass(target.querySelector(".o_field_widget[name=foo]"), "o_field_invalid");
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
});
QUnit.test("required field computed by another field in a form view", async function (assert) {
@@ -3037,7 +3037,7 @@ QUnit.module("Views", (hooks) => {
"qux input is properly formatted"
);
assert.verifySteps(["get_views", "onchange2", "create", "web_read", "write", "web_read"]);
assert.verifySteps(["get_views", "onchange", "create", "web_read", "write", "web_read"]);
});
QUnit.test("separators", async function (assert) {
@@ -3117,7 +3117,7 @@ QUnit.module("Views", (hooks) => {
},
};
const mockRPC = function (route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.args[3], { foo: {} });
}
};
@@ -3478,7 +3478,7 @@ QUnit.module("Views", (hooks) => {
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
await click(target.querySelector(".o_form_statusbar button.p"));
@@ -3535,7 +3535,7 @@ QUnit.module("Views", (hooks) => {
assert.verifySteps([
"get_views",
"onchange2",
"onchange",
"create",
"web_read",
"execute_action",
@@ -3743,7 +3743,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(
args.args[3],
{
@@ -3801,7 +3801,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, args) {
if (args.method === "onchange2" && checkOnchange) {
if (args.method === "onchange" && checkOnchange) {
assert.deepEqual(
args.args[1],
{
@@ -3921,7 +3921,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(
args.args[3],
{
@@ -3939,7 +3939,7 @@ QUnit.module("Views", (hooks) => {
}
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
}
);
@@ -3962,14 +3962,14 @@ QUnit.module("Views", (hooks) => {
</field>
</form>`,
mockRPC: function (route, args) {
if (route === "/web/dataset/call_kw/partner/onchange2") {
if (route === "/web/dataset/call_kw/partner/onchange") {
assert.deepEqual(args.kwargs.context, {
default_state: "ab",
lang: "en",
tz: "taht",
uid: 7,
});
} else if (route === "/web/dataset/call_kw/product/onchange2") {
} else if (route === "/web/dataset/call_kw/product/onchange") {
assert.deepEqual(args.kwargs.context, {
default_product_uom_qty: 68,
lang: "en",
@@ -4013,7 +4013,7 @@ QUnit.module("Views", (hooks) => {
},
});
}
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.kwargs.context, {
dynamic: 20,
lang: "en",
@@ -4113,7 +4113,7 @@ QUnit.module("Views", (hooks) => {
});
assert.strictEqual(target.querySelector("input").value, "default foo value");
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
});
QUnit.test("make default record with non empty one2many", async function (assert) {
@@ -4433,7 +4433,7 @@ QUnit.module("Views", (hooks) => {
assert.containsOnce(document.body, ".modal");
assert.verifySteps([]);
await click(document.body.querySelector(".modal-footer .btn-primary"));
assert.verifySteps(["action_archive: partner", "get_views: product", "onchange2: product"]);
assert.verifySteps(["action_archive: partner", "get_views: product", "onchange: product"]);
await click(target, ".modal footer .myButton");
assert.verifySteps([
"create: product",
@@ -6141,7 +6141,7 @@ QUnit.module("Views", (hooks) => {
arch: `<form><field name="foo"/><field name="int_field"/></form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
value: { int_field: 10 },
warning: {
@@ -6185,7 +6185,7 @@ QUnit.module("Views", (hooks) => {
arch: `<form><field name="foo"/><field name="int_field"/></form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
value: { int_field: 10 },
warning: {
@@ -6234,7 +6234,7 @@ QUnit.module("Views", (hooks) => {
serverData,
arch: `<form><field name="foo"/><field name="int_field"/></form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
value: { int_field: 10 },
warning: {
@@ -6372,7 +6372,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 1,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
await def;
}
},
@@ -6531,7 +6531,7 @@ QUnit.module("Views", (hooks) => {
await clickSave(target);
assert.verifySteps(["get_views", "web_read", "onchange2", "write", "web_read"]);
assert.verifySteps(["get_views", "web_read", "onchange", "write", "web_read"]);
});
QUnit.test(
@@ -6625,7 +6625,7 @@ QUnit.module("Views", (hooks) => {
"should read display_name when opening the subrecord"
);
}
if (args.method === "onchange2" && args.model === "partner") {
if (args.method === "onchange" && args.model === "partner") {
assert.deepEqual(
args.args[1],
{
@@ -6646,7 +6646,7 @@ QUnit.module("Views", (hooks) => {
},
});
}
if (args.method === "onchange2" && args.model === "partner_type") {
if (args.method === "onchange" && args.model === "partner_type") {
assert.deepEqual(
args.args[1],
{
@@ -6761,7 +6761,7 @@ QUnit.module("Views", (hooks) => {
"input int_field is marked as invalid"
);
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
});
QUnit.test("rpc complete after destroying parent", async function (assert) {
@@ -6831,7 +6831,7 @@ QUnit.module("Views", (hooks) => {
arch: `<form><field name="foo"/><field name="int_field"/></form>`,
resId: 2,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step("onchange is done");
await def;
}
@@ -6944,7 +6944,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.args[1], { foo: "trigger an onchange" });
}
},
@@ -6980,7 +6980,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
value: {
p: [[1, 4, { foo: "foo changed" }]],
@@ -7173,7 +7173,7 @@ QUnit.module("Views", (hooks) => {
<field name="int_field" context="{'int_ctx': 1}"/>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.strictEqual(
args.kwargs.context.test,
1,
@@ -7719,7 +7719,7 @@ QUnit.module("Views", (hooks) => {
[0, commands[0][1], { foo: "some value", qux: 6.5 }],
]);
}
if (args.method === "onchange2") {
if (args.method === "onchange") {
return {
value: {
p: [[0, false, { foo: "some value", int_field: 44, qux: 6.5 }]],
@@ -7771,7 +7771,7 @@ QUnit.module("Views", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2" && checkOnchange) {
if (args.method === "onchange" && checkOnchange) {
assert.strictEqual(
args.kwargs.context.current_id,
false,
@@ -7879,7 +7879,7 @@ QUnit.module("Views", (hooks) => {
arch: `<form><group><field name="foo"/></group></form>`,
resId: 2,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
warning: {
title: "Warning",
@@ -8327,7 +8327,7 @@ QUnit.module("Views", (hooks) => {
resId: 2,
async mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2") {
if (args.method === "onchange") {
await def;
}
},
@@ -8339,7 +8339,7 @@ QUnit.module("Views", (hooks) => {
def.resolve();
await nextTick();
assert.verifySteps(["get_views", "web_read", "onchange2", "danger"]);
assert.verifySteps(["get_views", "web_read", "onchange", "danger"]);
});
QUnit.test("display toolbar", async function (assert) {
@@ -8484,7 +8484,7 @@ QUnit.module("Views", (hooks) => {
assert.verifySteps([
"get_views",
"onchange2",
"onchange",
"create",
"web_read",
`{"action_id":29,"context":{"lang":"en","uid":7,"tz":"taht","active_id":6,"active_ids":[6],"active_model":"partner","active_domain":[]}}`,
@@ -8699,7 +8699,7 @@ QUnit.module("Views", (hooks) => {
assert.step(args.method);
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
}
);
@@ -9358,7 +9358,7 @@ QUnit.module("Views", (hooks) => {
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
assert.containsOnce(target, ".o_form_editable");
await click(target, ".o_field_translate.btn-link");
assert.verifySteps(["create", "web_read", "get_installed", "get_field_translations"]);
@@ -9683,7 +9683,7 @@ QUnit.module("Views", (hooks) => {
"button should no longer be disabled"
);
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
// click on button, and click on ok in confirm dialog
await click(target.querySelector(".o_statusbar_buttons button"));
@@ -9727,7 +9727,7 @@ QUnit.module("Views", (hooks) => {
"confirmation dialog should have correct confirmation label"
);
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
}
);
@@ -9758,7 +9758,7 @@ QUnit.module("Views", (hooks) => {
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
await click(target.querySelector(".o_statusbar_buttons button"));
assert.verifySteps([]);
@@ -10040,7 +10040,7 @@ QUnit.module("Views", (hooks) => {
</field>
</form>`,
mockRPC(route, args) {
if (checkOnchange && args.method === "onchange2") {
if (checkOnchange && args.method === "onchange") {
if (args.args[2][0] === "display_name") {
// onchange on field display_name
assert.strictEqual(
@@ -10875,7 +10875,7 @@ QUnit.module("Views", (hooks) => {
"some foo value",
"foo field should have correct value"
);
assert.verifySteps(["get_views", "onchange2", "create", "web_read"]);
assert.verifySteps(["get_views", "onchange", "create", "web_read"]);
});
QUnit.test("saving with invalid uncommitted changes", async function (assert) {
@@ -10903,7 +10903,7 @@ QUnit.module("Views", (hooks) => {
assert.hasClass(target.querySelector("[name=qux]"), "o_field_invalid");
assert.containsOnce(target, ".o_notification .text-danger");
assert.containsOnce(target, ".o_form_editable .o_field_invalid[name=qux]");
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
});
QUnit.test(
@@ -10937,7 +10937,7 @@ QUnit.module("Views", (hooks) => {
</field>
</form>`,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
await onchangeDef;
}
if (args.method === "create") {
@@ -11014,7 +11014,7 @@ QUnit.module("Views", (hooks) => {
const createDef = makeDeferred();
const mockRPC = async (route, args) => {
if (args.method === "onchange2") {
if (args.method === "onchange") {
await onchangeDef;
}
if (args.method === "create") {
@@ -11532,7 +11532,7 @@ QUnit.module("Views", (hooks) => {
await editInput(target, '.o_field_widget[name="name"] input', "Test Company");
await clickSave(target);
assert.verifySteps(["get_views", "onchange2", "create", "reload company", "web_read"]);
assert.verifySteps(["get_views", "onchange", "create", "reload company", "web_read"]);
}
);
@@ -12178,7 +12178,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, { args, method, model }) {
if (method === "onchange2" && model === "partner") {
if (method === "onchange" && model === "partner") {
return def;
}
if (method === "write" && model === "partner") {
@@ -12214,7 +12214,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 1,
mockRPC(route, { args, method }) {
if (method === "onchange2") {
if (method === "onchange") {
return def;
}
if (method === "write") {
@@ -12284,7 +12284,7 @@ QUnit.module("Views", (hooks) => {
resId: 1,
mockRPC(route, { args, method }) {
assert.step(method);
if (method === "onchange2") {
if (method === "onchange") {
return def;
}
if (method === "write") {
@@ -12312,7 +12312,7 @@ QUnit.module("Views", (hooks) => {
window.dispatchEvent(new Event("beforeunload"));
await nextTick();
assert.verifySteps(["get_views", "web_read", "onchange2", "write"]);
assert.verifySteps(["get_views", "web_read", "onchange", "write"]);
}
);
@@ -12372,7 +12372,7 @@ QUnit.module("Views", (hooks) => {
resId: 1,
mockRPC(route, { method }) {
assert.step(method);
if (method === "onchange2") {
if (method === "onchange") {
return def;
}
},
@@ -12384,7 +12384,7 @@ QUnit.module("Views", (hooks) => {
window.dispatchEvent(new Event("beforeunload"));
await nextTick();
assert.verifySteps(["get_views", "web_read", "onchange2"]);
assert.verifySteps(["get_views", "web_read", "onchange"]);
}
);
@@ -12840,7 +12840,7 @@ QUnit.module("Views", (hooks) => {
});
await clickSave(target);
assert.verifySteps(["get_views", "onchange2", "create", "web_read"]);
assert.verifySteps(["get_views", "onchange", "create", "web_read"]);
});
QUnit.test(
@@ -12906,7 +12906,7 @@ QUnit.module("Views", (hooks) => {
target.querySelector(".o_list_renderer .o_data_row [name='int_field']").textContent,
"1"
);
assert.verifySteps(["get_views", "onchange2", "onchange2", "create", "web_read"]);
assert.verifySteps(["get_views", "onchange", "onchange", "create", "web_read"]);
}
);
@@ -13783,7 +13783,7 @@ QUnit.module("Views", (hooks) => {
</form>`,
resId: 2,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.strictEqual(args.args[1].name, "New Name");
assert.strictEqual(args.args[1].p.length, 1);
assert.deepEqual(args.args[1].p[0][2], { name: "yop" });
@@ -1872,10 +1872,10 @@ QUnit.module("Views", (hooks) => {
"web_read_group", // initial read_group
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"onchange2", // quick create
"onchange", // quick create
"name_create", // should perform a name_create to create the record
"web_read", // read the created record
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -1951,11 +1951,11 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"get_views", // form view in quick create
"onchange2", // quick create
"onchange", // quick create
"create", // should perform a create to create the record
"web_read",
"web_read", // read the created record
"onchange2", // new quick create
"onchange", // new quick create
]);
});
@@ -1998,7 +1998,7 @@ QUnit.module("Views", (hooks) => {
"should send the correct values"
);
}
if (args.method === "onchange2") {
if (args.method === "onchange") {
await def;
}
},
@@ -2225,10 +2225,10 @@ QUnit.module("Views", (hooks) => {
"web_read_group", // initial read_group
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"onchange2", // quick create
"onchange", // quick create
"name_create", // should perform a name_create to create the record
"web_read", // read the created record
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -2295,11 +2295,11 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"get_views", // form view in quick create
"onchange2", // quick create
"onchange", // quick create
"create", // should perform a create to create the record
"web_read",
"web_read", // read the created record
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -2351,10 +2351,10 @@ QUnit.module("Views", (hooks) => {
"web_read_group", // initial read_group
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"onchange2", // quick create
"onchange", // quick create
"name_create", // should perform a name_create to create the record
"web_read", // read the created record
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -2409,10 +2409,10 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"unity_web_search_read", // read records when unfolding 'None'
"onchange2", // quick create
"onchange", // quick create
"name_create", // should perform a name_create to create the record
"web_read", // read the created record
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -2477,10 +2477,10 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"get_views", // get form view
"onchange2", // quick create
"onchange", // quick create
"create", // should perform a create to create the record
"web_read", // read the created record
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -2551,10 +2551,10 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"get_views", // get form view
"onchange2", // quick create
"onchange", // quick create
"create", // should perform a create to create the record
"web_read",
"onchange2",
"onchange",
]);
});
@@ -2584,7 +2584,7 @@ QUnit.module("Views", (hooks) => {
]);
await createRecord();
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// do not fill anything and validate
await validateRecord();
@@ -2654,8 +2654,8 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"get_views", // form view in quick create
"onchange2", // quick create
"onchange2", // onchange due to 'foo' field change
"onchange", // quick create
"onchange", // onchange due to 'foo' field change
]);
});
@@ -2748,13 +2748,13 @@ QUnit.module("Views", (hooks) => {
// click on 'Create' -> should open the quick create in the first column
await quickCreateRecord();
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
// fill the 'foo' field -> should trigger the onchange
await editQuickCreateInput("foo", "new partner");
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
await validateRecord();
assert.verifySteps(["create", "web_read", "onchange2"]);
assert.verifySteps(["create", "web_read", "onchange"]);
});
QUnit.test("quick create record and change state in grouped mode", async (assert) => {
@@ -3198,7 +3198,7 @@ QUnit.module("Views", (hooks) => {
groupBy: ["bar"],
async mockRPC(route, { method, args }) {
switch (method) {
case "onchange2": {
case "onchange": {
assert.step(method);
if (shouldDelayOnchange) {
await prom;
@@ -3271,10 +3271,10 @@ QUnit.module("Views", (hooks) => {
);
assert.verifySteps([
"onchange2", // default_get
"onchange2", // new partner
"onchange", // default_get
"onchange", // new partner
"create",
"onchange2", // default_get
"onchange", // default_get
]);
}
);
@@ -3306,8 +3306,8 @@ QUnit.module("Views", (hooks) => {
"</t></templates></kanban>",
groupBy: ["bar"],
async mockRPC(route, args) {
if (args.method === "onchange2") {
assert.step("onchange2");
if (args.method === "onchange") {
assert.step("onchange");
if (shouldDelayOnchange) {
await prom;
}
@@ -3370,10 +3370,10 @@ QUnit.module("Views", (hooks) => {
);
assert.verifySteps([
"onchange2", // default_get
"onchange2", // new partner
"onchange", // default_get
"onchange", // new partner
"create",
"onchange2", // default_get
"onchange", // default_get
]);
}
);
@@ -6872,12 +6872,12 @@ QUnit.module("Views", (hooks) => {
"get_views",
"web_read_group",
"read_progress_bar",
"onchange2",
"onchange",
"name_create",
"web_read",
"read_progress_bar",
"web_read_group",
"onchange2",
"onchange",
]);
}
);
@@ -9578,11 +9578,11 @@ QUnit.module("Views", (hooks) => {
"read_progress_bar",
"unity_web_search_read",
"unity_web_search_read",
"onchange2",
"onchange",
"name_create",
"web_read",
"read_progress_bar",
"onchange2",
"onchange",
]);
});
@@ -10293,12 +10293,12 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read",
"unity_web_search_read",
"get_views",
"onchange2",
"onchange",
"create",
"web_read",
"read_progress_bar",
"web_read_group",
"onchange2",
"onchange",
]);
}
);
@@ -10368,19 +10368,19 @@ QUnit.module("Views", (hooks) => {
"web_read_group",
"unity_web_search_read",
"get_views",
"onchange2",
"onchange",
"create",
"web_read",
"read_progress_bar",
"web_read_group",
"web_read_group",
"onchange2",
"onchange",
"create",
"web_read",
"read_progress_bar",
"web_read_group",
"web_read_group",
"onchange2",
"onchange",
]);
}
);
@@ -13187,13 +13187,13 @@ QUnit.module("Views", (hooks) => {
"web_read_group", // initial read_group
"unity_web_search_read", // initial search_read (first column)
"unity_web_search_read", // initial search_read (second column)
"onchange2", // quick create
"onchange", // quick create
"name_create", // should perform a name_create to create the record
"get_views", // load views for form view dialog
"onchange2", // load of a virtual record in form view dialog
"onchange", // load of a virtual record in form view dialog
"create", // save virtual record
"web_read", // read the created record to get foo value
"onchange2", // reopen the quick create automatically
"onchange", // reopen the quick create automatically
]);
});
@@ -1588,7 +1588,7 @@ QUnit.module("Views", (hooks) => {
await click(target, ".o_list_view");
assert.containsN(target, ".o_data_row", 5);
assert.strictEqual(target.querySelector(".o_data_row [name='int_field']").textContent, "1");
assert.verifySteps(["onchange2", "create", "web_read"]);
assert.verifySteps(["onchange", "create", "web_read"]);
});
QUnit.test("multi_edit: edit a required field with an invalid value", async function (assert) {
@@ -1795,7 +1795,7 @@ QUnit.module("Views", (hooks) => {
await click($(".o_list_button_add:visible").get(0));
assert.verifySteps(
["get_views", "unity_web_search_read", "onchange2"],
["get_views", "unity_web_search_read", "onchange"],
"no nameget should be done"
);
}
@@ -2322,7 +2322,7 @@ QUnit.module("Views", (hooks) => {
</tree>`,
groupBy: ["m2m"],
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(args.kwargs.context.default_m2m, [1]);
}
},
@@ -8233,7 +8233,7 @@ QUnit.module("Views", (hooks) => {
</tree>`,
groupBy: ["currency_id"],
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.deepEqual(
args.args[3],
{
@@ -9377,7 +9377,7 @@ QUnit.module("Views", (hooks) => {
assert.containsN(target, "tr.o_data_row", 5);
assert.hasClass(target.querySelector("tr.o_data_row:nth-child(5)"), "o_selected_row");
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
});
QUnit.test("pressing tab on last cell of editable list view", async function (assert) {
@@ -9426,7 +9426,7 @@ QUnit.module("Views", (hooks) => {
"/web/dataset/call_kw/foo/unity_web_search_read",
"/web/dataset/call_kw/foo/write",
"/web/dataset/call_kw/foo/web_read",
"/web/dataset/call_kw/foo/onchange2",
"/web/dataset/call_kw/foo/onchange",
]);
});
@@ -9447,7 +9447,7 @@ QUnit.module("Views", (hooks) => {
return result;
});
}
if (args.method === "onchange2") {
if (args.method === "onchange") {
return onchangeGetPromise.then(function () {
return result;
});
@@ -9491,7 +9491,7 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read",
"write",
"web_read",
"onchange2",
"onchange",
]);
});
@@ -10143,7 +10143,7 @@ QUnit.module("Views", (hooks) => {
</group>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(`onchange:${args.model}`);
}
},
@@ -11087,7 +11087,7 @@ QUnit.module("Views", (hooks) => {
arch: '<tree editable="top"><field name="m2o" required="1"/></tree>',
mockRPC: async function (route, args, performRPC) {
const result = await performRPC(route, args);
if (args.method === "onchange2") {
if (args.method === "onchange") {
await prom;
}
return result;
@@ -11636,7 +11636,7 @@ QUnit.module("Views", (hooks) => {
// create a record and edit its value
await click($(".o_list_button_add:visible").get(0));
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
await editInput(target, ".o_selected_row [name=int_field] input", 123);
assert.containsNone(document.body, ".modal");
@@ -14303,10 +14303,10 @@ QUnit.module("Views", (hooks) => {
"unity_web_search_read",
"write",
"web_read",
"onchange2",
"onchange",
"create",
"web_read",
"onchange2",
"onchange",
]);
});
@@ -14397,7 +14397,7 @@ QUnit.module("Views", (hooks) => {
"web_read_group",
"unity_web_search_read",
"unity_web_search_read",
"onchange2",
"onchange",
]);
});
@@ -15753,7 +15753,7 @@ QUnit.module("Views", (hooks) => {
</tree>`,
groupBy: ["priority"],
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(args.kwargs.context.default_priority.toString());
}
},
@@ -15793,7 +15793,7 @@ QUnit.module("Views", (hooks) => {
</tree>`,
groupBy: ["m2o"],
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(args.kwargs.context.default_m2o.toString());
}
},
@@ -17229,7 +17229,7 @@ QUnit.module("Views", (hooks) => {
<field name="int_field"/>
</tree>`,
mockRPC(route, { args, method, model }) {
if (model === "foo" && method === "onchange2") {
if (model === "foo" && method === "onchange") {
return def;
}
if (model === "foo" && method === "write") {
@@ -17265,7 +17265,7 @@ QUnit.module("Views", (hooks) => {
<field name="int_field"/>
</tree>`,
mockRPC(route, { args, method, model }) {
if (model === "foo" && method === "onchange2") {
if (model === "foo" && method === "onchange") {
return def;
}
if (model === "foo" && method === "write") {
@@ -17320,7 +17320,7 @@ QUnit.module("Views", (hooks) => {
</group>
</form>`,
mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step(`onchange:${args.model}`);
}
},
@@ -17740,7 +17740,7 @@ QUnit.module("Views", (hooks) => {
</tree>`,
async mockRPC(route, args) {
assert.step(args.method);
if (args.method === "onchange2") {
if (args.method === "onchange") {
await Promise.resolve(def);
}
},
@@ -17752,7 +17752,7 @@ QUnit.module("Views", (hooks) => {
// add a new line
await click($(".o_list_button_add:visible").get(0));
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// we want to add a delay to simulate an onchange
def = makeDeferred();
@@ -17765,7 +17765,7 @@ QUnit.module("Views", (hooks) => {
// check that nothing changed before the onchange finished
assert.strictEqual(target.querySelector("[name=int_field] input").value, value);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
// unlock onchange
def.resolve();
@@ -19327,7 +19327,7 @@ QUnit.module("Views", (hooks) => {
<field name="m2o"/>
</tree>`,
async mockRPC(route, args) {
if (args.method === "onchange2") {
if (args.method === "onchange") {
assert.step("onchange");
await def;
return { value: { m2o: [3, "Value 3"] } };
@@ -145,7 +145,7 @@ QUnit.module("Widgets", (hooks) => {
<field name="display_name" required="1"/>
</form>`,
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
await editInput(target, "[name='display_name'] input", "yop");
await click(target, ".o_attach_document");
@@ -289,7 +289,7 @@ QUnit.module("ActionManager", (hooks) => {
"/web/webclient/load_menus",
"/web/action/load",
"get_views",
"onchange2",
"onchange",
]);
});
@@ -634,7 +634,7 @@ QUnit.module("ActionManager", (hooks) => {
view_type: "form",
id: "",
});
assert.verifySteps(["/web/dataset/call_kw/partner/onchange2"]);
assert.verifySteps(["/web/dataset/call_kw/partner/onchange"]);
assert.containsOnce(target, ".o_form_view .o_form_editable");
assert.deepEqual(getBreadCrumbTexts(target), ["Partner", "New"]);
});
@@ -63,7 +63,7 @@ QUnit.module("ActionManager", (hooks) => {
"/web/webclient/load_menus",
"/web/action/load",
"get_views",
"onchange2",
"onchange",
"/web/action/load",
"/web/action/run",
"close handler",
@@ -48,7 +48,7 @@ QUnit.module("ActionManager", (hooks) => {
"/web/webclient/load_menus",
"/web/action/load",
"get_views",
"onchange2",
"onchange",
]);
});
@@ -143,7 +143,7 @@ QUnit.module("ActionManager", (hooks) => {
assert.verifySteps([
"/web/action/load",
"/web/dataset/call_kw/partner/get_views",
"/web/dataset/call_kw/partner/onchange2",
"/web/dataset/call_kw/partner/onchange",
]);
await testUtils.dom.click(`button[name="5"]`);
assert.verifySteps([
@@ -151,7 +151,7 @@ QUnit.module("ActionManager", (hooks) => {
"/web/dataset/call_kw/partner/web_read",
"/web/action/load",
"/web/dataset/call_kw/partner/get_views",
"/web/dataset/call_kw/partner/onchange2",
"/web/dataset/call_kw/partner/onchange",
]);
assert.containsOnce(document.body, ".modal");
await testUtils.dom.click(`button[name="some_method"]`);
@@ -185,7 +185,7 @@ QUnit.module("ActionManager", (hooks) => {
"web_read_group",
"unity_web_search_read",
"unity_web_search_read",
"onchange2",
"onchange",
"name_create",
"web_read",
"web_read",
@@ -709,7 +709,7 @@ QUnit.module("ActionManager", (hooks) => {
"/web/action/load",
"get_views",
"unity_web_search_read",
"onchange2",
"onchange",
"unity_web_search_read",
]);
});
@@ -790,7 +790,7 @@ QUnit.module("ActionManager", (hooks) => {
};
const def = testUtils.makeTestPromise();
const mockRPC = async (route, args) => {
if (args.method === "onchange2") {
if (args.method === "onchange") {
// delay the opening of the dialog
await def;
}
@@ -1663,7 +1663,7 @@ QUnit.module("ActionManager", (hooks) => {
"/web/action/load",
"get_views",
"unity_web_search_read",
"onchange2",
"onchange",
"get_formview_action",
"create", // FIXME: to check with mcm
"get_views",
@@ -1948,7 +1948,7 @@ QUnit.module("ActionManager", (hooks) => {
async function (assert) {
serverData.views["partner,false,form"] = `<form><field name="foo"/></form>`;
const mockRPC = (route, args) => {
if (args.method === "onchange2") {
if (args.method === "onchange") {
return Promise.resolve({
value: {},
warning: {
@@ -2164,7 +2164,7 @@ QUnit.module("ActionManager", (hooks) => {
.add("odoo.exceptions.ValidationError", WarningDialogWait);
const mockRPC = (route, args) => {
if (args.method === "onchange2" && args.model === "partner") {
if (args.method === "onchange" && args.model === "partner") {
throw makeServerError({ type: "ValidationError" });
}
};
@@ -412,12 +412,12 @@ QUnit.module("SettingsFormView", (hooks) => {
assert.notOk(target.querySelector(".o_field_boolean input").disabled);
assert.verifySteps([
"get_views", // initial setting action
"onchange2", // this is a setting view => new record transient record
"onchange", // this is a setting view => new record transient record
"create", // create the record before doing the action
"web_read", // read the created record
"get_views", // for other action in breadcrumb,
"unity_web_search_read", // with a searchread
"onchange2", // when we come back, we want to restart from scratch
"onchange", // when we come back, we want to restart from scratch
]);
}
);
@@ -550,7 +550,7 @@ QUnit.module("SettingsFormView", (hooks) => {
assert.verifySteps([
"get_views", // initial setting action
"onchange2", // this is a setting view => new record transient record
"onchange", // this is a setting view => new record transient record
]);
await click(target.querySelector("button[name='4']"));
@@ -559,14 +559,14 @@ QUnit.module("SettingsFormView", (hooks) => {
"create", // settings: create the record before doing the action
"web_read", // settings: read the created record
"get_views", // dialog: get views
"onchange2", // dialog: onchange
"onchange", // dialog: onchange
]);
await click(target, ".modal button.btn.btn-primary.o_form_button_save");
assert.verifySteps([
"create", // dialog: create the record before doing back to the settings
"web_read", // dialog: read the created record
"onchange2", // settings: when we come back, we want to restart from scratch
"onchange", // settings: when we come back, we want to restart from scratch
]);
});
@@ -1034,7 +1034,7 @@ QUnit.module("SettingsFormView", (hooks) => {
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
await click(target, ".o_field_boolean input[type='checkbox']");
await click(target, ".myBtn");
await click(target, ".modal .btn-primary");
@@ -1075,7 +1075,7 @@ QUnit.module("SettingsFormView", (hooks) => {
},
});
assert.verifySteps(["get_views", "onchange2"]);
assert.verifySteps(["get_views", "onchange"]);
await click(target, ".o_field_boolean input[type='checkbox']");
await click(target, ".myBtn");
await click(target.querySelectorAll(".modal .btn-secondary")[1]);
@@ -1479,7 +1479,7 @@ QUnit.module("SettingsFormView", (hooks) => {
"/web/webclient/load_menus",
"/web/action/load",
"get_views",
"onchange2",
"onchange",
]);
assert.containsNone(
target,
@@ -1497,7 +1497,7 @@ QUnit.module("SettingsFormView", (hooks) => {
".o_field_boolean input:checked",
"checkbox should not be checked"
);
assert.verifySteps(["onchange2"]);
assert.verifySteps(["onchange"]);
});
QUnit.test("Settings Radio widget: show and search", async function (assert) {
+2 -2
View File
@@ -1737,7 +1737,7 @@ class UsersView(models.Model):
valid_fields = partition(is_reified_group, fnames)[1]
return super()._read_format(valid_fields, load)
def onchange2(self, values, field_names, fields_spec):
def onchange(self, values, field_names, fields_spec):
reified_fnames = [fname for fname in fields_spec if is_reified_group(fname)]
if reified_fnames:
values = {key: val for key, val in values.items() if key != 'groups_id'}
@@ -1754,7 +1754,7 @@ class UsersView(models.Model):
}
fields_spec['groups_id'] = {}
result = super().onchange2(values, field_names, fields_spec)
result = super().onchange(values, field_names, fields_spec)
if reified_fnames and 'groups_id' in result.get('value', {}):
self._add_reified_groups(reified_fnames, result['value'])
+1 -1
View File
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from . import test_new_fields
from . import test_onchange2
from . import test_onchange
from . import test_attributes
from . import test_one2many
from . import test_many2many
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from unittest import skip
from unittest.mock import patch
from odoo.addons.base.tests.common import SavepointCaseWithUserDemo
@@ -15,7 +14,7 @@ def strip_prefix(prefix, names):
return [name[size:] for name in names if name.startswith(prefix)]
class TestOnchange2(SavepointCaseWithUserDemo):
class TestOnchange(SavepointCaseWithUserDemo):
def setUp(self):
super().setUp()
@@ -31,7 +30,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
user = self.env.user
fields_spec = self.env['test_new_api.message']._get_fields_spec()
values = self.env['test_new_api.message'].onchange2({}, [], fields_spec)['value']
values = self.env['test_new_api.message'].onchange({}, [], fields_spec)['value']
self.assertEqual(values['discussion'], False)
self.assertEqual(values['body'], False)
self.assertEqual(values['author'], {'id': user.id, 'display_name': user.display_name})
@@ -47,7 +46,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
self.assertEqual(values, {'tags': [Command.set(tag.ids)]})
fields_spec = {'tags': {}}
result = model.onchange2({}, [], fields_spec)
result = model.onchange({}, [], fields_spec)
self.assertEqual(result['value'], {'tags': [(Command.LINK, tag.id, {'id': tag.id})]})
def test_get_field(self):
@@ -80,7 +79,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'size': 0,
}
self.env.invalidate_all()
result = self.Message.onchange2(values, ['discussion'], fields_spec)
result = self.Message.onchange(values, ['discussion'], fields_spec)
self.assertEqual(result['value'], {
'name': f"[{discussion.name}] {USER.name}",
})
@@ -94,7 +93,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'size': 0,
}
self.env.invalidate_all()
result = self.Message.onchange2(values, ['body'], fields_spec)
result = self.Message.onchange(values, ['body'], fields_spec)
self.assertEqual(result['value'], {
'size': len(BODY),
})
@@ -109,7 +108,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'size': 0,
}
self.env.invalidate_all()
result = self.Message.onchange2(values, ['body'], fields_spec)
result = self.Message.onchange(values, ['body'], fields_spec)
self.assertNotIn('name', result['value'])
def test_onchange_many2one(self):
@@ -133,7 +132,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'root_categ': False,
}
self.env.invalidate_all()
result = Category.onchange2(values, ['parent'], fields_spec)
result = Category.onchange(values, ['parent'], fields_spec)
self.assertEqual(result['value'], {
'root_categ': {'id': root.id, 'display_name': root.name},
})
@@ -145,7 +144,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'root_categ': root.id,
}
self.env.invalidate_all()
result = Category.onchange2(values, ['parent'], fields_spec)
result = Category.onchange(values, ['parent'], fields_spec)
self.assertEqual(result['value'], {
'root_categ': False,
})
@@ -194,7 +193,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
],
}
self.env.invalidate_all()
result = self.Discussion.onchange2(values, ['name'], fields_spec)
result = self.Discussion.onchange(values, ['name'], fields_spec)
self.assertIn('messages', result['value'])
self.assertEqual(result['value']['messages'], [
Command.update(message1.id, {'name': f"[Foo] {USER.name}"}),
@@ -205,7 +204,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
# ensure onchange changing one2many without subfield works
one_level_fields_spec = {field_name: {} for field_name in fields_spec}
values = dict(values, name='{generate_dummy_message}')
result = self.Discussion.with_context(generate_dummy_message=True).onchange2(values, ['name'], one_level_fields_spec)
result = self.Discussion.with_context(generate_dummy_message=True).onchange(values, ['name'], one_level_fields_spec)
self.assertEqual(result['value']['messages'], [
Command.create({}),
])
@@ -248,7 +247,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
],
}
self.env.invalidate_all()
result = self.Discussion.onchange2(values, ['name'], fields_spec)
result = self.Discussion.onchange(values, ['name'], fields_spec)
self.assertIn('messages', result['value'])
self.assertItemsEqual(result['value']['messages'], [
(Command.UPDATE, 'virtual1', {'name': f"[Foo] {USER.name}"}),
@@ -293,7 +292,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
}
self.env.invalidate_all()
result = multi.onchange2(values, ['partner'], fields_spec)
result = multi.onchange(values, ['partner'], fields_spec)
self.assertEqual(result['value'], {
'name': partner2.name,
'lines': [
@@ -321,7 +320,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
],
}
self.env.invalidate_all()
result = multi.onchange2(values, ['partner'], fields_spec)
result = multi.onchange(values, ['partner'], fields_spec)
expected_value = {
'name': partner2.name,
'lines': [
@@ -342,7 +341,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
fields_spec = multi._get_fields_spec()
fields_spec['lines']['fields']['tags']['fields']['id'] = {}
result = multi.onchange2(values, ['partner'], fields_spec)
result = multi.onchange(values, ['partner'], fields_spec)
self.assertEqual(result['value'], expected_value)
# ensure inverse of one2many field is not returned
@@ -350,7 +349,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
fields_spec = multi._get_fields_spec()
fields_spec['lines']['fields']['multi'] = {}
result = multi.onchange2(values, ['partner'], fields_spec)
result = multi.onchange(values, ['partner'], fields_spec)
self.assertEqual(result['value'], expected_value)
def test_onchange_one2many_default(self):
@@ -371,7 +370,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'body': {},
}},
}
result = model.onchange2(values, ['name'], fields_spec)
result = model.onchange(values, ['name'], fields_spec)
self.assertEqual(result['value'], {
'messages': [Command.update('virtual1', {'name': '[Stuff] OdooBot'})],
})
@@ -394,7 +393,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'moderator': demo.id,
}
self.env.invalidate_all()
result = discussion.onchange2(values, ['moderator'], fields_spec)
result = discussion.onchange(values, ['moderator'], fields_spec)
self.assertIn('participants', result['value'])
self.assertItemsEqual(
@@ -415,13 +414,13 @@ class TestOnchange2(SavepointCaseWithUserDemo):
# setting 'value1' to 42 should trigger the change of 'value2'
self.env.invalidate_all()
values = {'name': 'X', 'value1': 42, 'value2': False}
result = Foo.onchange2(values, ['value1'], fields_spec)
result = Foo.onchange(values, ['value1'], fields_spec)
self.assertEqual(result['value'], {'value2': 666})
# setting 'value1' to 24 should not trigger the change of 'value2'
self.env.invalidate_all()
values = {'name': 'X', 'value1': 24, 'value2': False}
result = Foo.onchange2(values, ['value1'], fields_spec)
result = Foo.onchange(values, ['value1'], fields_spec)
self.assertEqual(result['value'], {})
def test_onchange_one2many_first(self):
@@ -478,7 +477,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'participants': [Command.link(usr.id) for usr in discussion.participants],
'message_concat': False,
}
result = discussion.onchange2(values, ['messages'], fields_spec)
result = discussion.onchange(values, ['messages'], fields_spec)
self.assertIn('message_concat', result['value'])
self.assertEqual(result['value']['message_concat'], "\n".join(lines))
@@ -545,7 +544,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'important_emails': [Command.set(discussion.important_emails.ids)],
}
self.env.invalidate_all()
result = discussion.onchange2(values, ['name'], fields_spec)
result = discussion.onchange(values, ['name'], fields_spec)
self.assertEqual(
result['value']['important_emails'],
@@ -575,13 +574,13 @@ class TestOnchange2(SavepointCaseWithUserDemo):
self.env.invalidate_all()
Message = self.env['test_new_api.related']
result = Message.onchange2(values, ['message'], fields_spec)
result = Message.onchange(values, ['message'], fields_spec)
self.assertEqual(result['value'], expected)
self.env.invalidate_all()
Message = self.env(user=self.user_demo.id)['test_new_api.related']
result = Message.onchange2(values, ['message'], fields_spec)
result = Message.onchange(values, ['message'], fields_spec)
self.assertEqual(result['value'], expected)
@@ -617,7 +616,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
# changing 'discussion' on message should not read 'messages' on discussion
with patch.object(type(discussion), 'read', mock_read, create=True):
self.env.invalidate_all()
self.Message.onchange2(values, ['discussion'], fields_spec)
self.Message.onchange(values, ['discussion'], fields_spec)
self.assertFalse(called[0], "discussion.messages has been read")
@@ -634,7 +633,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'order_id': {},
'subtotal': {},
}
result = self.env['test_new_api.monetary_order_line'].onchange2(values, [], fields_spec)
result = self.env['test_new_api.monetary_order_line'].onchange(values, [], fields_spec)
self.assertEqual(result['value']['order_id'], order.id)
@@ -727,7 +726,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'name': "{generate_dummy_message}",
}
result = self.Discussion.with_context(generate_dummy_message=True).onchange2(values, ['name'], fields_spec)
result = self.Discussion.with_context(generate_dummy_message=True).onchange(values, ['name'], fields_spec)
self.assertEqual(result['value']['messages'], [
Command.create({
'name': f'[{{generate_dummy_message}}] {USER.name}',
@@ -753,7 +752,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'root_categ': False,
}
self.env.invalidate_all()
result = Category.onchange2(values, ['parent'], fields_spec)
result = Category.onchange(values, ['parent'], fields_spec)
self.assertEqual(result['value'], {
'root_categ': {'id': root.id, 'display_name': root.name, 'color': root.color},
})
@@ -802,7 +801,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
}
self.env.invalidate_all()
result = multi.onchange2(values, ['partner'], fields_spec)
result = multi.onchange(values, ['partner'], fields_spec)
self.assertEqual(result['value'], {
'name': partner.name,
'lines': [
@@ -850,7 +849,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
}
self.env.invalidate_all()
result = multi.onchange2(values, ['tags'], fields_spec)
result = multi.onchange(values, ['tags'], fields_spec)
self.assertEqual(result['value'], {
'lines': [
Command.update(line.id, {
@@ -885,7 +884,7 @@ class TestOnchange2(SavepointCaseWithUserDemo):
'tags': {},
}
self.env.invalidate_all()
result = multi.onchange2(values, ['tags'], fields_spec)
result = multi.onchange(values, ['tags'], fields_spec)
self.assertEqual(result['value'], {
'lines': [
Command.update(line.id, {
@@ -1169,7 +1168,7 @@ class TestComputeOnchange2(common.TransactionCase):
Command.update(line.id, {'value': 8, 'edit': 9, 'count': 0}),
(Command.CREATE, 'virtual2', {'value': 8, 'edit': 9, 'count': 0}),
]
result = record.onchange2({'line_ids': line_ids}, ['line_ids'], fields_spec)
result = record.onchange({'line_ids': line_ids}, ['line_ids'], fields_spec)
expected = {'value': {
'line_ids': [
Command.update(line.id, {'count': 8}),
@@ -1183,7 +1182,7 @@ class TestComputeOnchange2(common.TransactionCase):
(op, id_, dict(reversed(list(vals.items()))))
for op, id_, vals in line_ids
]
result = record.onchange2({'line_ids': line_ids}, ['line_ids'], fields_spec)
result = record.onchange({'line_ids': line_ids}, ['line_ids'], fields_spec)
self.assertEqual(result, expected)
def test_computed_editable_one2many_domain(self):
@@ -1409,7 +1409,7 @@ class PropertiesCase(TestPropertiesMixin):
'value': 'Test',
}],
}
result = message.onchange2(values, ['discussion'], fields_spec)
result = message.onchange(values, ['discussion'], fields_spec)
self.assertIn('attributes', result['value'], 'Should have detected the definition record change')
self.assertEqual(result['value']['attributes'], [], 'Should have reset the properties definition')
@@ -1420,7 +1420,7 @@ class PropertiesCase(TestPropertiesMixin):
'discussion': self.discussion_2.id,
'attributes': [],
}
result = message.onchange2(values, ['discussion'], fields_spec)
result = message.onchange(values, ['discussion'], fields_spec)
self.assertIn('attributes', result['value'], 'Should have detected the definition record change')
self.assertEqual(
result['value']['attributes'],
+4 -9
View File
@@ -6418,21 +6418,16 @@ class BaseModel(metaclass=MetaModel):
for dep in self.pool.get_dependent_fields(field.base_field)
)
def _onchange_eval(self, field_name, onchange, result):
""" Apply onchange method(s) for field ``field_name`` with spec ``onchange``
on record ``self``. Value assignments are applied on ``self``, while
domain and warning messages are put in dictionary ``result``.
def _apply_onchange_methods(self, field_name, result):
""" Apply onchange method(s) for field ``field_name`` on ``self``. Value
assignments are applied on ``self``, while warning messages are put
in dictionary ``result``.
"""
onchange = onchange.strip()
if onchange not in ("1", "true"):
return
for method in self._onchange_methods.get(field_name, ()):
res = method(self)
if not res:
continue
if res.get('value'):
res['value'].pop('id', None)
for key, val in res['value'].items():
if key in self._fields and key != 'id':
self[key] = val
+1 -1
View File
@@ -529,7 +529,7 @@ class Form:
record = record.with_context(**context)
values = self._get_onchange_values()
result = record.onchange2(values, field_names, self._view['fields_spec'])
result = record.onchange(values, field_names, self._view['fields_spec'])
self._env.flush_all()
self._env.clear() # discard cache and pending recomputations