diff options
Diffstat (limited to 'apps/files_external/tests')
-rw-r--r-- | apps/files_external/tests/appSpec.js | 98 | ||||
-rw-r--r-- | apps/files_external/tests/js/mountsfilelistSpec.js | 155 |
2 files changed, 253 insertions, 0 deletions
diff --git a/apps/files_external/tests/appSpec.js b/apps/files_external/tests/appSpec.js new file mode 100644 index 00000000000..b00442384da --- /dev/null +++ b/apps/files_external/tests/appSpec.js @@ -0,0 +1,98 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry <pvince81@owncloud.com> +* +* 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 <http://www.gnu.org/licenses/>. +* +*/ + +describe('OCA.External.App tests', function() { + var App = OCA.External.App; + var fileList; + + beforeEach(function() { + $('#testArea').append( + '<div id="app-navigation">' + + '<ul><li data-id="files"><a>Files</a></li>' + + '<li data-id="sharingin"><a></a></li>' + + '<li data-id="sharingout"><a></a></li>' + + '</ul></div>' + + '<div id="app-content">' + + '<div id="app-content-files" class="hidden">' + + '</div>' + + '<div id="app-content-extstoragemounts" class="hidden">' + + '</div>' + + '</div>' + + '</div>' + ); + fileList = App.initList($('#app-content-extstoragemounts')); + }); + afterEach(function() { + App.fileList = null; + fileList = null; + }); + + describe('initialization', function() { + it('inits external mounts list on show', function() { + expect(App.fileList).toBeDefined(); + }); + }); + describe('file actions', function() { + it('provides default file actions', function() { + var fileActions = fileList.fileActions; + + expect(fileActions.actions.all).toBeDefined(); + expect(fileActions.actions.all.Delete).toBeDefined(); + expect(fileActions.actions.all.Rename).toBeDefined(); + expect(fileActions.actions.all.Download).toBeDefined(); + + expect(fileActions.defaults.dir).toEqual('Open'); + }); + it('redirects to files app when opening a directory', function() { + var oldList = OCA.Files.App.fileList; + // dummy new list to make sure it exists + OCA.Files.App.fileList = new OCA.Files.FileList($('<table><thead></thead><tbody></tbody></table>')); + + var setActiveViewStub = sinon.stub(OCA.Files.App, 'setActiveView'); + // create dummy table so we can click the dom + var $table = '<table><thead></thead><tbody id="fileList"></tbody></table>'; + $('#app-content-extstoragemounts').append($table); + + App._inFileList = null; + fileList = App.initList($('#app-content-extstoragemounts')); + + fileList.setFiles([{ + name: 'testdir', + type: 'dir', + path: '/somewhere/inside/subdir', + counterParts: ['user2'], + shareOwner: 'user2' + }]); + + fileList.findFileEl('testdir').find('td a.name').click(); + + expect(OCA.Files.App.fileList.getCurrentDirectory()).toEqual('/somewhere/inside/subdir/testdir'); + + expect(setActiveViewStub.calledOnce).toEqual(true); + expect(setActiveViewStub.calledWith('files')).toEqual(true); + + setActiveViewStub.restore(); + + // restore old list + OCA.Files.App.fileList = oldList; + }); + }); +}); diff --git a/apps/files_external/tests/js/mountsfilelistSpec.js b/apps/files_external/tests/js/mountsfilelistSpec.js new file mode 100644 index 00000000000..96a6b622a4e --- /dev/null +++ b/apps/files_external/tests/js/mountsfilelistSpec.js @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +describe('OCA.External.FileList tests', function() { + var testFiles, alertStub, notificationStub, fileList, fileActions; + var oldFileListPrototype; + + beforeEach(function() { + alertStub = sinon.stub(OC.dialogs, 'alert'); + notificationStub = sinon.stub(OC.Notification, 'show'); + + // init parameters and test table elements + $('#testArea').append( + '<div id="app-content-container">' + + // init horrible parameters + '<input type="hidden" id="dir" value="/"></input>' + + '<input type="hidden" id="permissions" value="31"></input>' + + // dummy controls + '<div id="controls">' + + ' <div class="actions creatable"></div>' + + ' <div class="notCreatable"></div>' + + '</div>' + + // dummy table + // TODO: at some point this will be rendered by the fileList class itself! + '<table id="filestable">' + + '<thead><tr>' + + '<th id="headerName" class="hidden column-name">' + + ' <div id="headerName-container">' + + ' <a class="name sort columntitle" data-sort="name"><span>Name</span><span class="sort-indicator"></span></a>' + + ' </div>' + + '</th>' + + '<th id="headerBackend" class="hidden column-backend">' + + ' <a class="backend sort columntitle" data-sort="backend"><span>Storage type</span><span class="sort-indicator"></span></a>' + + '</th>' + + '<th id="headerScope" class="hidden column-scope column-last">' + + ' <a class="scope sort columntitle" data-sort="scope"><span>Scope</span><span class="sort-indicator"></span></a>' + + '</th>' + + '</tr></thead>' + + '<tbody id="fileList"></tbody>' + + '<tfoot></tfoot>' + + '</table>' + + '<div id="emptycontent">Empty content message</div>' + + '</div>' + ); + fileActions = new OCA.Files.FileActions(); + }); + afterEach(function() { + OCA.Files.FileList.prototype = oldFileListPrototype; + testFiles = undefined; + fileList = undefined; + fileActions = undefined; + + notificationStub.restore(); + alertStub.restore(); + }); + + describe('loading file list for external storages', function() { + var ocsResponse; + + beforeEach(function() { + fileList = new OCA.External.FileList( + $('#app-content-container') + ); + + fileList.reload(); + + /* jshint camelcase: false */ + ocsResponse = { + ocs: { + meta: { + status: 'ok', + statuscode: 100, + message: null + }, + data: [{ + name: 'smb mount', + path: '/mount points', + type: 'dir', + backend: 'SMB', + scope: 'personal', + permissions: OC.PERMISSION_READ | OC.PERMISSION_DELETE + }, { + name: 'sftp mount', + path: '/another mount points', + type: 'dir', + backend: 'SFTP', + scope: 'system', + permissions: OC.PERMISSION_READ + }] + } + }; + }); + it('render storage list', function() { + var request; + var $rows; + var $tr; + + expect(fakeServer.requests.length).toEqual(1); + request = fakeServer.requests[0]; + expect(request.url).toEqual( + OC.linkToOCS('apps/files_external/api/v1') + + 'mounts?format=json' + ); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify(ocsResponse) + ); + + $rows = fileList.$el.find('tbody tr'); + expect($rows.length).toEqual(2); + + $tr = $rows.eq(0); + expect($tr.attr('data-id')).not.toBeDefined(); + expect($tr.attr('data-type')).toEqual('dir'); + expect($tr.attr('data-file')).toEqual('sftp mount'); + expect($tr.attr('data-path')).toEqual('/another mount points'); + expect($tr.attr('data-size')).not.toBeDefined(); + expect($tr.attr('data-permissions')).toEqual('1'); // read only + expect($tr.find('a.name').attr('href')).toEqual( + OC.webroot + + '/index.php/apps/files' + + '?dir=/another%20mount%20points/sftp%20mount' + ); + expect($tr.find('.nametext').text().trim()).toEqual('sftp mount'); + expect($tr.find('.column-scope').text().trim()).toEqual('System'); + expect($tr.find('.column-backend').text().trim()).toEqual('SFTP'); + + $tr = $rows.eq(1); + expect($tr.attr('data-id')).not.toBeDefined(); + expect($tr.attr('data-type')).toEqual('dir'); + expect($tr.attr('data-file')).toEqual('smb mount'); + expect($tr.attr('data-path')).toEqual('/mount points'); + expect($tr.attr('data-size')).not.toBeDefined(); + expect($tr.attr('data-permissions')).toEqual('9'); // read and delete + expect($tr.find('a.name').attr('href')).toEqual( + OC.webroot + + '/index.php/apps/files' + + '?dir=/mount%20points/smb%20mount' + ); + expect($tr.find('.nametext').text().trim()).toEqual('smb mount'); + expect($tr.find('.column-scope').text().trim()).toEqual('Personal'); + expect($tr.find('.column-backend').text().trim()).toEqual('SMB'); + + }); + }); +}); |