diff options
Diffstat (limited to 'addons/web/static/tests/views/list_tests.js')
| -rw-r--r-- | addons/web/static/tests/views/list_tests.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index 5c30d59593c..481ec86a6e8 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -7250,6 +7250,82 @@ QUnit.module('Views', { list.destroy(); }); + QUnit.test('multi edit reference field batched in grouped list', async function (assert) { + assert.expect(18); + + this.data.foo.records= [ + // group 1 + {id: 1, foo: '1', reference: 'bar,1'}, + {id: 2, foo: '1', reference: 'bar,2'}, + //group 2 + {id: 3, foo: '2', reference: 'res_currency,1'}, + {id: 4, foo: '2', reference: 'bar,2'}, + {id: 5, foo: '2', reference: 'bar,3'}, + ]; + // Field boolean_toggle just to simplify the test flow + let nameGetCount = 0; + const list = await createView({ + View: ListView, + model: 'foo', + data: this.data, + arch: `<tree expand="1" multi_edit="1"> + <field name="foo" invisible="1"/> + <field name="bar" widget="boolean_toggle"/> + <field name="reference"/> + </tree>`, + groupBy: ['foo'], + mockRPC: function (route, args) { + assert.step(args.method || route); + if (args.method === 'write') { + assert.deepEqual(args.args, [[1,2,3], {bar: true}]); + } + if (args.method === 'name_get') { + if (nameGetCount === 2) { + assert.strictEqual(args.model, 'bar'); + assert.deepEqual(args.args[0], [1,2]); + } + if (nameGetCount === 3) { + assert.strictEqual(args.model, 'res_currency'); + assert.deepEqual(args.args[0], [1]); + } + nameGetCount++; + } + return this._super.apply(this, arguments); + }, + }); + + assert.verifySteps([ + 'web_read_group', + 'name_get', + 'name_get', + ]); + await testUtils.dom.click(list.$('.o_data_row .o_list_record_selector input')[0]); + await testUtils.dom.click(list.$('.o_data_row .o_list_record_selector input')[1]); + await testUtils.dom.click(list.$('.o_data_row .o_list_record_selector input')[2]); + await testUtils.dom.click(list.$('.o_data_row .o_field_boolean')[0]); + assert.containsOnce(document.body, '.modal'); + await testUtils.dom.click($('.modal .modal-footer .btn-primary')); + assert.containsNone(document.body, '.modal'); + assert.verifySteps([ + 'write', + 'read', + 'name_get', + 'name_get', + ]); + assert.containsN(list, '.o_group_header', 2); + + const allNames = Array.from(list.el.querySelectorAll('.o_data_cell')) + .filter(node => !node.children.length).map(n=>n.textContent); + assert.deepEqual(allNames, [ + 'Value 1', + 'Value 2', + 'USD', + 'Value 2', + 'Value 3', + ]); + list.destroy(); + }); + QUnit.test('editable list view: contexts are correctly sent', async function (assert) { assert.expect(6); |
