summaryrefslogtreecommitdiffstats
path: root/apps/files/tests
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-06-27 13:36:18 +0200
committerVincent Petry <pvince81@owncloud.com>2014-06-27 13:41:01 +0200
commit586b3a9683421181b7cd66aff2d3fabd0f34531e (patch)
tree387b4488859d0173f164d5f94d9b5b58ea1f8a05 /apps/files/tests
parent4d6019b73fd8b1a1d8e8fecbeb129bea12feb89d (diff)
downloadnextcloud-server-586b3a9683421181b7cd66aff2d3fabd0f34531e.tar.gz
nextcloud-server-586b3a9683421181b7cd66aff2d3fabd0f34531e.zip
Sync file list with file actions
Whenever file actions are registered later, now the file lists are automatically notified. Added FileActions.addUpdateListener() to be able to receive such notifications. This removes the need for apps to manually call FileActions.display() after registering new actions. This fixes issues with race conditions when file actions are registered after the file list was already rendered.
Diffstat (limited to 'apps/files/tests')
-rw-r--r--apps/files/tests/js/fileactionsSpec.js53
-rw-r--r--apps/files/tests/js/filelistSpec.js32
2 files changed, 84 insertions, 1 deletions
diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js
index 355761afa01..f464800730a 100644
--- a/apps/files/tests/js/fileactionsSpec.js
+++ b/apps/files/tests/js/fileactionsSpec.js
@@ -21,7 +21,7 @@
describe('OCA.Files.FileActions tests', function() {
var $filesTable, fileList;
- var FileActions;
+ var FileActions;
beforeEach(function() {
// init horrible parameters
@@ -36,6 +36,7 @@ describe('OCA.Files.FileActions tests', function() {
});
afterEach(function() {
FileActions = null;
+ fileList.destroy();
fileList = undefined;
$('#dir, #permissions, #filestable').remove();
});
@@ -192,4 +193,54 @@ describe('OCA.Files.FileActions tests', function() {
context = actionStub.getCall(0).args[1];
expect(context.dir).toEqual('/somepath');
});
+ describe('events', function() {
+ var clock;
+ beforeEach(function() {
+ clock = sinon.useFakeTimers();
+ });
+ afterEach(function() {
+ clock.restore();
+ });
+ it('notifies update event handlers once after multiple changes', function() {
+ var actionStub = sinon.stub();
+ var handler = sinon.stub();
+ FileActions.addUpdateListener(handler);
+ FileActions.register(
+ 'all',
+ 'Test',
+ OC.PERMISSION_READ,
+ OC.imagePath('core', 'actions/test'),
+ actionStub
+ );
+ FileActions.register(
+ 'all',
+ 'Test2',
+ OC.PERMISSION_READ,
+ OC.imagePath('core', 'actions/test'),
+ actionStub
+ );
+ expect(handler.calledTwice).toEqual(true);
+ });
+ it('does not notifies update event handlers after unregistering', function() {
+ var actionStub = sinon.stub();
+ var handler = sinon.stub();
+ FileActions.addUpdateListener(handler);
+ FileActions.removeUpdateListener(handler);
+ FileActions.register(
+ 'all',
+ 'Test',
+ OC.PERMISSION_READ,
+ OC.imagePath('core', 'actions/test'),
+ actionStub
+ );
+ FileActions.register(
+ 'all',
+ 'Test2',
+ OC.PERMISSION_READ,
+ OC.imagePath('core', 'actions/test'),
+ actionStub
+ );
+ expect(handler.notCalled).toEqual(true);
+ });
+ });
});
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index dea7c48e05e..7100a2667c9 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -1623,6 +1623,38 @@ describe('OCA.Files.FileList tests', function() {
expect(context.fileActions).toBeDefined();
expect(context.dir).toEqual('/subdir');
});
+ it('redisplays actions when new actions have been registered', function() {
+ var actionStub = sinon.stub();
+ var clock = sinon.useFakeTimers();
+ var debounceStub = sinon.stub(_, 'debounce', function(callback) {
+ return function() {
+ // defer instead of debounce, to make it work with clock
+ _.defer(callback);
+ };
+ });
+ // need to reinit the list to make the debounce call
+ fileList.destroy();
+ fileList = new OCA.Files.FileList($('#app-content-files'));
+
+ fileList.setFiles(testFiles);
+ fileList.fileActions.register(
+ 'text/plain',
+ 'Test',
+ OC.PERMISSION_ALL,
+ function() {
+ // Specify icon for hitory button
+ return OC.imagePath('core','actions/history');
+ },
+ actionStub
+ );
+ var $tr = fileList.findFileEl('One.txt');
+ expect($tr.find('.action-test').length).toEqual(0);
+ // update is delayed
+ clock.tick(100);
+ expect($tr.find('.action-test').length).toEqual(1);
+ clock.restore();
+ debounceStub.restore();
+ });
});
describe('Sorting files', function() {
it('Sorts by name by default', function() {