diff --git a/web_domain_field/__manifest__.py b/web_domain_field/__manifest__.py index a120e074c..9b60d5ca9 100644 --- a/web_domain_field/__manifest__.py +++ b/web_domain_field/__manifest__.py @@ -15,6 +15,9 @@ "web.assets_backend": [ "/web_domain_field/static/lib/js/*.js", ], + "web.qunit_suite_tests": [ + "/web_domain_field/static/tests/**/*.js", + ], }, "installable": True, } diff --git a/web_domain_field/static/tests/test_qunit.js b/web_domain_field/static/tests/test_qunit.js new file mode 100644 index 000000000..27a9fdf14 --- /dev/null +++ b/web_domain_field/static/tests/test_qunit.js @@ -0,0 +1,129 @@ +odoo.define("web_domain_field.tests", function (require) { + "use strict"; + + const FormView = require("web.FormView"); + const testUtils = require("web.test_utils"); + const {createView} = testUtils; + const {QUnit} = window; + + QUnit.module( + "web_domain_field", + { + beforeEach: function () { + this.data = { + "res.partner": { + fields: { + name: { + string: "Name", + type: "char", + searchable: true, + }, + type: { + string: "Type", + type: "selection", + selection: [ + ["person", "Person"], + ["company", "Company"], + ], + searchable: true, + }, + parent_id: { + string: "Parent", + type: "many2one", + relation: "res.partner", + }, + parent_domain: { + string: "Parent Domain", + type: "char", + }, + }, + records: [ + { + id: 1, + name: "John Doe", + type: "person", + parent_id: 2, + parent_domain: "[]", + }, + { + id: 2, + name: "ACME inc.", + type: "company", + parent_id: false, + parent_domain: `[["type", "=", "company"]]`, + }, + ], + onchanges: {}, + }, + }; + }, + }, + function () { + QUnit.test( + "one2many: field as domain attribute value", + async function (assert) { + assert.expect(2); + + async function testPartnerFormDomain(data, resId, expectedDomain) { + const form = await createView({ + View: FormView, + model: "res.partner", + data: data, + arch: ` +
+ + + + `, + mockRPC: function (route, args) { + if (args.method === "name_search") { + assert.deepEqual(args.kwargs.args, expectedDomain); + } + return this._super.apply(this, arguments); + }, + res_id: resId, + viewOptions: {mode: "edit"}, + }); + form.$el.find(".o_field_widget[name=parent_id] input").click(); + form.destroy(); + } + + await testPartnerFormDomain(this.data, 1, []); + await testPartnerFormDomain(this.data, 2, [ + ["type", "=", "company"], + ]); + } + ); + + QUnit.test( + "one2many: field with default behaviour", + async function (assert) { + assert.expect(1); + const form = await createView({ + View: FormView, + model: "res.partner", + data: this.data, + arch: ` +
+ + + + `, + mockRPC: function (route, args) { + if (args.method === "name_search") { + assert.deepEqual(args.kwargs.args, [ + ["name", "=", "John"], + ]); + } + return this._super.apply(this, arguments); + }, + res_id: 1, + viewOptions: {mode: "edit"}, + }); + form.$el.find(".o_field_widget[name=parent_id] input").click(); + form.destroy(); + } + ); + } + ); +}); diff --git a/web_domain_field/tests/__init__.py b/web_domain_field/tests/__init__.py new file mode 100644 index 000000000..d20d305b6 --- /dev/null +++ b/web_domain_field/tests/__init__.py @@ -0,0 +1 @@ +from . import test_qunit diff --git a/web_domain_field/tests/test_qunit.py b/web_domain_field/tests/test_qunit.py new file mode 100644 index 000000000..7e206ddda --- /dev/null +++ b/web_domain_field/tests/test_qunit.py @@ -0,0 +1,16 @@ +# Copyright 2022 Camptocamp SA (https://www.camptocamp.com). +# @author Iván Todorovich +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests import HttpCase, tagged + + +@tagged("-at_install", "post_install") +class TestQunit(HttpCase): + def test_qunit(self): + self.browser_js( + "/web/tests?module=web_domain_field&failfast", + "", + "", + login="admin", + )