odoo.define('web.search_view_tests', function (require) { "use strict"; var testUtils = require('web.test_utils'); var createActionManager = testUtils.createActionManager; QUnit.module('Search View', { beforeEach: function () { this.data = { partner: { fields: { date_field: {string: "Date", type: "date", store: true, sortable: true}, Birthday: {string: "Birthday", type: "date", store: true, sortable: true}, foo: {string: "Foo", type: "char"}, bar: {string: "Bar", type: "many2one", relation: 'partner'}, float_field: {string: "Float", type: "float"}, }, records: [ {id: 1, display_name: "First record", foo: "yop", bar: 2, date_field: "2017-01-25", Birthday: "1983-07-15", float_field: 1}, {id: 2, display_name: "Second record", foo: "blip", bar: 1, date_field: "2017-01-24", Birthday: "1982-06-04",float_field: 2}, {id: 3, display_name: "Third record", foo: "gnap", bar: 1, date_field: "2017-01-13", Birthday: "1985-09-13",float_field: 1.618}, {id: 4, display_name: "Fourth record", foo: "plop", bar: 2, date_field: "2017-02-25", Birthday: "1983-05-05",float_field: -1}, {id: 5, display_name: "Fifth record", foo: "zoup", bar: 2, date_field: "2016-01-25", Birthday: "1800-01-01",float_field: 13}, ], }, pony: { fields: { name: {string: 'Name', type: 'char'}, }, records: [ {id: 4, name: 'Twilight Sparkle'}, {id: 6, name: 'Applejack'}, {id: 9, name: 'Fluttershy'} ], }, }; this.actions = [{ id: 1, name: 'Partners Action 1', res_model: 'partner', type: 'ir.actions.act_window', views: [[false, 'list']], }, { id: 2, name: 'Partners Action 2', res_model: 'partner', type: 'ir.actions.act_window', views: [[false, 'list']], search_view_id: [2, 'search'], }, { id: 3, name: 'Partners Action 3', res_model: 'partner', type: 'ir.actions.act_window', views: [[false, 'kanban']], search_view_id: [2, 'search'], }, { id: 4, name: 'Partners Action 4', res_model: 'partner', type: 'ir.actions.act_window', views: [[false, 'graph']], search_view_id: [3, 'search'], }, { id: 5, name: 'Partners Action 5', res_model: 'partner', type: 'ir.actions.act_window', views: [[2, 'list']], search_view_id: [4, 'search'], } ]; this.archs = { // list views 'partner,false,list': '', 'partner,2,list': '', // kanban views 'partner,false,kanban': '' + '
' + '
', // graph views 'partner,false,graph': '' + '' + '' + '', // search views 'partner,false,search': ''+ '' + '' + '', 'partner,2,search': ''+ '' + '' + '', 'partner,3,search': ''+ '' + '' + '', 'partner,4,search': ''+ '' + '' + '', }; }, }, function () { QUnit.module('Groupby Menu'); QUnit.test('click on groupby filter adds a facet', function (assert) { assert.expect(1); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(1); $('span.fa-bars').prev().click(); $('li.o_menu_item a').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').text().trim(), 'candle', 'should have a facet with candle name'); actionManager.destroy(); }); QUnit.test('remove a "Group By" facet properly unchecks groupbys in groupby menu', function (assert) { assert.expect(2); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(1); $('span.fa-bars').prev().click(); $('li.o_menu_item a').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').text().trim(), 'candle', 'should have a facet with candle name'); $('.o_facet_remove:first').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').length, 0, 'there should be no facet'); actionManager.destroy(); }); QUnit.test('change option of a "Group By" does not remove groupy in facet "Group By"', function (assert) { assert.expect(3); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(2); $('span.fa-bars').click(); $('.o_submenu_switcher').click(); $('.o_item_option:first').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').length, 1, 'should have a facet'); $('.o_item_option:nth-child(2)').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').length, 1, 'should have a facet'); $('.o_item_option:nth-child(2)').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').length, 0, 'should have no facet'); actionManager.destroy(); }); QUnit.test('select and unselect quickly groupby does not crash', function (assert) { assert.expect(1); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(3); $('span.fa-bars').click(); $('.o_menu_item:first').click(); $('.o_menu_item:first').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').length, 0, 'should have a facet'); actionManager.destroy(); }); QUnit.test('groupby selected within graph subview are not deleted when modifying search view content', function (assert) { assert.expect(2); this.actions[3].flags = {isEmbedded: true}; var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(4); $('.o_graph_buttons div.o_graph_groupbys_menu > button').click(); $('.o_graph_buttons div.o_graph_groupbys_menu .o_menu_item').click(); assert.ok(!$('.o_graph_buttons div.o_graph_groupbys_menu .o_menu_item').hasClass('selected'), 'groupby should be unselected'); $('.o_search_options button span.fa-filter').click(); $('.o_filters_menu .o_menu_item a').click(); assert.ok(!$('.o_graph_buttons div.o_graph_groupbys_menu .o_menu_item').hasClass('selected'), 'groupby should be still unselected'); actionManager.destroy(); }); QUnit.test('group by a date field using interval works', function (assert) { assert.expect(9); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(5); // open menu 'Group By' $('.o_search_options .fa-bars').click(); // Activate the groupby 'Date' $('.o_group_by_menu .o_menu_item').click(); // by default, data should be grouped by the field 'Date' using the interval 'day' assert.strictEqual($('div.o_facet_values span').text().trim(),'Date: Day'); assert.strictEqual($('.o_content tr.o_group_header').length, 5); // open submenu with interval options $('.o_group_by_menu .o_menu_item .o_submenu_switcher').click(); // select option 'month' $('.o_group_by_menu .o_menu_item .o_item_option:nth-child(3)').click(); // data should be grouped by the field 'Date' using the interval 'month' assert.strictEqual($('div.o_facet_values span').text().trim(),'Date: Month'); assert.strictEqual($('.o_content tr.o_group_header').length, 3); // deactivate option 'month' $('.o_group_by_menu .o_menu_item .o_item_option:nth-child(3)').click(); // no groupby is applied assert.strictEqual($('div.o_facet_values span').length, 0); // open 'Add custom Groupby' menu $('.o_group_by_menu .o_add_custom_group a').click(); // click on 'Apply' button $('.o_group_by_menu .o_generator_menu button').click(); // data should be grouped by the field 'Birthday' using the interval 'month' assert.strictEqual($('div.o_facet_values span').text().trim(),'Birthday: Month'); assert.strictEqual($('.o_content tr.o_group_header').length, 5); // open submenu with interval options $('.o_group_by_menu .o_menu_item .o_submenu_switcher').eq(1).click(); // select option 'year' $('.o_group_by_menu .o_menu_item .o_item_option').eq(9).click(); // data should be grouped by the field 'Birthday' using the interval 'year' assert.strictEqual($('div.o_facet_values span').text().trim(),'Birthday: Year'); assert.strictEqual($('.o_content tr.o_group_header').length, 4); actionManager.destroy(); }); QUnit.module('Filters Menu'); QUnit.test('add a custom filter works', function (assert) { assert.expect(1); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(1); $('span.fa-filter').click(); $('li.o_add_custom_filter').click(); $('.o_apply_filter').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').text().trim(), 'ID is \"0\"', 'should have a facet with candle name'); actionManager.destroy(); }); QUnit.test('deactivate a new custom filter works', function (assert) { assert.expect(1); var actionManager = createActionManager({ actions: this.actions, archs: this.archs, data: this.data, }); actionManager.doAction(1); $('span.fa-filter').click(); $('li.o_add_custom_filter').click(); $('.o_apply_filter').click(); $('li.o_menu_item').click(); assert.strictEqual($('.o_searchview .o_searchview_facet .o_facet_values span').length, 0, 'no facet should be in the search view'); actionManager.destroy(); }); }); });