Files
odoo_source/addons/mrp/static/tests/mrp_document_kanban_tests.js
T
Aaron Bohy 4f984568e1 [REF] *: adapt code to new kanban view
This commit makes various adapations in addons with respect to
the introduction of the owl kanban view. Mainly, some selectors
in scss and in tests needed to be adapted. Moreover, in some tests
that we haven't adapted yet, we must ensure that legacy form and
list views are still used (useLegacyViews).

It also contains some adaptations in kanban templates, e.g. the
replacement of moment by luxon, the removal of underscore...

Part-of: odoo/odoo#92475
2022-06-30 09:29:45 +02:00

170 lines
6.0 KiB
JavaScript

/** @odoo-module **/
import MrpDocumentsKanbanView from '@mrp/js/mrp_document_kanban_view';
import MrpDocumentsKanbanController from '@mrp/js/mrp_documents_kanban_controller';
import testUtils from 'web.test_utils';
const createView = testUtils.createView;
QUnit.module('Views', {}, function () {
QUnit.module('MrpDocumentsKanbanView', {
beforeEach: function () {
this.ORIGINAL_CREATE_XHR = MrpDocumentsKanbanController.prototype._createXHR;
this.patchDocumentXHR = (mockedXHRs, customSend) => {
MrpDocumentsKanbanController.prototype._createXhr = () => {
const xhr = {
upload: new window.EventTarget(),
open() { },
send(data) { customSend && customSend(data); },
};
mockedXHRs.push(xhr);
return xhr;
};
};
this.data = {
'mrp.document': {
fields: {
name: {string: "Name", type: 'char', default: ' '},
priority: {string: 'priority', type: 'selection',
selection: [['0', 'Normal'], ['1', 'Low'], ['2', 'High'], ['3', 'Very High']]},
},
records: [
{id: 1, name: 'test1', priority: 2},
{id: 4, name: 'test2', priority: 1},
{id: 3, name: 'test3', priority: 3},
],
},
};
},
afterEach() {
MrpDocumentsKanbanController.prototype._createXHR = this.ORIGINAL_CREATE_XHR;
},
}, function () {
QUnit.test('MRP documents kanban basic rendering', async function (assert) {
assert.expect(6);
const kanban = await createView({
View: MrpDocumentsKanbanView,
model: 'mrp.document',
data: this.data,
arch: '<kanban><templates><t t-name="kanban-box">' +
'<div>' +
'<field name="name"/>' +
'</div>' +
'</t></templates></kanban>',
});
assert.ok(kanban, "kanban is created");
assert.ok(kanban.$buttons.find('.o_mrp_documents_kanban_upload'),
"should have upload button in kanban buttons");
assert.containsN(kanban, '.o_legacy_kanban_view .o_kanban_record:not(.o_kanban_ghost)', 3,
"should have 3 records in the renderer");
// check view layout
assert.hasClass(kanban.$('.o_legacy_kanban_view'), 'o_mrp_documents_kanban_view',
"should have classname 'o_mrp_documents_kanban_view'");
// check control panel buttons
assert.containsN(kanban, '.o_cp_buttons .btn-primary', 1,
"should have only 1 primary button i.e. Upload button");
assert.strictEqual(kanban.$('.o_cp_buttons .btn-primary:first').text().trim(), 'Upload',
"should have a primary 'Upload' button");
kanban.destroy();
});
QUnit.test('mrp: upload multiple files', async function (assert) {
assert.expect(4);
const file1 = await testUtils.file.createFile({
name: 'text1.txt',
content: 'hello, world',
contentType: 'text/plain',
});
const file2 = await testUtils.file.createFile({
name: 'text2.txt',
content: 'hello, world',
contentType: 'text/plain',
});
const file3 = await testUtils.file.createFile({
name: 'text3.txt',
content: 'hello, world',
contentType: 'text/plain',
});
const mockedXHRs = [];
this.patchDocumentXHR(mockedXHRs, data => assert.step('xhrSend'));
const kanban = await createView({
View: MrpDocumentsKanbanView,
model: 'mrp.document',
data: this.data,
arch: '<kanban><templates><t t-name="kanban-box">' +
'<div>' +
'<field name="name"/>' +
'</div>' +
'</t></templates></kanban>',
});
kanban.trigger_up('upload_file', {files: [file1]});
await testUtils.nextTick();
assert.verifySteps(['xhrSend']);
kanban.trigger_up('upload_file', {files: [file2, file3]});
await testUtils.nextTick();
assert.verifySteps(['xhrSend']);
kanban.destroy();
});
QUnit.test('mrp: upload progress bars', async function (assert) {
assert.expect(4);
const file1 = await testUtils.file.createFile({
name: 'text1.txt',
content: 'hello, world',
contentType: 'text/plain',
});
const mockedXHRs = [];
this.patchDocumentXHR(mockedXHRs, data => assert.step('xhrSend'));
const kanban = await createView({
View: MrpDocumentsKanbanView,
model: 'mrp.document',
data: this.data,
arch: '<kanban><templates><t t-name="kanban-box">' +
'<div>' +
'<field name="name"/>' +
'</div>' +
'</t></templates></kanban>',
});
kanban.trigger_up('upload_file', {files: [file1]});
await testUtils.nextTick();
assert.verifySteps(['xhrSend']);
const progressEvent = new Event('progress', { bubbles: true });
progressEvent.loaded = 250000000;
progressEvent.total = 500000000;
progressEvent.lengthComputable = true;
mockedXHRs[0].upload.dispatchEvent(progressEvent);
assert.strictEqual(
kanban.$('.o_file_upload_progress_text_left').text(),
"Uploading... (50%)",
"the current upload progress should be at 50%"
);
progressEvent.loaded = 350000000;
mockedXHRs[0].upload.dispatchEvent(progressEvent);
assert.strictEqual(
kanban.$('.o_file_upload_progress_text_right').text(),
"(350/500Mb)",
"the current upload progress should be at (350/500Mb)"
);
kanban.destroy();
});
});
});