/** * ownCloud * * @author Vincent Petry * @copyright 2014 Vincent Petry * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see . * */ /* global FileList */ describe('OC.Upload tests', function() { var $dummyUploader; var testFile; beforeEach(function() { testFile = { name: 'test.txt', size: 5000, // 5 KB type: 'text/plain', lastModifiedDate: new Date() }; // need a dummy button because file-upload checks on it $('#testArea').append( '' + '' + // 10 MB '' + // 50 MB // TODO: handlebars! '
' + 'New' + '
    ' + '
  • Text file

  • ' + '
' + '
' ); $dummyUploader = $('#file_upload_start'); }); afterEach(function() { delete window.file_upload_param; $dummyUploader = undefined; }); describe('Adding files for upload', function() { var params; var failStub; beforeEach(function() { params = OC.Upload.init(); failStub = sinon.stub(); $dummyUploader.on('fileuploadfail', failStub); }); afterEach(function() { params = undefined; failStub = undefined; }); /** * Add file for upload * @param file file data */ function addFile(file) { return params.add.call( $dummyUploader[0], {}, { originalFiles: {}, files: [file] }); } it('adds file when size is below limits', function() { var result = addFile(testFile); expect(result).toEqual(true); }); it('adds file when free space is unknown', function() { var result; $('#free_space').val(-2); result = addFile(testFile); expect(result).toEqual(true); expect(failStub.notCalled).toEqual(true); }); it('does not add file if it exceeds upload limit', function() { var result; $('#upload_limit').val(1000); result = addFile(testFile); expect(result).toEqual(false); expect(failStub.calledOnce).toEqual(true); expect(failStub.getCall(0).args[1].textStatus).toEqual('sizeexceedlimit'); expect(failStub.getCall(0).args[1].errorThrown).toEqual( 'Total file size 5 KB exceeds upload limit 1000 B' ); }); it('does not add file if it exceeds free space', function() { var result; $('#free_space').val(1000); result = addFile(testFile); expect(result).toEqual(false); expect(failStub.calledOnce).toEqual(true); expect(failStub.getCall(0).args[1].textStatus).toEqual('notenoughspace'); expect(failStub.getCall(0).args[1].errorThrown).toEqual( 'Not enough free space, you are uploading 5 KB but only 1000 B is left' ); }); }); describe('Upload conflicts', function() { var oldFileList; var conflictDialogStub; var callbacks; beforeEach(function() { oldFileList = FileList; $('#testArea').append( '
' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
' ); FileList = new OCA.Files.FileList($('#tableContainer')); FileList.add({name: 'conflict.txt', mimetype: 'text/plain'}); FileList.add({name: 'conflict2.txt', mimetype: 'text/plain'}); conflictDialogStub = sinon.stub(OC.dialogs, 'fileexists'); callbacks = { onNoConflicts: sinon.stub() }; }); afterEach(function() { conflictDialogStub.restore(); FileList.destroy(); FileList = oldFileList; }); it('does not show conflict dialog when no client side conflict', function() { var selection = { // yes, the format of uploads is weird... uploads: [ {files: [{name: 'noconflict.txt'}]}, {files: [{name: 'noconflict2.txt'}]} ] }; OC.Upload.checkExistingFiles(selection, callbacks); expect(conflictDialogStub.notCalled).toEqual(true); expect(callbacks.onNoConflicts.calledOnce).toEqual(true); expect(callbacks.onNoConflicts.calledWith(selection)).toEqual(true); }); it('shows conflict dialog when no client side conflict', function() { var selection = { // yes, the format of uploads is weird... uploads: [ {files: [{name: 'conflict.txt'}]}, {files: [{name: 'conflict2.txt'}]}, {files: [{name: 'noconflict.txt'}]} ] }; var deferred = $.Deferred(); conflictDialogStub.returns(deferred.promise()); deferred.resolve(); OC.Upload.checkExistingFiles(selection, callbacks); expect(conflictDialogStub.callCount).toEqual(3); expect(conflictDialogStub.getCall(1).args[0]) .toEqual({files: [ { name: 'conflict.txt' } ]}); expect(conflictDialogStub.getCall(1).args[1]) .toEqual({ name: 'conflict.txt', mimetype: 'text/plain', directory: '/' }); expect(conflictDialogStub.getCall(1).args[2]).toEqual({ name: 'conflict.txt' }); // yes, the dialog must be called several times... expect(conflictDialogStub.getCall(2).args[0]).toEqual({ files: [ { name: 'conflict2.txt' } ] }); expect(conflictDialogStub.getCall(2).args[1]) .toEqual({ name: 'conflict2.txt', mimetype: 'text/plain', directory: '/' }); expect(conflictDialogStub.getCall(2).args[2]).toEqual({ name: 'conflict2.txt' }); expect(callbacks.onNoConflicts.calledOnce).toEqual(true); expect(callbacks.onNoConflicts.calledWith({ uploads: [ {files: [{name: 'noconflict.txt'}]} ] })).toEqual(true); }); }); });