summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/fields
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-09-07 14:43:48 +0200
committerChristophe Simonis <chs@odoo.com>2018-09-07 14:43:48 +0200
commit49c3264ce0f73a746f9a229dba423f6c0ea3d485 (patch)
tree9cd4603a7b9708d061802f9e0f638e5c684d15a9 /addons/web/static/tests/fields
parentb4c72220c72e22328b3a96024c59d79889b71ae5 (diff)
parent4850fb08385de3f0851a732c97c90402e89838b7 (diff)
[MERGE] forward port branch saas-11.3 up to 4850fb08385
Diffstat (limited to 'addons/web/static/tests/fields')
-rw-r--r--addons/web/static/tests/fields/basic_fields_tests.js64
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js64
2 files changed, 127 insertions, 1 deletions
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index c46e6acefe3..84a644c59da 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -4418,6 +4418,33 @@ QUnit.module('basic_fields', {
QUnit.module('FieldDomain');
+ QUnit.test('The domain editor should not crash the view when given a dynamic filter', function (assert) {
+ //dynamic filters (containing variables, such as uid, parent or today)
+ //are not handled by the domain editor, but it shouldn't crash the view
+ assert.expect(1);
+
+ this.data.partner.records[0].foo = '[["int_field", "=", uid]]';
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:
+ '<form>' +
+ '<field name="foo" widget="domain" options="{\'model\': \'partner\'}"/>' +
+ '<field name="int_field" invisible="1"/>' +
+ '</form>',
+ res_id: 1,
+ session: {
+ user_context: {uid: 14},
+ },
+ });
+
+ assert.strictEqual(form.$('.o_read_mode').text(), "This domain is not supported.",
+ "The widget should not crash the view, but gracefully admit its failure.");
+ form.destroy();
+ });
+
QUnit.test('basic domain field usage is ok', function (assert) {
assert.expect(6);
@@ -4567,6 +4594,43 @@ QUnit.module('basic_fields', {
form.destroy();
});
+ QUnit.test('domain field can be reset with a new domain (from onchange)', function (assert) {
+ assert.expect(2);
+
+ this.data.partner.records[0].foo = '[]';
+ this.data.partner.onchanges = {
+ display_name: function (obj) {
+ obj.foo = '[["id", "=", 1]]';
+ },
+ };
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:
+ '<form>' +
+ '<field name="display_name"/>' +
+ '<field name="foo" widget="domain" options="{\'model\': \'partner\'}"/>' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ });
+
+ assert.equal(form.$('.o_domain_show_selection_button').text().trim(), '5 record(s)',
+ "the domain being empty, there should be 5 records");
+
+ // update display_name to trigger the onchange and reset foo
+ form.$('.o_field_widget[name=display_name]').val('new value').trigger('input');
+
+ assert.equal(form.$('.o_domain_show_selection_button').text().trim(), '1 record(s)',
+ "the domain has changed, there should be only 1 record");
+
+ form.destroy();
+ });
+
QUnit.test('domain field: handle false domain as []', function (assert) {
assert.expect(3);
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 39002f6b797..5b97954966e 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -2226,7 +2226,7 @@ QUnit.module('relational_fields', {
});
});
- QUnit.test('pressing ENTER on a \'no_quick_create\' many2one should not trigger M2ODialog', function (assert) {
+ QUnit.test('pressing ENTER on a \'no_quick_create\' many2one should open a M2ODialog', function (assert) {
var done = assert.async();
assert.expect(2);
@@ -2277,6 +2277,68 @@ QUnit.module('relational_fields', {
});
});
+ QUnit.test('select a value by pressing TAB on a many2one with onchange', function (assert) {
+ var done = assert.async();
+ assert.expect(3);
+
+ this.data.partner.onchanges.trululu = function () {};
+
+ var M2O_DELAY = relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY;
+ relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = 0;
+ var def = $.Deferred();
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="trululu"/>' +
+ '<field name="display_name"/>' +
+ '</form>',
+ mockRPC: function (route, args) {
+ var result = this._super.apply(this, arguments);
+ if (args.method === 'onchange') {
+ return $.when(def).then(_.constant(result));
+ }
+ return result;
+ },
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ });
+
+ var $input = form.$('.o_field_many2one input');
+ $input.val("first").trigger('input');
+ concurrency.delay(0).then(function () {
+ var evOptions = {
+ which: $.ui.keyCode.TAB,
+ keyCode: $.ui.keyCode.TAB,
+ };
+ $input.trigger($.Event('keydown', evOptions));
+ $input.trigger($.Event('keypress', evOptions));
+ $input.trigger($.Event('keyup', evOptions));
+
+ // simulate a focusout (e.g. because the user clicks outside)
+ // before the onchange returns
+ form.$('.o_field_char').focus();
+
+ assert.strictEqual($('.modal').length, 0,
+ "there shouldn't be any modal in body");
+
+ // unlock the onchange
+ def.resolve();
+
+ assert.strictEqual($input.val(), 'first record',
+ "first record should have been selected");
+ assert.strictEqual($('.modal').length, 0,
+ "there shouldn't be any modal in body");
+ relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = M2O_DELAY;
+ form.destroy();
+ done();
+ });
+ });
+
QUnit.test('many2one in editable list + onchange, with enter [REQUIRE FOCUS]', function (assert) {
assert.expect(6);
var done = assert.async();