odoo.define('hr_skills.field_one_to_many_group_tests', function (require) { "use strict"; var FormView = require('web.FormView'); var testUtils = require('web.test_utils'); var createView = testUtils.createView; QUnit.module('skills_widgets', { beforeEach: function () { this.data = { partner: { fields: { display_name: { string: "Displayed name", type: "char" }, line_ids: { string: "one2many field", type: "one2many", relation: 'line', relation_field: 'trululu' }, skill_ids: { string: "one2many field", type: "one2many", relation: 'partner_skill', relation_field: 'partner_id' }, }, records: [{ id: 1, display_name: "first record", line_ids: [37, 38, 39], skill_ids: [75, 76, 77] }], onchanges: {}, }, partner_skill: { fields: { skill_id: { string: "Name", type: "many2one", relation: 'skill'}, skill_type_id: { string: "Type", type: "many2one", relation: 'skill_type' }, skill_level_id: { string: "Level", type: "many2one", relation: 'skill_level' }, level_progress: { string: "Progress", type: "int" }, }, records: [{ id: 75, skill_id: 444, skill_type_id: 221, skill_level_id: 112, level_progress: 50, }, { id: 76, skill_id: 445, skill_type_id: 222, skill_level_id: 111, level_progress: 50, }, { id: 77, skill_id: 446, skill_type_id: 222, skill_level_id: 111, level_progress: 70, }], }, skill: { fields: { name: { string: "Name", type: "char" }, }, records: [ { id: 444, name: 'Python' }, { id: 445, name: 'Piano' }, { id: 446, name: 'Flute' }, ] }, skill_level: { fields: { name: { string: "Name", type: "char" }, }, records: [ { id: 111, name: 'L1' }, { id: 112, name: 'Intermediate' } ] }, skill_type: { fields: { name: { string: "Name", type: "char" }, }, records: [ { id: 221, name: 'Dev' }, { id: 222, name: 'Music' }, ] }, line: { fields: { name: { string: "Name", type: "char" }, line_type_id: { string: "Type", relation: 'line_type', type: "many2one" }, description: { string: "Description", type: "text" }, date_start: { string: "Date start", type: "date" }, date_end: { string: "Date end", type: "date" }, trululu: { string: "Trululu", type: "many2one", relation: 'partner' }, display_type: { string: "display type", type: "selection"}, }, records: [{ id: 37, name: "ULB", line_type_id: 50, date_start: "2017-01-25", date_end: "2019-01-25", description: 'Hello', trululu: 1, display_type: 'classic', }, { id: 38, name: "UCL", line_type_id: 50, date_start: "2013-01-25", date_end: "2014-01-25", description: 'World', trululu: 1, display_type: 'classic', }, { id: 39, name: "KUL", line_type_id: 51, date_start: "2008-01-25", description: 'Hi', trululu: 1, display_type: 'classic', }], onchanges: {}, }, line_type: { fields: { name: { string: "Name", type: "char" }, }, records: [{ id: 50, name: 'AAA', }, { id: 51, name: 'BBB' }], } }; } }, function () { QUnit.test('resumé one2many field group by field render', async function (assert) { assert.expect(16); var form = await createView({ View: FormView, model: 'partner', data: this.data, arch: '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
', res_id: 1, }); var $headers = form.$('.o_resume_group_header'); assert.strictEqual($headers.length, 2, 'There should be 2 headers'); assert.strictEqual($headers.find('td:contains(AAA)').length, 1, "it should have line type AAA"); assert.strictEqual($headers.find('td:contains(BBB)').length, 1, "it should have line type BBB"); var dataRows = form.$('.o_data_row'); assert.strictEqual(dataRows.length, 3, 'There should be 3 data rows'); var $row = $(dataRows[0]); assert.strictEqual($row.find('td:contains(01/25/2017)').length, 1, "it should have start date 01/25/2017"); assert.strictEqual($row.find('td:contains(01/25/2019)').length, 1, "it should have end date 01/25/2019"); assert.strictEqual($row.find('td:contains(ULB)').length, 1, "it should have line name ULB"); assert.strictEqual($row.find('td:contains(Hello)').length, 1, "it should have line description Hello"); $row = $(dataRows[1]); assert.strictEqual($row.find('td:contains(01/25/2013)').length, 1, "it should have start date 01/25/2013"); assert.strictEqual($row.find('td:contains(01/25/2014)').length, 1, "it should have end date 01/25/2014"); assert.strictEqual($row.find('td:contains(UCL)').length, 1, "it should have line name UCL"); assert.strictEqual($row.find('td:contains(World)').length, 1, "it should have line description World"); $row = $(dataRows[2]); assert.strictEqual($row.find('td:contains(01/25/2008)').length, 1, "it should have start date 01/25/2008"); assert.strictEqual($row.find('td:contains(Current)').length, 1, "it should have end date Current"); assert.strictEqual($row.find('td:contains(KUL)').length, 1, "it should have line name KUL"); assert.strictEqual($row.find('td:contains(Hi)').length, 1, "it should have line description Hi"); form.destroy(); }); QUnit.test('resumé one2many field group by field create', async function (assert) { assert.expect(5); var form = await createView({ View: FormView, model: 'partner', data: this.data, arch: '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
', archs: { 'line,false,form': '
' + '' + '' + '' + '' + '' + '', }, res_id: 1, mockRPC: function (route, args) { var result = this._super.apply(this, arguments); if (args.method === 'write') { var new_line_data = args.args[1].line_ids[3][2]; assert.strictEqual(new_line_data.date_end, '2030-01-01'); assert.strictEqual(new_line_data.date_start, '2025-01-01'); assert.strictEqual(new_line_data.line_type_id, 50, "it should have the line type from context"); assert.strictEqual(new_line_data.name, 'new line'); assert.strictEqual(new_line_data.description, 'new description'); } return result; }, }); await testUtils.form.clickEdit(form); await testUtils.dom.click(form.$('.o_field_x2many_list_row_add a')[0]); // Fill line form (type should be set from the add button context) await testUtils.fields.editInput($('input[name="name"]'), 'new line'); await testUtils.fields.editInput($('textarea[name="description"]'), 'new description'); await testUtils.fields.editSelect($('input[name="date_start"]'), '2025-01-01'); await testUtils.fields.editSelect($('input[name="date_end"]'), '2030-01-01'); await testUtils.modal.clickButton('Save & Close'); await testUtils.form.clickSave(form); form.destroy(); }); QUnit.test('resumé one2many field group by field delete', async function (assert) { assert.expect(2); var form = await createView({ View: FormView, model: 'partner', data: this.data, arch: '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
', archs: { 'line,false,form': '
' + '' + '' + '' + '' + '' + '', }, res_id: 1, mockRPC: function (route, args) { var result = this._super.apply(this, arguments); if (args.method === 'write') { var orm_cmd = args.args[1].line_ids[2][0]; var id = args.args[1].line_ids[2][1]; assert.strictEqual(orm_cmd, 2, "it should delete resume line"); assert.strictEqual(id, 37, "it should delete resume line #37"); } return result; }, }); await testUtils.form.clickEdit(form); await testUtils.dom.click(form.$('.o_list_record_remove')[0]); await testUtils.form.clickSave(form); form.destroy(); }); QUnit.test('skills one2many field group by field render', async function (assert) { assert.expect(13); var form = await createView({ View: FormView, model: 'partner', data: this.data, arch: '
' + '' + '' + '' + '' + '' + '' + '' + '' + '
', res_id: 1, }); var $headers = form.$('.o_group_header'); assert.strictEqual($headers.length, 2, 'There should be 2 headers'); assert.strictEqual($headers.find('td:contains(Dev)').length, 1, "it should have skill type Dev"); assert.strictEqual($headers.find('td:contains(Music)').length, 1, "it should have skill type Music"); var dataRows = form.$('.o_data_row'); assert.strictEqual(dataRows.length, 3, 'There should be 3 data rows'); var $row = $(dataRows[0]); assert.strictEqual($row.find('td:contains(Python)').length, 1, "it should have skill name Python"); assert.strictEqual($row.find('td:contains(Intermediate)').length, 1, "it should have skill name Intermediate"); assert.strictEqual($row.find('td:contains(50)').length, 1, "it should have skill progress 50"); $row = $(dataRows[1]); assert.strictEqual($row.find('td:contains(Piano)').length, 1, "it should have skill name Piano"); assert.strictEqual($row.find('td:contains(L1)').length, 1, "it should have skill level L1"); assert.strictEqual($row.find('td:contains(50)').length, 1, "it should have skill progress 50"); $row = $(dataRows[2]); assert.strictEqual($row.find('td:contains(Flute)').length, 1, "it should have skill name Flute"); assert.strictEqual($row.find('td:contains(L1)').length, 1, "it should have skill level L1"); assert.strictEqual($row.find('td:contains(70)').length, 1, "it should have skill progress 70"); form.destroy(); }); }); });