summaryrefslogtreecommitdiffstats
path: root/apps/files_versions/tests/js/versionstabviewSpec.js
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-09-01 19:29:55 +0200
committerVincent Petry <pvince81@owncloud.com>2015-09-03 16:47:24 +0200
commit310d79728447ecf69f18d0b61a527397bd961888 (patch)
tree805b2a0a40ed5ce7acb58afb90ad7c18e760e037 /apps/files_versions/tests/js/versionstabviewSpec.js
parente9e42fff61a922f11a3b1014d810562537950b6a (diff)
downloadnextcloud-server-310d79728447ecf69f18d0b61a527397bd961888.tar.gz
nextcloud-server-310d79728447ecf69f18d0b61a527397bd961888.zip
Add versions tab to files sidebar
- move versions to a tab in the files sidebar - added mechanism to auto-update the row in the FileList whenever values are set to the FileInfoModel given to the sidebar - updated tags/favorite action to make use of that new mechanism
Diffstat (limited to 'apps/files_versions/tests/js/versionstabviewSpec.js')
-rw-r--r--apps/files_versions/tests/js/versionstabviewSpec.js208
1 files changed, 208 insertions, 0 deletions
diff --git a/apps/files_versions/tests/js/versionstabviewSpec.js b/apps/files_versions/tests/js/versionstabviewSpec.js
new file mode 100644
index 00000000000..4435f38ef7e
--- /dev/null
+++ b/apps/files_versions/tests/js/versionstabviewSpec.js
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+describe('OCA.Versions.VersionsTabView', function() {
+ var VersionCollection = OCA.Versions.VersionCollection;
+ var VersionModel = OCA.Versions.VersionModel;
+ var VersionsTabView = OCA.Versions.VersionsTabView;
+
+ var fetchStub, fileInfoModel, tabView, testVersions, clock;
+
+ beforeEach(function() {
+ clock = sinon.useFakeTimers(Date.UTC(2015, 6, 17, 1, 2, 0, 3));
+ var time1 = Date.UTC(2015, 6, 17, 1, 2, 0, 3) / 1000;
+ var time2 = Date.UTC(2015, 6, 15, 1, 2, 0, 3) / 1000;
+
+ var version1 = new VersionModel({
+ id: time1,
+ timestamp: time1,
+ name: 'some file.txt',
+ size: 140,
+ fullPath: '/subdir/some file.txt'
+ });
+ var version2 = new VersionModel({
+ id: time2,
+ timestamp: time2,
+ name: 'some file.txt',
+ size: 150,
+ fullPath: '/subdir/some file.txt'
+ });
+
+ testVersions = [version1, version2];
+
+ fetchStub = sinon.stub(VersionCollection.prototype, 'fetch');
+ fileInfoModel = new OCA.Files.FileInfoModel({
+ id: 123,
+ name: 'test.txt'
+ });
+ tabView = new VersionsTabView();
+ tabView.render();
+ });
+
+ afterEach(function() {
+ fetchStub.restore();
+ tabView.remove();
+ clock.restore();
+ });
+
+ describe('rendering', function() {
+ it('reloads matching versions when setting file info model', function() {
+ tabView.setFileInfo(fileInfoModel);
+ expect(fetchStub.calledOnce).toEqual(true);
+ });
+
+ it('renders loading icon while fetching versions', function() {
+ tabView.setFileInfo(fileInfoModel);
+ tabView.collection.trigger('request');
+
+ expect(tabView.$el.find('.loading').length).toEqual(1);
+ expect(tabView.$el.find('.versions li').length).toEqual(0);
+ });
+
+ it('renders versions', function() {
+
+ tabView.setFileInfo(fileInfoModel);
+ tabView.collection.set(testVersions);
+
+ var version1 = testVersions[0];
+ var version2 = testVersions[1];
+ var $versions = tabView.$el.find('.versions>li');
+ expect($versions.length).toEqual(2);
+ var $item = $versions.eq(0);
+ expect($item.find('.downloadVersion').attr('href')).toEqual(version1.getDownloadUrl());
+ expect($item.find('.versiondate').text()).toEqual('a few seconds ago');
+ expect($item.find('.revertVersion').length).toEqual(1);
+ expect($item.find('.preview').attr('src')).toEqual(version1.getPreviewUrl());
+
+ $item = $versions.eq(1);
+ expect($item.find('.downloadVersion').attr('href')).toEqual(version2.getDownloadUrl());
+ expect($item.find('.versiondate').text()).toEqual('2 days ago');
+ expect($item.find('.revertVersion').length).toEqual(1);
+ expect($item.find('.preview').attr('src')).toEqual(version2.getPreviewUrl());
+ });
+ });
+
+ describe('More versions', function() {
+ var hasMoreResultsStub;
+
+ beforeEach(function() {
+ tabView.collection.set(testVersions);
+ hasMoreResultsStub = sinon.stub(VersionCollection.prototype, 'hasMoreResults');
+ });
+ afterEach(function() {
+ hasMoreResultsStub.restore();
+ });
+
+ it('shows "More versions" button when more versions are available', function() {
+ hasMoreResultsStub.returns(true);
+ tabView.collection.trigger('sync');
+
+ expect(tabView.$el.find('.showMoreVersions').hasClass('hidden')).toEqual(false);
+ });
+ it('does not show "More versions" button when more versions are available', function() {
+ hasMoreResultsStub.returns(false);
+ tabView.collection.trigger('sync');
+
+ expect(tabView.$el.find('.showMoreVersions').hasClass('hidden')).toEqual(true);
+ });
+ it('fetches and appends the next page when clicking the "More" button', function() {
+ hasMoreResultsStub.returns(true);
+
+ expect(fetchStub.notCalled).toEqual(true);
+
+ tabView.$el.find('.showMoreVersions').click();
+
+ expect(fetchStub.calledOnce).toEqual(true);
+ });
+ it('appends version to the list when added to collection', function() {
+ var time3 = Date.UTC(2015, 6, 10, 1, 0, 0, 0) / 1000;
+
+ var version3 = new VersionModel({
+ id: time3,
+ timestamp: time3,
+ name: 'some file.txt',
+ size: 54,
+ fullPath: '/subdir/some file.txt'
+ });
+
+ tabView.collection.add(version3);
+
+ expect(tabView.$el.find('.versions>li').length).toEqual(3);
+
+ var $item = tabView.$el.find('.versions>li').eq(2);
+ expect($item.find('.downloadVersion').attr('href')).toEqual(version3.getDownloadUrl());
+ expect($item.find('.versiondate').text()).toEqual('7 days ago');
+ expect($item.find('.revertVersion').length).toEqual(1);
+ expect($item.find('.preview').attr('src')).toEqual(version3.getPreviewUrl());
+ });
+ });
+
+ describe('Reverting', function() {
+ var revertStub;
+
+ beforeEach(function() {
+ revertStub = sinon.stub(VersionModel.prototype, 'revert');
+ tabView.setFileInfo(fileInfoModel);
+ tabView.collection.set(testVersions);
+ });
+
+ afterEach(function() {
+ revertStub.restore();
+ });
+
+ it('tells the model to revert when clicking "Revert"', function() {
+ tabView.$el.find('.revertVersion').eq(1).click();
+
+ expect(revertStub.calledOnce).toEqual(true);
+ });
+ it('triggers busy state during revert', function() {
+ var busyStub = sinon.stub();
+ fileInfoModel.on('busy', busyStub);
+
+ tabView.$el.find('.revertVersion').eq(1).click();
+
+ expect(busyStub.calledOnce).toEqual(true);
+ expect(busyStub.calledWith(fileInfoModel, true)).toEqual(true);
+
+ busyStub.reset();
+ revertStub.getCall(0).args[0].success();
+
+ expect(busyStub.calledOnce).toEqual(true);
+ expect(busyStub.calledWith(fileInfoModel, false)).toEqual(true);
+ });
+ it('updates the file info model with the information from the reverted revision', function() {
+ var changeStub = sinon.stub();
+ fileInfoModel.on('change', changeStub);
+
+ tabView.$el.find('.revertVersion').eq(1).click();
+
+ expect(changeStub.notCalled).toEqual(true);
+
+ revertStub.getCall(0).args[0].success();
+
+ expect(changeStub.calledOnce).toEqual(true);
+ var changes = changeStub.getCall(0).args[0].changed;
+ expect(changes.size).toEqual(150);
+ expect(changes.mtime).toEqual(testVersions[1].get('timestamp') * 1000);
+ expect(changes.etag).toBeDefined();
+ });
+ it('shows notification on revert error', function() {
+ var notificationStub = sinon.stub(OC.Notification, 'showTemporary');
+
+ tabView.$el.find('.revertVersion').eq(1).click();
+
+ revertStub.getCall(0).args[0].error();
+
+ expect(notificationStub.calledOnce).toEqual(true);
+
+ notificationStub.restore();
+ });
+ });
+});
+