account/static/tests/section_and_note_tests.js

123 lines
4.8 KiB
JavaScript
Raw Permalink Normal View History

/** @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" column_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"]
);
});
});