From 81f2bc7b0aecf2a849a4d7007f3edefdfb81cbdc Mon Sep 17 00:00:00 2001 From: Mohammed Shekha Date: Mon, 17 Aug 2020 11:13:21 +0000 Subject: [PATCH] [FIX] web: SampleServer: round float values before this commit: when field is float type it display too much decimal precision value, it should be fixed to 2 precision for sample data. after this commit: float field will display 2 decimal precision value. task-2318503 closes odoo/odoo#63643 X-original-commit: 61f8ced67992b20edfac139c749ec00939f408a3 Signed-off-by: Aaron Bohy (aab) Co-authored-by: Kamesh Patel --- addons/web/static/src/js/views/sample_server.js | 15 +++++++++++++-- .../web/static/tests/views/sample_server_tests.js | 5 ++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/views/sample_server.js b/addons/web/static/src/js/views/sample_server.js index c56ced9cead..43c5594413b 100644 --- a/addons/web/static/src/js/views/sample_server.js +++ b/addons/web/static/src/js/views/sample_server.js @@ -151,7 +151,7 @@ odoo.define('web.SampleServer', function (require) { for (const record of records) { value += record[fieldName]; } - values[fieldName] = value; + values[fieldName] = this._sanitizeNumber(value); } else { values[fieldName] = null; } @@ -314,7 +314,7 @@ odoo.define('web.SampleServer', function (require) { * @returns {number} float in [O, max[ */ _getRandomFloat(max) { - return Math.random() * max; + return this._sanitizeNumber(Math.random() * max); } /** @@ -591,6 +591,16 @@ odoo.define('web.SampleServer', function (require) { } } + /** + * Rounds the given number value according to the configured precision. + * @private + * @param {number} value + * @returns {number} + */ + _sanitizeNumber(value) { + return parseFloat(value.toFixed(SampleServer.FLOAT_PRECISION)); + } + /** * A real (web_)read_group call has been done, and it has returned groups, * but they are all empty. This function updates the sample data such @@ -653,6 +663,7 @@ odoo.define('web.SampleServer', function (require) { SampleServer.MAX_COLOR_INT = 7; SampleServer.MAX_MONETARY = 100000; SampleServer.DATE_DELTA = 24 * 60; // in hours -> 60 days + SampleServer.FLOAT_PRECISION = 2; SampleServer.SAMPLE_COUNTRIES = ["Belgium", "France", "Portugal", "Singapore", "Australia"]; SampleServer.SAMPLE_PEOPLE = [ diff --git a/addons/web/static/tests/views/sample_server_tests.js b/addons/web/static/tests/views/sample_server_tests.js index 24bb60611ea..9eedd16c7f5 100644 --- a/addons/web/static/tests/views/sample_server_tests.js +++ b/addons/web/static/tests/views/sample_server_tests.js @@ -77,7 +77,7 @@ odoo.define('web.sample_server_tests', function (require) { QUnit.module("Basic behaviour"); QUnit.test("Sample data: people type + all field names", async function (assert) { - assert.expect(24); + assert.expect(25); mock.patch(session, { company_currency_id: 4, @@ -134,6 +134,9 @@ odoo.define('web.sample_server_tests', function (require) { assertBetween('age', 0, MAX_INTEGER); assertBetween('salary', 0, MAX_MONETARY); + // check float field have 2 decimal rounding + assert.strictEqual(rec.height, parseFloat(parseFloat(rec.height).toFixed(2))); + const selectionValues = this.fields['res.users'].type.selection.map( (sel) => sel[0] );