flectra.define('web.view_dialogs_tests', function (require) {
"use strict";
var testUtils = require('web.test_utils');
var dialogs = require('web.view_dialogs');
var Widget = require('web.Widget');
QUnit.module('Views', {
beforeEach: function () {
this.data = {
partner: {
fields: {
display_name: { string: "Displayed name", type: "char" },
foo: {string: "Foo", type: 'char'},
bar: {string: "Bar", type: "boolean"},
},
records: [
{id: 1, foo: 'blip', display_name: 'blipblip', bar: true},
{id: 2, foo: 'ta tata ta ta', display_name: 'macgyver', bar: false},
{id: 3, foo: 'piou piou', display_name: "Jack O'Neill", bar: true},
],
},
};
},
}, function () {
QUnit.module('view_dialogs');
function createParent(params) {
var widget = new Widget();
testUtils.addMockEnvironment(widget, params);
return widget;
}
QUnit.test('formviewdialog buttons in footer are positioned properly', function (assert) {
assert.expect(2);
var parent = createParent({
data: this.data,
archs: {
'partner,false,form':
'
',
},
});
testUtils.intercept(parent, 'env_updated', function () {
throw new Error("The environment should not be propagated to the view manager");
});
new dialogs.FormViewDialog(parent, {
res_model: 'partner',
res_id: 1,
}).open();
assert.notOk($('div.modal .modal-body button').length,
"should not have any button in body");
assert.strictEqual($('div.modal .modal-footer button').length, 1,
"should have only one button in footer");
parent.destroy();
});
QUnit.test('SelectCreateDialog use domain, group_by and search default', function (assert) {
assert.expect(3);
var search = 0;
var parent = createParent({
data: this.data,
archs: {
'partner,false,list':
'' +
'' +
'' +
'',
'partner,false,search':
'' +
'' +
'' +
'' +
'' +
'',
},
mockRPC: function (route, args) {
search++;
if (search === 1 && args.method === 'read_group') {
assert.deepEqual(args.kwargs, {
context: {group_by: "bar"},
domain: [["display_name","like","a"], ["display_name","ilike","piou"], ["foo","ilike","piou"]],
fields:["display_name","foo","bar"],
groupby:["bar"],
orderby: '',
lazy: true
}, "should search with the complete domain (domain + search), and group by 'bar'");
}
if (search === 2 && route === '/web/dataset/search_read') {
assert.deepEqual(args, {
context: {},
domain: [["display_name","like","a"], ["display_name","ilike","piou"], ["foo","ilike","piou"]],
fields:["display_name","foo"],
model: "partner",
limit: 80,
sort: ""
}, "should search with the complete domain (domain + search)");
}
if (search === 3 && route === '/web/dataset/search_read') {
assert.deepEqual(args, {
context: {},
domain: [["display_name","like","a"]],
fields:["display_name","foo"],
model: "partner",
limit: 80,
sort: ""
}, "should search with the domain");
}
return this._super.apply(this, arguments);
},
});
var dialog = new dialogs.SelectCreateDialog(parent, {
no_create: true,
readonly: true,
res_model: 'partner',
domain: [['display_name', 'like', 'a']],
context: {
search_default_groupby_bar: true,
search_default_foo: 'piou',
},
}).open();
dialog.$('.o_searchview_facet:contains(groupby_bar) .o_facet_remove').click();
dialog.$('.o_searchview_facet .o_facet_remove').click();
parent.destroy();
});
QUnit.test('SelectCreateDialog correctly evaluates domains', function (assert) {
assert.expect(1);
var parent = createParent({
data: this.data,
archs: {
'partner,false,list':
'' +
'' +
'' +
'',
'partner,false,search':
'' +
'' +
'',
},
mockRPC: function (route, args) {
if (route === '/web/dataset/search_read') {
assert.deepEqual(args.domain, [['id', '=', 2]],
"should have correctly evaluated the domain");
}
return this._super.apply(this, arguments);
},
session: {
user_context: {uid: 2},
},
});
new dialogs.SelectCreateDialog(parent, {
no_create: true,
readonly: true,
res_model: 'partner',
domain: "[['id', '=', uid]]",
}).open();
parent.destroy();
});
QUnit.test('SelectCreateDialog list view in readonly', function (assert) {
assert.expect(1);
var parent = createParent({
data: this.data,
archs: {
'partner,false,list':
'' +
'' +
'' +
'',
'partner,false,search':
''
},
});
var dialog = new dialogs.SelectCreateDialog(parent, {
res_model: 'partner',
}).open();
// click on the first row to see if the list is editable
dialog.$('.o_list_view tbody tr:first td:not(.o_list_record_selector):first').click();
assert.equal(dialog.$('.o_list_view tbody tr:first td:not(.o_list_record_selector):first input').length, 0,
"list view should not be editable in a SelectCreateDialog");
parent.destroy();
});
});
});