diff options
author | Robin McCorkell <rmccorkell@karoshi.org.uk> | 2015-03-26 21:36:34 +0000 |
---|---|---|
committer | Robin McCorkell <rmccorkell@karoshi.org.uk> | 2015-03-26 21:36:34 +0000 |
commit | c2909355bf66c92e46c9fbea39497ba91dbe37a0 (patch) | |
tree | c832f4ba40ba1728ddd82bc5684ca6b4aa9eb3b6 /apps/files_external/tests | |
parent | fc59a37ae7e28ad8ef7a0a383e87024ff942408d (diff) | |
parent | 58b4c2c0e53ff5ef6e261426ecb2b94d9791da71 (diff) | |
download | nextcloud-server-c2909355bf66c92e46c9fbea39497ba91dbe37a0.tar.gz nextcloud-server-c2909355bf66c92e46c9fbea39497ba91dbe37a0.zip |
Merge pull request #14925 from owncloud/ext-mountoptions-ui
Mount options GUI for external storage
Diffstat (limited to 'apps/files_external/tests')
-rw-r--r-- | apps/files_external/tests/js/settingsSpec.js | 88 | ||||
-rw-r--r-- | apps/files_external/tests/mountconfig.php | 51 |
2 files changed, 131 insertions, 8 deletions
diff --git a/apps/files_external/tests/js/settingsSpec.js b/apps/files_external/tests/js/settingsSpec.js index 5a3ee2cb5f1..f030965835a 100644 --- a/apps/files_external/tests/js/settingsSpec.js +++ b/apps/files_external/tests/js/settingsSpec.js @@ -43,6 +43,7 @@ describe('OCA.External.Settings tests', function() { '<td class="applicable">' + '<input type="hidden" class="applicableUsers">' + '</td>' + + '<td class="mountOptionsToggle"><input type="hidden" class="mountOptions"/><img class="svg action"/></td>' + '<td><img alt="Delete" title="Delete" class="svg action"/></td>' + '</tr>' + '</tbody>' + @@ -116,30 +117,57 @@ describe('OCA.External.Settings tests', function() { // 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 $tr; + beforeEach(function() { + $tr = view.$el.find('tr:first'); + selectBackend('\\OC\\TestBackend'); + }); + it('saves storage after editing config', function() { var $field1 = $tr.find('input[data-parameter=field1]'); expect($field1.length).toEqual(1); $field1.val('test'); $field1.trigger(new $.Event('keyup', {keyCode: 97})); + var $mountOptionsField = $tr.find('input.mountOptions'); + expect($mountOptionsField.length).toEqual(1); + $mountOptionsField.val(JSON.stringify({previews:true})); + 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({ + expect(JSON.parse(request.requestBody)).toEqual({ backendClass: '\\OC\\TestBackend', - 'backendOptions[field1]': 'test', - 'backendOptions[field2]': '', + backendOptions: { + 'field1': 'test', + 'field2': '' + }, mountPoint: 'TestBackend', - priority: '11' + priority: 11, + applicableUsers: [], + applicableGroups: [], + mountOptions: { + 'previews': true + } }); // TODO: respond and check data-id }); + it('saves storage after closing mount options dropdown', function() { + $tr.find('.mountOptionsToggle img').click(); + $tr.find('[name=previews]').trigger(new $.Event('keyup', {keyCode: 97})); + $tr.find('input[data-parameter=field1]').val('test'); + + // does not save inside the dropdown + expect(fakeServer.requests.length).toEqual(0); + + $('body').mouseup(); + + // but after closing the dropdown + expect(fakeServer.requests.length).toEqual(1); + }); // TODO: tests with "applicableUsers" and "applicableGroups" // TODO: test with non-optional config parameters // TODO: test with missing mount point value @@ -157,6 +185,52 @@ describe('OCA.External.Settings tests', function() { describe('recheck storages', function() { // TODO }); + describe('mount options dropdown', function() { + var $tr; + var $td; + + beforeEach(function() { + $tr = view.$el.find('tr:first'); + $td = $tr.find('.mountOptionsToggle'); + selectBackend('\\OC\\TestBackend'); + }); + + it('shows dropdown when clicking on toggle button, hides when clicking outside', function() { + $td.find('img').click(); + + expect($td.find('.dropdown').length).toEqual(1); + + $('body').mouseup(); + + expect($td.find('.dropdown').length).toEqual(0); + }); + + it('reads config from mountOptions field', function() { + $tr.find('input.mountOptions').val(JSON.stringify({previews:false})); + + $td.find('img').click(); + expect($td.find('.dropdown [name=previews]').prop('checked')).toEqual(false); + $('body').mouseup(); + + $tr.find('input.mountOptions').val(JSON.stringify({previews:true})); + $td.find('img').click(); + expect($td.find('.dropdown [name=previews]').prop('checked')).toEqual(true); + }); + + it('writes config into mountOptions field', function() { + $td.find('img').click(); + // defaults to true + var $field = $td.find('.dropdown [name=previews]'); + expect($field.prop('checked')).toEqual(true); + $td.find('.dropdown [name=filesystem_check_changes]').val(2); + $('body').mouseup(); + + expect(JSON.parse($tr.find('input.mountOptions').val())).toEqual({ + previews: true, + filesystem_check_changes: 2 + }); + }); + }); }); describe('applicable user list', function() { // TODO: test select2 retrieval logic diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php index a3b993f5018..b76ba0a39a6 100644 --- a/apps/files_external/tests/mountconfig.php +++ b/apps/files_external/tests/mountconfig.php @@ -123,7 +123,6 @@ class Test_Mount_Config extends \Test\TestCase { private $dataDir; private $userHome; private $oldAllowedBackends; - private $allBackends; const TEST_USER1 = 'user1'; const TEST_USER2 = 'user2'; @@ -213,6 +212,11 @@ class Test_Mount_Config extends \Test\TestCase { return json_decode(file_get_contents($configFile), true); } + private function writeGlobalConfig($config) { + $configFile = $this->dataDir . '/mount.json'; + file_put_contents($configFile, json_encode($config)); + } + /** * Reads the user config, for checking */ @@ -630,6 +634,51 @@ class Test_Mount_Config extends \Test\TestCase { $this->assertEquals($mountConfig, $savedMountConfig); } + public function testVariableSubstitution() { + $legacyBackendOptions = [ + 'user' => 'someuser', + 'password' => 'somepassword', + 'replacethis' => '$user', + ]; + $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions); + + $legacyConfig = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions, + 'mountOptions' => ['preview' => false, 'int' => 1], + ]; + // different mount options + $legacyConfig2 = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions, + 'mountOptions' => ['preview' => true, 'string' => 'abc'], + ]; + + $json = [ + 'user' => [ + self::TEST_USER1 => [ + '/$user/files/somemount' => $legacyConfig, + '/$user/files/anothermount' => $legacyConfig2, + ], + ], + ]; + + $this->writeGlobalConfig($json); + + // re-read config, password was read correctly + $config = OC_Mount_Config::getAbsoluteMountPoints(self::TEST_USER1); + + $config1 = $config['/' . self::TEST_USER1 . '/files/somemount']; + $config2 = $config['/' . self::TEST_USER1 . '/files/anothermount']; + + $this->assertSame(self::TEST_USER1, $config1['options']['replacethis']); + $this->assertSame(self::TEST_USER1, $config1['options']['replacethis']); + $this->assertSame(1, $config1['mountOptions']['int']); + $this->assertSame(true, $config2['mountOptions']['preview']); + $this->assertSame('abc', $config2['mountOptions']['string']); + } + + public function mountDataProvider() { return array( // Tests for visible mount points |