diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-10-31 11:41:07 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-03-12 18:51:02 +0100 |
commit | ce94a998dd5a5801beef7874dd13752095e35de0 (patch) | |
tree | 8d91631f709549c40555dcb74e9976519f895ae2 /apps/files_external/tests/js | |
parent | 23cc3cc5f2f42166c37fbe03fa62d3dd1dbfe5ed (diff) | |
download | nextcloud-server-ce94a998dd5a5801beef7874dd13752095e35de0.tar.gz nextcloud-server-ce94a998dd5a5801beef7874dd13752095e35de0.zip |
Use storage id + appframework for ext storage CRUD
- Added StorageConfig class to replace ugly arrays
- Implemented StorageService and StorageController for Global and User
storages
- Async status checking for storages (from Xenopathic)
- Auto-generate id for external storage configs (not the same as
storage_id)
- Refactor JS classes for external storage settings, this mostly
moves/encapsulated existing global event handlers into the
MountConfigListView class.
- Added some JS unit tests for the external storage UI
Diffstat (limited to 'apps/files_external/tests/js')
-rw-r--r-- | apps/files_external/tests/js/settingsSpec.js | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/apps/files_external/tests/js/settingsSpec.js b/apps/files_external/tests/js/settingsSpec.js new file mode 100644 index 00000000000..350840e542c --- /dev/null +++ b/apps/files_external/tests/js/settingsSpec.js @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2015 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.Settings tests', function() { + var clock; + var select2Stub; + var select2ApplicableUsers; + + beforeEach(function() { + clock = sinon.useFakeTimers(); + select2Stub = sinon.stub($.fn, 'select2', function(args) { + if (args === 'val') { + return select2ApplicableUsers; + } + return { + on: function() {} + }; + }); + + // view still requires an existing DOM table + $('#testArea').append( + '<table id="externalStorage" data-admin="true">' + + '<thead></thead>' + + '<tbody>' + + '<tr id="addMountPoint" data-id="">' + + '<td class="status"></td>' + + '<td class="mountPoint"><input type="text" name="mountPoint"/></td>' + + '<td class="backend">' + + '<select class="selectBackend">' + + '<option disable selected>Add storage</option>' + + '<option value="\\OC\\TestBackend">Test Backend</option>' + + '<option value="\\OC\\AnotherTestBackend">Another Test Backend</option>' + + '</select>' + + '</td>' + + '<td class="configuration"></td>' + + '<td class="applicable">' + + '<input type="hidden" class="applicableUsers">' + + '</td>' + + '<td><img alt="Delete" title="Delete" class="svg action"/></td>' + + '</tr>' + + '</tbody>' + + '</table>' + ); + // these are usually appended into the data attribute + // within the DOM by the server template + $('#externalStorage .selectBackend:first').data('configurations', { + '\\OC\\TestBackend': { + 'backend': 'Test Backend Name', + 'configuration': { + 'field1': 'Display Name 1', + 'field2': '&Display Name 2' + } + }, + '\\OC\\AnotherTestBackend': { + 'backend': 'Another Test Backend Name', + 'configuration': { + 'field1': 'Display Name 1', + 'field2': '&Display Name 2' + } + } + } + ); + }); + afterEach(function() { + select2Stub.restore(); + clock.restore(); + }); + + describe('storage configuration', function() { + var view; + + function selectBackend(backendName) { + view.$el.find('.selectBackend:first').val('\\OC\\TestBackend').trigger('change'); + } + + beforeEach(function() { + var $el = $('#externalStorage'); + view = new OCA.External.Settings.MountConfigListView($el); + }); + afterEach(function() { + view = null; + }); + describe('selecting backend', function() { + it('populates the row and creates a new empty one', function() { + var $firstRow = view.$el.find('tr:first'); + selectBackend('\\OC\\TestBackend'); + expect($firstRow.find('.backend').text()).toEqual('Test Backend'); + expect($firstRow.find('.selectBackend').length).toEqual(0); + + // TODO: check "remove" button visibility + + // the suggested mount point name + expect($firstRow.find('[name=mountPoint]').val()).toEqual('TestBackend'); + + // TODO: check that the options have been created + + // TODO: check select2 call on the ".applicableUsers" element + + var $emptyRow = $firstRow.next('tr'); + expect($emptyRow.length).toEqual(1); + expect($emptyRow.find('.selectBackend').length).toEqual(1); + expect($emptyRow.find('.applicable select').length).toEqual(0); + + // TODO: check "remove" button visibility + }); + // TODO: test with personal mounts (no applicable fields) + // TODO: test suggested mount point logic + }); + describe('saving storages', function() { + it('saves storage after editing config', function() { + var $tr = view.$el.find('tr:first'); + selectBackend('\\OC\\TestBackend'); + + var $field1 = $tr.find('input[data-parameter=field1]'); + expect($field1.length).toEqual(1); + $field1.val('test'); + $field1.trigger(new $.Event('keyup', {keyCode: 97})); + + clock.tick(4000); + + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + expect(request.url).toEqual(OC.webroot + '/index.php/apps/files_external/globalstorages'); + expect(OC.parseQueryString(request.requestBody)).toEqual({ + backendClass: '\\OC\\TestBackend', + 'backendOptions[field1]': 'test', + 'backendOptions[field2]': '', + mountPoint: 'TestBackend' + }); + + // TODO: respond and check data-id + }); + // TODO: tests with "applicableUsers" and "applicableGroups" + // TODO: test with non-optional config parameters + // TODO: test with missing mount point value + // TODO: test with personal mounts (no applicable fields) + // TODO: test save triggers: paste, keyup, checkbox + // TODO: test "custom" field with addScript + // TODO: status indicator + }); + describe('update storage', function() { + // TODO + }); + describe('delete storage', function() { + // TODO + }); + describe('recheck storages', function() { + // TODO + }); + }); + describe('applicable user list', function() { + // TODO: test select2 retrieval logic + }); + describe('allow user mounts section', function() { + // TODO: test allowUserMounting section + }); +}); |