diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js index 2142c9824f..18cefef45d 100644 --- a/apps/files/js/detailsview.js +++ b/apps/files/js/detailsview.js @@ -85,7 +85,7 @@ }); // uncomment to add some dummy tabs for testing - this._addTestTabs(); + // this._addTestTabs(); }, /** diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js index 4707e3e9f0..245653d8e1 100644 --- a/apps/files/js/mainfileinfodetailview.js +++ b/apps/files/js/mainfileinfodetailview.js @@ -14,10 +14,10 @@ '
' + ' ' + + ' class="action action-favorite favorite">' + ' ' + ' ' + - ' {{size}}, {{date}}' + + ' {{size}}, {{date}}' + '
'; /** @@ -67,7 +67,6 @@ dateLabel: t('files', 'Modified'), altDate: OC.Util.formatDate(this._fileInfo.mtime), date: OC.Util.relativeModifiedDate(this._fileInfo.mtime), - isFavorite: isFavorite, starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'), starIcon: OC.imagePath('core', isFavorite ? 'actions/starred' : 'actions/star') })); diff --git a/apps/files/tests/js/detailsviewSpec.js b/apps/files/tests/js/detailsviewSpec.js new file mode 100644 index 0000000000..b00c15032b --- /dev/null +++ b/apps/files/tests/js/detailsviewSpec.js @@ -0,0 +1,95 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + +describe('OCA.Files.DetailsView tests', function() { + var detailsView; + + beforeEach(function() { + detailsView = new OCA.Files.DetailsView(); + }); + afterEach(function() { + detailsView.destroy(); + detailsView = undefined; + }); + it('renders itself empty when nothing registered', function() { + detailsView.render(); + expect(detailsView.$el.find('.detailFileInfoContainer').length).toEqual(1); + expect(detailsView.$el.find('.tabsContainer').length).toEqual(1); + }); + describe('file info detail view', function() { + it('renders registered view', function() { + var testView = new OCA.Files.DetailFileInfoView(); + var testView2 = new OCA.Files.DetailFileInfoView(); + detailsView.addDetailView(testView); + detailsView.addDetailView(testView2); + detailsView.render(); + + expect(detailsView.$el.find('.detailFileInfoContainer .detailFileInfoView').length).toEqual(2); + }); + it('updates registered tabs when fileinfo is updated', function() { + var viewRenderStub = sinon.stub(OCA.Files.DetailFileInfoView.prototype, 'render'); + var testView = new OCA.Files.DetailFileInfoView(); + var testView2 = new OCA.Files.DetailFileInfoView(); + detailsView.addDetailView(testView); + detailsView.addDetailView(testView2); + detailsView.render(); + + var fileInfo = {id: 5, name: 'test.txt'}; + viewRenderStub.reset(); + detailsView.setFileInfo(fileInfo); + + expect(testView.getFileInfo()).toEqual(fileInfo); + expect(testView2.getFileInfo()).toEqual(fileInfo); + + expect(viewRenderStub.callCount).toEqual(2); + viewRenderStub.restore(); + }); + }); + describe('tabs', function() { + it('renders registered tabs', function() { + var testView = new OCA.Files.DetailTabView('test1'); + var testView2 = new OCA.Files.DetailTabView('test2'); + detailsView.addTabView(testView); + detailsView.addTabView(testView2); + detailsView.render(); + + expect(detailsView.$el.find('.tabsContainer .detailTabView').length).toEqual(2); + }); + it('updates registered tabs when fileinfo is updated', function() { + var tabRenderStub = sinon.stub(OCA.Files.DetailTabView.prototype, 'render'); + var testView = new OCA.Files.DetailTabView('test1'); + var testView2 = new OCA.Files.DetailTabView('test2'); + detailsView.addTabView(testView); + detailsView.addTabView(testView2); + detailsView.render(); + + var fileInfo = {id: 5, name: 'test.txt'}; + tabRenderStub.reset(); + detailsView.setFileInfo(fileInfo); + + expect(testView.getFileInfo()).toEqual(fileInfo); + expect(testView2.getFileInfo()).toEqual(fileInfo); + + expect(tabRenderStub.callCount).toEqual(2); + tabRenderStub.restore(); + }); + }); +}); diff --git a/apps/files/tests/js/favoritespluginspec.js b/apps/files/tests/js/favoritespluginspec.js index 90b40ede74..1b144c2870 100644 --- a/apps/files/tests/js/favoritespluginspec.js +++ b/apps/files/tests/js/favoritespluginspec.js @@ -113,7 +113,7 @@ describe('OCA.Files.FavoritesPlugin tests', function() { shareOwner: 'user2' }]); - fileList.findFileEl('testdir').find('td a.name').click(); + fileList.findFileEl('testdir').find('td .nametext').click(); expect(OCA.Files.App.fileList.getCurrentDirectory()).toEqual('/somewhere/inside/subdir/testdir'); diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 09d698088a..5c0c8c96bc 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1870,6 +1870,50 @@ describe('OCA.Files.FileList tests', function() { }); }) }); + describe('Details sidebar', function() { + beforeEach(function() { + fileList.setFiles(testFiles); + }); + it('Clicking on a file row will trigger file action if no details view configured', function() { + fileList._detailsView = null; + var updateDetailsViewStub = sinon.stub(fileList, '_updateDetailsView'); + var actionStub = sinon.stub(); + 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 + ); + fileList.fileActions.setDefault('text/plain', 'Test'); + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename>a.name').click(); + expect(actionStub.calledOnce).toEqual(true); + expect(updateDetailsViewStub.notCalled).toEqual(true); + updateDetailsViewStub.restore(); + }); + it('Clicking on a file row will trigger details sidebar', function() { + fileList.fileActions.setDefault('text/plain', 'Test'); + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename>a.name').click(); + expect($tr.hasClass('highlighted')).toEqual(true); + + expect(fileList._detailsView.getFileInfo().id).toEqual(1); + }); + it('Clicking outside to deselect a file row will trigger details sidebar', function() { + var $tr = fileList.findFileEl('One.txt'); + $tr.find('td.filename>a.name').click(); + + fileList.$el.find('tfoot').click(); + + expect($tr.hasClass('highlighted')).toEqual(false); + expect(fileList._detailsView.getFileInfo()).toEqual(null); + }); + }); describe('File actions', function() { it('Clicking on a file name will trigger default action', function() { var actionStub = sinon.stub(); @@ -1886,7 +1930,7 @@ describe('OCA.Files.FileList tests', function() { ); fileList.fileActions.setDefault('text/plain', 'Test'); var $tr = fileList.findFileEl('One.txt'); - $tr.find('td.filename>a.name').click(); + $tr.find('td.filename .nametext').click(); expect(actionStub.calledOnce).toEqual(true); expect(actionStub.getCall(0).args[0]).toEqual('One.txt'); var context = actionStub.getCall(0).args[1]; diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js new file mode 100644 index 0000000000..e4b3adc578 --- /dev/null +++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js @@ -0,0 +1,77 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + +describe('OCA.Files.MainFileInfoDetailView tests', function() { + var view, tipsyStub; + + beforeEach(function() { + tipsyStub = sinon.stub($.fn, 'tipsy'); + view = new OCA.Files.MainFileInfoDetailView(); + }); + afterEach(function() { + view.destroy(); + view = undefined; + tipsyStub.restore(); + }); + describe('rendering', function() { + var testFileInfo; + beforeEach(function() { + view = new OCA.Files.MainFileInfoDetailView(); + testFileInfo = { + id: 5, + name: 'One.txt', + path: '/subdir', + size: 123456789, + dateLabel: new Date(Date.UTC(2015, 6, 17, 1, 2, 3, 4)) + }; + }); + it('displays basic info', function() { + var clock = sinon.useFakeTimers(Date.UTC(2015, 6, 17, 1, 2, 0, 0)); + view.setFileInfo(testFileInfo); + expect(view.$el.find('.fileName').text()).toEqual('One.txt'); + expect(view.$el.find('.fileName').attr('title')).toEqual('One.txt'); + expect(view.$el.find('.size').text()).toEqual('117.7 MB'); + expect(view.$el.find('.size').attr('title')).toEqual('123456789 bytes'); + expect(view.$el.find('.date').text()).toEqual('a few seconds ago'); + expect(view.$el.find('.date').attr('title')).toEqual('July 17, 2015 3:02 AM'); + clock.restore(); + }); + it('displays favorite icon', function() { + view.setFileInfo(_.extend(testFileInfo, { + tags: [OC.FAVORITE] + })); + expect(OC.TestUtil.getImageUrl(view.$el.find('.favorite img'))) + .toEqual(OC.imagePath('core', 'actions/starred')); + + view.setFileInfo(_.extend(testFileInfo, { + tags: [] + })); + expect(OC.TestUtil.getImageUrl(view.$el.find('.favorite img'))) + .toEqual(OC.imagePath('core', 'actions/star')); + }); + it('displays mime icon', function() { + // TODO + }); + it('displays thumbnail', function() { + // TODO + }); + }); +}); diff --git a/apps/files_sharing/tests/js/appSpec.js b/apps/files_sharing/tests/js/appSpec.js index 49bca56800..133bd44f75 100644 --- a/apps/files_sharing/tests/js/appSpec.js +++ b/apps/files_sharing/tests/js/appSpec.js @@ -132,7 +132,7 @@ describe('OCA.Sharing.App tests', function() { shareOwner: 'user2' }]); - fileListIn.findFileEl('testdir').find('td a.name').click(); + fileListIn.findFileEl('testdir').find('td .nametext').click(); expect(OCA.Files.App.fileList.getCurrentDirectory()).toEqual('/somewhere/inside/subdir/testdir');