diff options
| author | Mohammed Shekha <msh@odoo.com> | 2020-01-16 13:48:20 +0000 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2020-01-27 09:01:19 +0000 |
| commit | 23878ee11ab121bb2d753e64c1d631ba2b85f6e0 (patch) | |
| tree | 9d60321392c1989a0c16204657951887918bf892 /addons/web/static/tests/fields/relational_fields_tests.js | |
| parent | ea9bbdbe30f3394d63301179f51c5ef9e962e91b (diff) | |
[IMP] web: always display statusbar widget
By default, in readonly, unset field widgets (and their labels) are
not displayed. However, we would like the statusbar widget to be
always displayed (even when it is not set).
This commit introduces a new method 'isEmpty' on AbstractField, and
uses it (instead of isSet) to determine whether or not a field should
be hidden. By default, it uses isSet, so that it doesn't change
anything for the other fields, and we override it in statusbar to
always return false.
There was a need to make the distinction with isSet, as this one is
used to determine if a record can be saved (if the field is required,
and isSet returns false, it can't be).
task-2172272
closes odoo/odoo#43419
Related: odoo/enterprise#7929
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Co-authored-by: Aaron Bohy <aab@odoo.com>
Diffstat (limited to 'addons/web/static/tests/fields/relational_fields_tests.js')
| -rw-r--r-- | addons/web/static/tests/fields/relational_fields_tests.js | 55 |
1 files changed, 50 insertions, 5 deletions
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index 41f7a86afc4..11d67bd3752 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -815,23 +815,68 @@ QUnit.module('relational_fields', { assert.expect(2); this.data.product.records = []; - var form = await createView({ + const form = await createView({ View: FormView, model: 'partner', data: this.data, - arch:'<form string="Partners">' + - '<header><field name="product_id" widget="statusbar"/></header>' + - '</form>', + arch: `<form string="Partners"> + <header><field name="product_id" widget="statusbar"/></header> + </form>`, res_id: 1, config: {device: {isMobile: false}}, }); - assert.hasClass(form.$('.o_statusbar_status'), 'o_field_empty'); + assert.doesNotHaveClass(form.$('.o_statusbar_status'), 'o_field_empty'); assert.strictEqual(form.$('.o_statusbar_status').children().length, 0, 'statusbar widget should be empty'); form.destroy(); }); + QUnit.test('statusbar with required modifier', async function (assert) { + assert.expect(2); + + const form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: `<form string="Partners"> + <header><field name="product_id" widget="statusbar" required="1"/></header> + </form>`, + config: {device: {isMobile: false}}, + }); + testUtils.intercept(form, 'call_service', function (ev) { + assert.strictEqual(ev.data.service, 'notification', + "should display an 'invalid fields' notification"); + }, true); + + testUtils.form.clickSave(form); + + assert.containsOnce(form, '.o_form_editable', 'view should still be in edit'); + + form.destroy(); + }); + + QUnit.test('statusbar with no value in readonly', async function (assert) { + assert.expect(2); + + const form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: ` + <form> + <header><field name="product_id" widget="statusbar"/></header> + </form>`, + res_id: 1, + config: {device: {isMobile: false}}, + }); + + assert.doesNotHaveClass(form.$('.o_statusbar_status'), 'o_field_empty'); + assert.containsN(form, '.o_statusbar_status button:visible', 2); + + form.destroy(); + }); + QUnit.test('statusbar with domain but no value (create mode)', async function (assert) { assert.expect(1); |
