summaryrefslogtreecommitdiffstats
path: root/apps/files_external/tests
diff options
context:
space:
mode:
authorRobin McCorkell <rmccorkell@karoshi.org.uk>2015-03-26 21:36:34 +0000
committerRobin McCorkell <rmccorkell@karoshi.org.uk>2015-03-26 21:36:34 +0000
commitc2909355bf66c92e46c9fbea39497ba91dbe37a0 (patch)
treec832f4ba40ba1728ddd82bc5684ca6b4aa9eb3b6 /apps/files_external/tests
parentfc59a37ae7e28ad8ef7a0a383e87024ff942408d (diff)
parent58b4c2c0e53ff5ef6e261426ecb2b94d9791da71 (diff)
downloadnextcloud-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.js88
-rw-r--r--apps/files_external/tests/mountconfig.php51
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