summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/views/form_tests.js
diff options
context:
space:
mode:
authorDavid Monjoie <dmo@odoo.com>2019-06-05 14:27:32 +0000
committerVincent Schippefilt <vsc@odoo.com>2019-07-30 06:37:23 +0000
commit307db300670e2c9c3cb8cfa11b2e5e63edd8aa69 (patch)
treecb459aeab47df2effc6f806215950b3b37709368 /addons/web/static/tests/views/form_tests.js
parent321a3699ed634287010c4ab0701bf6f28704c250 (diff)
[FIX] web: add view id in optional fields local storage key
Since the renderer does not know the view id, we moved the local storage key computation up to the basic controller, which makes more sense since the renderer is supposed to be inert. The _processColumns function had to be moved in willStart however, since it now needs the controller to respond to the trigger_up and the controller is not present during the init of the renderer. closes odoo/odoo#34051 Signed-off-by: VincentSchippefilt <VincentSchippefilt@users.noreply.github.com>
Diffstat (limited to 'addons/web/static/tests/views/form_tests.js')
-rw-r--r--addons/web/static/tests/views/form_tests.js157
1 files changed, 157 insertions, 0 deletions
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 1fa82e3f238..39737e720a1 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -1,6 +1,7 @@
odoo.define('web.form_tests', function (require) {
"use strict";
+var AbstractStorageService = require('web.AbstractStorageService');
var BasicModel = require('web.BasicModel');
var concurrency = require('web.concurrency');
var core = require('web.core');
@@ -9,6 +10,7 @@ var FormView = require('web.FormView');
var mixins = require('web.mixins');
var NotificationService = require('web.NotificationService');
var pyUtils = require('web.py_utils');
+var RamStorage = require('web.RamStorage');
var testUtils = require('web.test_utils');
var widgetRegistry = require('web.widget_registry');
var Widget = require('web.Widget');
@@ -7924,6 +7926,161 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('form view with inline tree view with optional fields and local storage mock', async function (assert) {
+ assert.expect(12);
+
+ var Storage = RamStorage.extend({
+ getItem: function (key) {
+ assert.step('getItem ' + key);
+ return this._super.apply(this, arguments);
+ },
+ setItem: function (key, value) {
+ assert.step('setItem ' + key + ' to ' + value);
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ var RamStorageService = AbstractStorageService.extend({
+ storage: new Storage(),
+ });
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="qux"/>' +
+ '<field name="p">' +
+ '<tree>' +
+ '<field name="foo"/>' +
+ '<field name="bar" optional="hide"/>' +
+ '</tree>' +
+ '</field>' +
+ '</form>',
+ services: {
+ local_storage: RamStorageService,
+ },
+ view_id: 27,
+ });
+
+ var localStorageKey = 'optional_fields,partner,form,27,p,list,undefined,bar,foo';
+
+ assert.verifySteps(['getItem ' + localStorageKey]);
+
+ assert.containsN(form, 'th', 2,
+ "should have 2 th, 1 for selector, 1 for foo column");
+
+ assert.ok(form.$('th:contains(Foo)').is(':visible'),
+ "should have a visible foo field");
+
+ assert.notOk(form.$('th:contains(Bar)').is(':visible'),
+ "should not have a visible bar field");
+
+ // optional fields
+ await testUtils.dom.click(form.$('table .o_optional_columns_dropdown_toggle'));
+ assert.containsN(form, 'div.o_optional_columns div.dropdown-item', 1,
+ "dropdown have 1 optional field");
+
+ // enable optional field
+ await testUtils.dom.click(form.$('div.o_optional_columns div.dropdown-item input'));
+
+ assert.verifySteps([
+ 'setItem ' + localStorageKey + ' to ["bar"]',
+ 'getItem ' + localStorageKey,
+ ]);
+
+ assert.containsN(form, 'th', 3,
+ "should have 3 th, 1 for selector, 2 for columns");
+
+ assert.ok(form.$('th:contains(Foo)').is(':visible'),
+ "should have a visible foo field");
+
+ assert.ok(form.$('th:contains(Bar)').is(':visible'),
+ "should have a visible bar field");
+
+ form.destroy();
+ });
+
+ QUnit.test('form view with tree_view_ref with optional fields and local storage mock', async function (assert) {
+ assert.expect(12);
+
+ var Storage = RamStorage.extend({
+ getItem: function (key) {
+ assert.step('getItem ' + key);
+ return this._super.apply(this, arguments);
+ },
+ setItem: function (key, value) {
+ assert.step('setItem ' + key + ' to ' + value);
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ var RamStorageService = AbstractStorageService.extend({
+ storage: new Storage(),
+ });
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="qux"/>' +
+ '<field name="p" context="{\'tree_view_ref\': \'34\'}"/>' +
+ '</form>',
+ archs: {
+ "partner,nope_not_this_one,list": '<tree>' +
+ '<field name="foo"/>' +
+ '<field name="bar"/>' +
+ '</tree>',
+ "partner,34,list": '<tree>' +
+ '<field name="foo" optional="hide"/>' +
+ '<field name="bar"/>' +
+ '</tree>',
+ },
+ services: {
+ local_storage: RamStorageService,
+ },
+ view_id: 27,
+ });
+
+ var localStorageKey = 'optional_fields,partner,form,27,p,list,34,bar,foo';
+
+ assert.verifySteps(['getItem ' + localStorageKey]);
+
+ assert.containsN(form, 'th', 2,
+ "should have 2 th, 1 for selector, 1 for foo column");
+
+ assert.notOk(form.$('th:contains(Foo)').is(':visible'),
+ "should have a visible foo field");
+
+ assert.ok(form.$('th:contains(Bar)').is(':visible'),
+ "should not have a visible bar field");
+
+ // optional fields
+ await testUtils.dom.click(form.$('table .o_optional_columns_dropdown_toggle'));
+ assert.containsN(form, 'div.o_optional_columns div.dropdown-item', 1,
+ "dropdown have 1 optional field");
+
+ // enable optional field
+ await testUtils.dom.click(form.$('div.o_optional_columns div.dropdown-item input'));
+
+ assert.verifySteps([
+ 'setItem ' + localStorageKey + ' to ["foo"]',
+ 'getItem ' + localStorageKey,
+ ]);
+
+ assert.containsN(form, 'th', 3,
+ "should have 3 th, 1 for selector, 2 for columns");
+
+ assert.ok(form.$('th:contains(Foo)').is(':visible'),
+ "should have a visible foo field");
+
+ assert.ok(form.$('th:contains(Bar)').is(':visible'),
+ "should have a visible bar field");
+
+ form.destroy();
+ });
+
QUnit.module('FormViewTABMainButtons');
QUnit.test('using tab in an empty required string field should not move to the next field', async function(assert) {