diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/tests/control_panel/search_utils_tests.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/web/static/tests/control_panel/search_utils_tests.js')
| -rw-r--r-- | addons/web/static/tests/control_panel/search_utils_tests.js | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/addons/web/static/tests/control_panel/search_utils_tests.js b/addons/web/static/tests/control_panel/search_utils_tests.js new file mode 100644 index 00000000..ab7ef429 --- /dev/null +++ b/addons/web/static/tests/control_panel/search_utils_tests.js @@ -0,0 +1,362 @@ +odoo.define('web.search_utils_tests', function (require) { + "use strict"; + + const { constructDateDomain } = require('web.searchUtils'); + const testUtils = require('web.test_utils'); + const { _t } = require('web.core'); + + const patchDate = testUtils.mock.patchDate; + + QUnit.module('SearchUtils', function () { + + QUnit.module('Construct domain'); + + QUnit.test('construct simple domain based on date field (no comparisonOptionId)', function (assert) { + assert.expect(4); + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const referenceMoment = moment().utc(); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', []), + { + domain: "[]", + description: "", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_month', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-06-01"], ["date_field", "<=", "2020-06-30"]]`, + description: "June 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-04-01"], ["date_field", "<=", "2020-06-30"]]`, + description: "Q2 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_year']), + { + domain: `["&", ["date_field", ">=", "2020-01-01"], ["date_field", "<=", "2020-12-31"]]`, + description: "2020", + } + ); + unpatchDate(); + }); + + QUnit.test('construct simple domain based on datetime field (no comparisonOptionId)', function (assert) { + assert.expect(3); + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const referenceMoment = moment().utc(); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['this_month', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-06-01 00:00:00"], ["date_field", "<=", "2020-06-30 23:59:59"]]`, + description: "June 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['second_quarter', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-04-01 00:00:00"], ["date_field", "<=", "2020-06-30 23:59:59"]]`, + description: "Q2 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['this_year']), + { + domain: `["&", ["date_field", ">=", "2020-01-01 00:00:00"], ["date_field", "<=", "2020-12-31 23:59:59"]]`, + description: "2020", + } + ); + unpatchDate(); + }); + + QUnit.test('construct domain based on date field (no comparisonOptionId)', function (assert) { + assert.expect(3); + const unpatchDate = patchDate(2020, 0, 1, 12, 0, 0); + const referenceMoment = moment().utc(); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_month', 'first_quarter', 'this_year']), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2020-01-01"], ["date_field", "<=", "2020-01-31"], ` + + `"&", ["date_field", ">=", "2020-01-01"], ["date_field", "<=", "2020-03-31"]` + + "]", + description: "January 2020/Q1 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'this_year', 'last_year']), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2019-04-01"], ["date_field", "<=", "2019-06-30"], ` + + `"&", ["date_field", ">=", "2020-04-01"], ["date_field", "<=", "2020-06-30"]` + + "]", + description: "Q2 2019/Q2 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_year', 'this_month', 'antepenultimate_month']), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2020-01-01"], ["date_field", "<=", "2020-01-31"], ` + + `"&", ["date_field", ">=", "2020-11-01"], ["date_field", "<=", "2020-11-30"]` + + "]", + description: "January 2020/November 2020", + } + ); + unpatchDate(); + }); + + QUnit.test('construct domain based on datetime field (no comparisonOptionId)', function (assert) { + assert.expect(3); + const unpatchDate = patchDate(2020, 0, 1, 12, 0, 0); + const referenceMoment = moment().utc(); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['this_month', 'first_quarter', 'this_year']), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2020-01-01 00:00:00"], ["date_field", "<=", "2020-01-31 23:59:59"], ` + + `"&", ["date_field", ">=", "2020-01-01 00:00:00"], ["date_field", "<=", "2020-03-31 23:59:59"]` + + "]", + description: "January 2020/Q1 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['second_quarter', 'this_year', 'last_year']), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2019-04-01 00:00:00"], ["date_field", "<=", "2019-06-30 23:59:59"], ` + + `"&", ["date_field", ">=", "2020-04-01 00:00:00"], ["date_field", "<=", "2020-06-30 23:59:59"]` + + "]", + description: "Q2 2019/Q2 2020", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['this_year', 'this_month', 'antepenultimate_month']), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2020-01-01 00:00:00"], ["date_field", "<=", "2020-01-31 23:59:59"], ` + + `"&", ["date_field", ">=", "2020-11-01 00:00:00"], ["date_field", "<=", "2020-11-30 23:59:59"]` + + "]", + description: "January 2020/November 2020", + } + ); + unpatchDate(); + }); + + QUnit.test('construct comparison domain based on date field and option "previous_period"', function (assert) { + assert.expect(5); + const unpatchDate = patchDate(2020, 0, 1, 12, 0, 0); + const referenceMoment = moment().utc(); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_month', 'first_quarter', 'this_year'], 'previous_period'), + { + domain: "[" + + `"|", "|", ` + + `"&", ["date_field", ">=", "2019-10-01"], ["date_field", "<=", "2019-10-31"], ` + + `"&", ["date_field", ">=", "2019-11-01"], ["date_field", "<=", "2019-11-30"], ` + + `"&", ["date_field", ">=", "2019-12-01"], ["date_field", "<=", "2019-12-31"]` + + "]", + description: "October 2019/November 2019/December 2019", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'this_year', 'last_year'], 'previous_period'), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2018-01-01"], ["date_field", "<=", "2018-03-31"], ` + + `"&", ["date_field", ">=", "2019-01-01"], ["date_field", "<=", "2019-03-31"]` + + "]", + description: "Q1 2018/Q1 2019", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_year', 'antepenultimate_year', 'this_month', 'antepenultimate_month'], 'previous_period'), + { + domain: "[" + + `"|", "|", "|", ` + + `"&", ["date_field", ">=", "2015-02-01"], ["date_field", "<=", "2015-02-28"], ` + + `"&", ["date_field", ">=", "2015-12-01"], ["date_field", "<=", "2015-12-31"], ` + + `"&", ["date_field", ">=", "2017-02-01"], ["date_field", "<=", "2017-02-28"], ` + + `"&", ["date_field", ">=", "2017-12-01"], ["date_field", "<=", "2017-12-31"]` + + "]", + description: "February 2015/December 2015/February 2017/December 2017", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_year', 'last_year'], 'previous_period'), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2017-01-01"], ["date_field", "<=", "2017-12-31"], ` + + `"&", ["date_field", ">=", "2018-01-01"], ["date_field", "<=", "2018-12-31"]` + + "]", + description: "2017/2018", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'third_quarter', 'last_year'], 'previous_period'), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2018-10-01"], ["date_field", "<=", "2018-12-31"], ` + + `"&", ["date_field", ">=", "2019-01-01"], ["date_field", "<=", "2019-03-31"]` + + "]", + description: "Q4 2018/Q1 2019", + } + ); + unpatchDate(); + }); + + QUnit.test('construct comparison domain based on datetime field and option "previous_year"', function (assert) { + assert.expect(3); + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const referenceMoment = moment().utc(); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['this_month', 'first_quarter', 'this_year'], 'previous_year'), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2019-06-01 00:00:00"], ["date_field", "<=", "2019-06-30 23:59:59"], ` + + `"&", ["date_field", ">=", "2019-01-01 00:00:00"], ["date_field", "<=", "2019-03-31 23:59:59"]` + + "]", + description: "June 2019/Q1 2019", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['second_quarter', 'this_year', 'last_year'], 'previous_year'), + { + domain: "[" + + `"|", ` + + `"&", ["date_field", ">=", "2018-04-01 00:00:00"], ["date_field", "<=", "2018-06-30 23:59:59"], ` + + `"&", ["date_field", ">=", "2019-04-01 00:00:00"], ["date_field", "<=", "2019-06-30 23:59:59"]` + + "]", + description: "Q2 2018/Q2 2019", + } + ); + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'datetime', ['this_year', 'antepenultimate_year', 'this_month', 'antepenultimate_month'], 'previous_year'), + { + domain: "[" + + `"|", "|", "|", ` + + `"&", ["date_field", ">=", "2017-04-01 00:00:00"], ["date_field", "<=", "2017-04-30 23:59:59"], ` + + `"&", ["date_field", ">=", "2017-06-01 00:00:00"], ["date_field", "<=", "2017-06-30 23:59:59"], ` + + `"&", ["date_field", ">=", "2019-04-01 00:00:00"], ["date_field", "<=", "2019-04-30 23:59:59"], ` + + `"&", ["date_field", ">=", "2019-06-01 00:00:00"], ["date_field", "<=", "2019-06-30 23:59:59"]` + + "]", + description: "April 2017/June 2017/April 2019/June 2019", + } + ); + unpatchDate(); + }); + + QUnit.module('Options translation'); + + QUnit.test("Quarter option: custom translation", async function (assert) { + assert.expect(1); + + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const referenceMoment = moment().locale('en'); + testUtils.mock.patch(_t.database.db, { + "Q2": "Deuxième trimestre de l'an de grâce", + }); + + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-04-01"], ["date_field", "<=", "2020-06-30"]]`, + description: "Deuxième trimestre de l'an de grâce 2020", + }, + "Quarter term should be translated" + ); + + unpatchDate(); + testUtils.mock.unpatch(_t.database.db); + }); + + QUnit.test("Quarter option: right to left", async function (assert) { + assert.expect(1); + + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const referenceMoment = moment().locale('en'); + testUtils.mock.patch(_t.database.parameters, { + direction: "rtl", + }); + + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-04-01"], ["date_field", "<=", "2020-06-30"]]`, + description: "2020 Q2", + }, + "Notation should be right to left" + ); + + unpatchDate(); + testUtils.mock.unpatch(_t.database.parameters); + }); + + QUnit.test("Quarter option: custom translation and right to left", async function (assert) { + assert.expect(1); + + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const referenceMoment = moment().locale('en'); + testUtils.mock.patch(_t.database.db, { + "Q2": "2e Trimestre", + }); + testUtils.mock.patch(_t.database.parameters, { + direction: "rtl", + }); + + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['second_quarter', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-04-01"], ["date_field", "<=", "2020-06-30"]]`, + description: "2020 2e Trimestre", + }, + "Quarter term should be translated and notation should be right to left" + ); + + unpatchDate(); + testUtils.mock.unpatch(_t.database.db); + testUtils.mock.unpatch(_t.database.parameters); + }); + + QUnit.test("Moment.js localization does not affect formatted domain dates", async function (assert) { + assert.expect(1); + + const unpatchDate = patchDate(2020, 5, 1, 13, 0, 0); + const initialLocale = moment.locale(); + moment.defineLocale('addoneForTest', { + postformat: function (string) { + return string.replace(/\d/g, match => (1 + parseInt(match)) % 10); + } + }); + const referenceMoment = moment().locale('addoneForTest'); + + assert.deepEqual( + constructDateDomain(referenceMoment, 'date_field', 'date', ['this_month', 'this_year']), + { + domain: `["&", ["date_field", ">=", "2020-06-01"], ["date_field", "<=", "2020-06-30"]]`, + description: "June 3131", + }, + "Numbers in domain should not use addoneForTest locale" + ); + + moment.locale(initialLocale); + moment.updateLocale("addoneForTest", null); + unpatchDate(); + }); + }); +}); |
