summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/fields/field_utils.js20
-rw-r--r--addons/web/static/test/fields/basic_fields_tests.js16
-rw-r--r--addons/web/static/test/views/basic_model_tests.js58
3 files changed, 87 insertions, 7 deletions
diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js
index 61e31aeb66f..daebfdb37f4 100644
--- a/addons/web/static/src/js/fields/field_utils.js
+++ b/addons/web/static/src/js/fields/field_utils.js
@@ -36,20 +36,26 @@ function format_char(value) {
}
/**
- * @params {Moment}
+ * @params {Moment|false}
* @returns {string}
*/
function format_date(value) {
+ if (!value) {
+ return "";
+ }
var l10n = core._t.database.parameters;
var date_format = time.strftime_to_moment_format(l10n.date_format);
return value.format(date_format);
}
/**
- * @params {Moment}
+ * @params {Moment|false}
* @returns {string}
*/
function format_datetime(value) {
+ if (!value) {
+ return "";
+ }
var l10n = core._t.database.parameters;
var date_format = time.strftime_to_moment_format(l10n.date_format);
var time_format = time.strftime_to_moment_format(l10n.time_format);
@@ -160,9 +166,12 @@ function format_selection(value, field) {
* The method toJSON return the formated value to send value server side
*
* @params {string}
- * @returns {Moment} Moment date object
+ * @returns {Moment|false} Moment date object
*/
function parse_date(value) {
+ if (!value) {
+ return false;
+ }
var date_pattern = time.strftime_to_moment_format(core._t.database.parameters.date_format);
var date_pattern_wo_zero = date_pattern.replace('MM','M').replace('DD','D');
var date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601], true);
@@ -188,9 +197,12 @@ function parse_date(value) {
* The method toJSON return the formated value to send value server side
*
* @params {string}
- * @returns {Moment} Moment date object
+ * @returns {Moment|false} Moment date object
*/
function parse_datetime(value) {
+ if (!value) {
+ return false;
+ }
var date_pattern = time.strftime_to_moment_format(core._t.database.parameters.date_format),
time_pattern = time.strftime_to_moment_format(core._t.database.parameters.time_format);
var date_pattern_wo_zero = date_pattern.replace('MM','M').replace('DD','D'),
diff --git a/addons/web/static/test/fields/basic_fields_tests.js b/addons/web/static/test/fields/basic_fields_tests.js
index cdba48ceff3..62d8e0f8a86 100644
--- a/addons/web/static/test/fields/basic_fields_tests.js
+++ b/addons/web/static/test/fields/basic_fields_tests.js
@@ -479,6 +479,22 @@ QUnit.module('basic_fields', {
QUnit.module('FieldDate');
+ QUnit.test('date field is empty if no date is set', function (assert) {
+ assert.expect(2);
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:'<form string="Partners"><field name="date"/></form>',
+ res_id: 4,
+ });
+ var $span = form.$('span.o_form_field');
+ assert.strictEqual($span.length, 1, "should have one span in the form view");
+ assert.strictEqual($span.text(), "", "and it should be empty");
+
+ });
+
QUnit.test('date field in edit mode', function (assert) {
assert.expect(7);
diff --git a/addons/web/static/test/views/basic_model_tests.js b/addons/web/static/test/views/basic_model_tests.js
index 2624fb77c8c..83bdfa752c2 100644
--- a/addons/web/static/test/views/basic_model_tests.js
+++ b/addons/web/static/test/views/basic_model_tests.js
@@ -23,7 +23,7 @@ QUnit.module('Views', {
},
records: [
{id: 1, foo: 'blip', bar: 1, product_id: 37, category: [12], display_name: "first partner", date: "2017-01-25"},
- {id: 2, foo: 'gnap', bar: 2, product_id: 41, display_name: "second partner", date: "2017-01-26"},
+ {id: 2, foo: 'gnap', bar: 2, product_id: 41, display_name: "second partner"},
],
onchanges: {},
},
@@ -718,9 +718,38 @@ QUnit.module('Views', {
});
- QUnit.test('dates are properly loaded and parsed', function (assert) {
- assert.expect(1);
+ QUnit.test('dates are properly loaded and parsed (record)', function (assert) {
+ assert.expect(2);
+
+ var model = createModel({
+ Model: BasicModel,
+ data: this.data,
+ });
+
+ var params = {
+ fieldNames: ['date'],
+ fields: this.data.partner.fields,
+ modelName: 'partner',
+ res_id: 1,
+ };
+ model.load(params).then(function (resultID) {
+ var record = model.get(resultID);
+ assert.ok(record.data.date instanceof moment,
+ "fetched date field should have been formatted");
+ });
+
+ params.res_id = 2;
+
+ model.load(params).then(function (resultID) {
+ var record = model.get(resultID);
+ assert.strictEqual(record.data.date, false,
+ "unset date field should be false");
+ });
+ });
+
+ QUnit.test('dates are properly loaded and parsed (list)', function (assert) {
+ assert.expect(2);
var model = createModel({
Model: BasicModel,
@@ -737,8 +766,31 @@ QUnit.module('Views', {
model.load(params).then(function (resultID) {
var record = model.get(resultID);
var firstRecord = record.data[0];
+ var secondRecord = record.data[1];
assert.ok(firstRecord.data.date instanceof moment,
"fetched date field should have been formatted");
+ assert.strictEqual(secondRecord.data.date, false,
+ "if date is not set, it should be false");
+ });
+ });
+
+ QUnit.test('dates are properly loaded and parsed (default_get)', function (assert) {
+ assert.expect(1);
+
+ var model = createModel({
+ Model: BasicModel,
+ data: this.data,
+ });
+
+ var params = {
+ fieldNames: ['date'],
+ fields: this.data.partner.fields,
+ modelName: 'partner',
+ };
+
+ model.makeDefaultRecord('partner', params).then(function (resultID) {
+ var record = model.get(resultID);
+ assert.strictEqual(record.data.date, false, "date default value should be false");
});
});