diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp/static/tests/mrp_document_kanban_tests.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mrp/static/tests/mrp_document_kanban_tests.js')
| -rw-r--r-- | addons/mrp/static/tests/mrp_document_kanban_tests.js | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/addons/mrp/static/tests/mrp_document_kanban_tests.js b/addons/mrp/static/tests/mrp_document_kanban_tests.js new file mode 100644 index 00000000..366bb1bd --- /dev/null +++ b/addons/mrp/static/tests/mrp_document_kanban_tests.js @@ -0,0 +1,172 @@ +odoo.define('mrp.document_kanban_tests', function (require) { +"use strict"; + +const MrpDocumentsKanbanView = require('mrp.MrpDocumentsKanbanView'); +const MrpDocumentsKanbanController = require('mrp.MrpDocumentsKanbanController'); +const testUtils = require('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_kanban_view .o_kanban_record:not(.o_kanban_ghost)', 3, + "should have 3 records in the renderer"); + // check view layout + assert.hasClass(kanban.$('.o_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(); + }); +}); + +}); + +}); |
