summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorMartin Geubelle <mge@odoo.com>2017-06-21 16:43:21 +0200
committerMartin Geubelle <mge@odoo.com>2017-06-22 10:52:26 +0200
commitc62a4edcb04fb1e3d65dea056123cece72425b7e (patch)
treeea8a615d6314998690c2debed6047c57222695b5 /addons/web
parent3de0715f12d1a965d444f2d1cc816ca3d740a839 (diff)
[FIX] web: set 0 as default value for numeric fields
When creating a new record, the numeric field default value should be 0 in order to avoid manually setting mandatory fields to 0. This behaviour has been removed with the new views but one wants to restore it. The `mockRead` function has also been adapted in this commit because the server returns 0 for unset numeric fields.
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js12
-rw-r--r--addons/web/static/tests/fields/basic_fields_tests.js16
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js4
-rw-r--r--addons/web/static/tests/helpers/mock_server.js9
-rw-r--r--addons/web/static/tests/views/basic_model_tests.js4
-rw-r--r--addons/web/static/tests/views/form_tests.js26
6 files changed, 40 insertions, 31 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 1ace44be50f..716624f368b 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -2198,12 +2198,6 @@ var BasicModel = AbstractModel.extend({
if (!field || field.name === 'id') {
continue;
}
- if (field.type === 'float' ||
- field.type === 'integer' ||
- field.type === 'monetary') {
- context[fieldName] = context[fieldName] || 0;
- continue;
- }
if (field.type === 'date' || field.type === 'datetime') {
if (context[fieldName]) {
context[fieldName] = JSON.parse(JSON.stringify(context[fieldName]));
@@ -2449,7 +2443,11 @@ var BasicModel = AbstractModel.extend({
var fieldName = fieldNames[i];
if (!(fieldName in result)) {
var field = params.fields[fieldName];
- if (field.type === 'one2many' || field.type === 'many2many') {
+ if (field.type === 'float' ||
+ field.type === 'integer' ||
+ field.type === 'monetary') {
+ result[fieldName] = 0;
+ } else if (field.type === 'one2many' || field.type === 'many2many') {
result[fieldName] = [];
} else {
result[fieldName] = null;
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index a2d0c100fd8..467d567a53d 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -394,7 +394,7 @@ QUnit.module('basic_fields', {
QUnit.module('FieldFloat');
QUnit.test('float field when unset', function (assert) {
- assert.expect(1);
+ assert.expect(2);
var form = createView({
View: FormView,
@@ -408,8 +408,10 @@ QUnit.module('basic_fields', {
res_id: 4,
});
- assert.ok(form.$('.o_field_widget').hasClass('o_field_empty'),
- 'Non-set float field should be recognized as unset.');
+ assert.notOk(form.$('.o_field_widget').hasClass('o_field_empty'),
+ 'Non-set float field should be considered as 0.');
+ assert.strictEqual(form.$('.o_field_widget').text(), "0.000",
+ 'Non-set float field should be considered as 0.');
form.destroy();
});
@@ -1955,7 +1957,7 @@ QUnit.module('basic_fields', {
QUnit.module('FieldInteger');
QUnit.test('integer field when unset', function (assert) {
- assert.expect(1);
+ assert.expect(2);
var form = createView({
View: FormView,
@@ -1965,8 +1967,10 @@ QUnit.module('basic_fields', {
res_id: 4,
});
- assert.ok(form.$('.o_field_widget').hasClass('o_field_empty'),
- 'Non-set integer field should be recognized as unset.');
+ assert.notOk(form.$('.o_field_widget').hasClass('o_field_empty'),
+ 'Non-set integer field should be recognized as 0.');
+ assert.strictEqual(form.$('.o_field_widget').text(), "0",
+ 'Non-set integer field should be recognized as 0.');
form.destroy();
});
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 628026f89e4..a1631e33139 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -2927,8 +2927,8 @@ QUnit.module('relational_fields', {
assert.strictEqual(form.$('.o_data_row').length, 3,
"sould have 3 records in one2many list");
- assert.strictEqual(form.$('.o_data_row').text(), "blip1.59yop1.5tototo1.550xphone",
- "sould display the record values in one2many list");
+ assert.strictEqual(form.$('.o_data_row').text(), "blip1.59yop1.50tototo1.550xphone",
+ "should display the record values in one2many list");
$('.o_form_button_save').click();
diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js
index b3d92f379c7..085c6c4a653 100644
--- a/addons/web/static/tests/helpers/mock_server.js
+++ b/addons/web/static/tests/helpers/mock_server.js
@@ -539,7 +539,7 @@ var MockServer = Class.extend({
var fields = args[1] && args[1].length ? _.uniq(args[1].concat(['id'])) : Object.keys(this.data[model].fields);
var records = _.reduce(ids, function (records, id) {
var record = _.findWhere(self.data[model].records, {id: id});
- return record ? records.concat(record) : records
+ return record ? records.concat(record) : records;
}, []);
var results = _.map(records, function (record) {
var result = {};
@@ -549,7 +549,12 @@ var MockServer = Class.extend({
// the field doens't exist on the model, so skip it
continue;
}
- if (field.type === 'many2one') {
+ if (field.type === 'float' ||
+ field.type === 'integer' ||
+ field.type === 'monetary') {
+ // read should return 0 for unset numeric fields
+ result[fields[i]] = record[fields[i]] || 0;
+ } else if (field.type === 'many2one') {
var relatedRecord = _.findWhere(self.data[field.relation].records, {
id: record[fields[i]]
});
diff --git a/addons/web/static/tests/views/basic_model_tests.js b/addons/web/static/tests/views/basic_model_tests.js
index cbe04f5b43b..9fbc2acdd88 100644
--- a/addons/web/static/tests/views/basic_model_tests.js
+++ b/addons/web/static/tests/views/basic_model_tests.js
@@ -1364,8 +1364,8 @@ QUnit.module('Views', {
delete this.params.res_id;
model.load(this.params).then(function (resultID) {
var record = model.get(resultID);
- assert.strictEqual(record.data.bar, false,
- "should be initialized with correct value");
+ assert.strictEqual(record.data.bar, 0,
+ "should be initialized with correct value (0 as integer)");
model.notifyChanges(resultID, {foo: "anotherverylongstring"});
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 9627fd1b82e..1dc2dc337ab 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -625,10 +625,10 @@ QUnit.module('Views', {
res_id: 2,
});
- assert.strictEqual(form.$('.o_field_widget.o_field_empty').length, 2,
- "should have 2 empty fields with correct class");
- assert.strictEqual(form.$('.o_form_label_empty').length, 2,
- "should have 2 muted labels (for the empty fieds) in readonly");
+ assert.strictEqual(form.$('.o_field_widget.o_field_empty').length, 1,
+ "should have 1 empty field with correct class");
+ assert.strictEqual(form.$('.o_form_label_empty').length, 1,
+ "should have 1 muted label (for the empty fied) in readonly");
form.$buttons.find('.o_form_button_edit').click();
@@ -771,7 +771,7 @@ QUnit.module('Views', {
});
QUnit.test('required float fields works as expected', function (assert) {
- assert.expect(8);
+ assert.expect(10);
this.data.partner.fields.qux.required = true;
var form = createView({
@@ -793,24 +793,26 @@ QUnit.module('Views', {
assert.ok(form.$('input[name="qux"]').hasClass('o_required_modifier'),
"qux input is flagged as required");
- assert.strictEqual(form.$('input[name="qux"]').val(), "",
- "qux input is empty");
+ assert.strictEqual(form.$('input[name="qux"]').val(), "0.0",
+ "qux input is 0 by default (float field)");
form.$buttons.find('.o_form_button_save').click();
- assert.ok(form.$('input[name="qux"]').hasClass('o_field_invalid'),
- "qux input is displayed as invalid");
+ assert.notOk(form.$('input[name="qux"]').hasClass('o_field_invalid'),
+ "qux input is not displayed as invalid");
- form.$('input[name="qux"]').val("0").trigger('input');
+ form.$buttons.find('.o_form_button_edit').click();
+
+ form.$('input[name="qux"]').val("1").trigger('input');
form.$buttons.find('.o_form_button_save').click();
form.$buttons.find('.o_form_button_edit').click();
- assert.strictEqual(form.$('input[name="qux"]').val(), "0.0",
+ assert.strictEqual(form.$('input[name="qux"]').val(), "1.0",
"qux input is properly formatted");
- assert.verifySteps(['default_get', 'create', 'read']);
+ assert.verifySteps(['default_get', 'create', 'read', 'write', 'read']);
form.destroy();
});