Files
odoo_source/addons/account/static/tests/section_and_note_tests.js
T
Habib (ayh) 280a43bf20 [FIX] account: reorder section and notes bug
With PR odoo/odoo#109461, the drag and drop of lines in a section_and_note field causes a traceback. This is because the cells and headers do not align perfectly for section and note lines. To solve this, an override of sortStart method is added which takes into account the colspan.

Additionally, the word-wrap of section and notes is enabled, and tests are improved.

fixes #109934
task-3136580

closes odoo/odoo#110349

X-original-commit: 4894f6eac7aead113049be99fcb1cad3d75c3325
Signed-off-by: William André (wan) <wan@odoo.com>
2023-01-18 23:02:14 +01:00

123 lines
4.8 KiB
JavaScript

/** @odoo-module **/
import {
click,
dragAndDrop,
getNodesTextContent,
getFixture,
} from "@web/../tests/helpers/utils";
import { makeView, setupViewRegistries } from "@web/../tests/views/helpers";
let serverData;
let target;
QUnit.module('section_and_note', (hooks) => {
hooks.beforeEach(() => {
target = getFixture();
serverData = {
models: {
invoice: {
fields: {
invoice_line_ids: {
string: "Lines",
type: 'one2many',
relation: 'invoice_line',
relation_field: 'invoice_id'
},
},
records: [
{id: 1, invoice_line_ids: [1, 2, 3]},
],
},
invoice_line: {
fields: {
sequence: { string: "sequence", type: "integer", sortable: true },
display_type: {
string: 'Type',
type: 'selection',
selection: [['line_section', "Section"], ['line_note', "Note"]]
},
invoice_id: {
string: "Invoice",
type: 'many2one',
relation: 'invoice'
},
name: {
string: "Name",
type: 'text'
},
price: {
string: "Price",
type: 'monetary',
}
},
records: [
{id: 1, display_type: false, invoice_id: 1, name: 'product\n2 lines', price: 123.45},
{id: 2, display_type: 'line_section', invoice_id: 1, name: 'section'},
{id: 3, display_type: 'line_note', invoice_id: 1, name: 'note'},
]
},
},
};
setupViewRegistries();
});
QUnit.test('correct display of section and note fields', async (assert) => {
assert.expect(9);
await makeView({
type: 'form',
resModel: 'invoice',
serverData,
arch: `
<form>
<field name="invoice_line_ids" widget="section_and_note_one2many">
<tree editable="bottom">
<field name="sequence" widget="handle"/>
<field name="display_type" invisible="1"/>
<field name="name" widget="section_and_note_text"/>
<field name="price"/>
</tree>
</field>
</form>`,
resId: 1,
});
assert.hasClass(target.querySelector('[name="invoice_line_ids"] table'), 'o_section_and_note_list_view');
// product should be displayed correctly
assert.doesNotHaveClass(target.querySelector('tr.o_data_row:nth-child(1'), 'o_is_line_section',
"should not have a section class");
// section should be displayed correctly
const section_line = target.querySelector('tr.o_data_row:nth-child(2)');
const section_cell = section_line.querySelector('td.o_section_and_note_text_cell');
assert.hasClass(section_line, 'o_is_line_section',
"should have a section class");
assert.hasAttrValue(section_cell, 'colspan', '2')
// note should be displayed correctly
const note_line = target.querySelector('tr.o_data_row:nth-child(3)');
const note_cell = note_line.querySelector('td.o_section_and_note_text_cell');
assert.hasClass(note_line, 'o_is_line_note',
"should have a note class");
assert.hasAttrValue(note_cell, 'colspan', '2')
// editing note line should be textarea
await click(note_cell);
assert.containsOnce(note_line, 'td.o_section_and_note_text_cell div[name="name"] textarea',
"note line should be textarea");
// editing section line should be input
await click(section_cell);
assert.containsOnce(section_line, 'td.o_section_and_note_text_cell div[name="name"] input',
"section line should be input");
// Drag and drop the second line in first position
await dragAndDrop("tbody tr:nth-child(2) .o_row_handle", "tbody tr:nth-child(1)");
assert.deepEqual(
getNodesTextContent(target.querySelectorAll(".o_data_cell.o_list_text")),
["section", "product\n2 lines", "note"]
);
});
});