@@ -85,7 +85,7 @@ | |||
}); | |||
// uncomment to add some dummy tabs for testing | |||
this._addTestTabs(); | |||
// this._addTestTabs(); | |||
}, | |||
/** |
@@ -14,10 +14,10 @@ | |||
'<div class="ellipsis">' + | |||
' <a href="#" ' + | |||
' alt="{{starAltText}}"' + | |||
' class="action action-favorite {{#isFavorite}}permanent{{/isFavorite}}">' + | |||
' class="action action-favorite favorite">' + | |||
' <img class="svg" src="{{starIcon}}" />' + | |||
' </a>' + | |||
' <span title="{{altSize}}">{{size}}</span>, <span title="{{altDate}}">{{date}}</span>' + | |||
' <span class="size" title="{{altSize}}">{{size}}</span>, <span class="date" title="{{altDate}}">{{date}}</span>' + | |||
'</div>'; | |||
/** | |||
@@ -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') | |||
})); |
@@ -0,0 +1,95 @@ | |||
/** | |||
* ownCloud | |||
* | |||
* @author Vincent Petry | |||
* @copyright 2015 Vincent Petry <pvince81@owncloud.com> | |||
* | |||
* 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 <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
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(); | |||
}); | |||
}); | |||
}); |
@@ -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'); | |||
@@ -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]; |
@@ -0,0 +1,77 @@ | |||
/** | |||
* ownCloud | |||
* | |||
* @author Vincent Petry | |||
* @copyright 2015 Vincent Petry <pvince81@owncloud.com> | |||
* | |||
* 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 <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
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 | |||
}); | |||
}); | |||
}); |
@@ -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'); | |||