summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/views/list_tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/tests/views/list_tests.js')
-rw-r--r--addons/web/static/tests/views/list_tests.js110
1 files changed, 107 insertions, 3 deletions
diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js
index d389e4ef34c..3fb1ca99ded 100644
--- a/addons/web/static/tests/views/list_tests.js
+++ b/addons/web/static/tests/views/list_tests.js
@@ -3156,20 +3156,118 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('result of consecutive resequences is correctly sorted', function (assert) {
+ assert.expect(9);
+ this.data = { // we want the data to be minimal to have a minimal test
+ foo: {
+ fields: {int_field: {string: "int_field", type: "integer", sortable: true}},
+ records: [
+ {id: 1, int_field: 0},
+ {id: 2, int_field: 1},
+ {id: 3, int_field: 2},
+ {id: 4, int_field: 3},
+ ]
+ }
+ };
+ var moves = 0;
+ var list = createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: '<tree>' +
+ '<field name="int_field" widget="handle"/>' +
+ '<field name="id"/>' +
+ '</tree>',
+ mockRPC: function (route, args) {
+ if (route === '/web/dataset/resequence') {
+ if (moves === 0) {
+ assert.deepEqual(args, {
+ model: "foo",
+ ids: [4, 3],
+ offset: 2,
+ field: "int_field",
+ });
+ }
+ if (moves === 1) {
+ assert.deepEqual(args, {
+ model: "foo",
+ ids: [1, 4, 2, 3],
+ field: "int_field",
+ });
+ }
+ if (moves === 2) {
+ assert.deepEqual(args, {
+ model: "foo",
+ ids: [2, 4],
+ offset: 1,
+ field: "int_field",
+ });
+ }
+ if (moves === 3) {
+ assert.deepEqual(args, {
+ model: "foo",
+ ids: [1, 4, 2, 3],
+ field: "int_field",
+ });
+ }
+ moves += 1;
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+ assert.strictEqual(list.$('tbody tr td').text(), '1234',
+ "default should be sorted by id");
+ testUtils.dragAndDrop(
+ list.$('.ui-sortable-handle').eq(3),
+ list.$('tbody tr').eq(2),
+ {position: 'top'}
+ );
+ assert.strictEqual(list.$('tbody tr td').text(), '1243',
+ "the int_field (sequence) should have been correctly updated");
+ testUtils.dragAndDrop(
+ list.$('.ui-sortable-handle').eq(2),
+ list.$('tbody tr').eq(1),
+ {position: 'top'}
+ );
+ assert.deepEqual(list.$('tbody tr td').text(), '1423',
+ "the int_field (sequence) should have been correctly updated");
+ testUtils.dragAndDrop(
+ list.$('.ui-sortable-handle').eq(1),
+ list.$('tbody tr').eq(3),
+ {position: 'top'}
+ );
+ assert.deepEqual(list.$('tbody tr td').text(), '1243',
+ "the int_field (sequence) should have been correctly updated");
+ testUtils.dragAndDrop(
+ list.$('.ui-sortable-handle').eq(2),
+ list.$('tbody tr').eq(1),
+ {position: 'top'}
+ );
+ assert.deepEqual(list.$('tbody tr td').text(), '1423',
+ "the int_field (sequence) should have been correctly updated");
+ list.destroy();
+ });
+
QUnit.test('editable list with handle widget', function (assert) {
assert.expect(12);
+ // resequence makes sense on a sequence field, not on arbitrary fields
+ this.data.foo.records[0].int_field = 0;
+ this.data.foo.records[1].int_field = 1;
+ this.data.foo.records[2].int_field = 2;
+ this.data.foo.records[3].int_field = 3;
+
var list = createView({
View: ListView,
model: 'foo',
data: this.data,
- arch: '<tree editable="top">' +
+ arch: '<tree editable="top" default_order="int_field">' +
'<field name="int_field" widget="handle"/>' +
'<field name="amount" widget="float" digits="[5,0]"/>' +
'</tree>',
mockRPC: function (route, args) {
if (route === '/web/dataset/resequence') {
- assert.strictEqual(args.offset, -4,
+ assert.strictEqual(args.offset, 1,
"should write the sequence starting from the lowest current one");
assert.strictEqual(args.field, 'int_field',
"should write the right field as sequence");
@@ -3217,6 +3315,12 @@ QUnit.module('Views', {
QUnit.test('editable list with handle widget with slow network', function (assert) {
assert.expect(15);
+ // resequence makes sense on a sequence field, not on arbitrary fields
+ this.data.foo.records[0].int_field = 0;
+ this.data.foo.records[1].int_field = 1;
+ this.data.foo.records[2].int_field = 2;
+ this.data.foo.records[3].int_field = 3;
+
var def = $.Deferred();
var list = createView({
@@ -3229,7 +3333,7 @@ QUnit.module('Views', {
'</tree>',
mockRPC: function (route, args) {
if (route === '/web/dataset/resequence') {
- assert.strictEqual(args.offset, -4,
+ assert.strictEqual(args.offset, 1,
"should write the sequence starting from the lowest current one");
assert.strictEqual(args.field, 'int_field',
"should write the right field as sequence");