Added unit tests for right sidebar
This commit is contained in:
parent
f11946c8c0
commit
3e44ca6dc2
7 changed files with 222 additions and 7 deletions
|
@ -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')
|
||||
}));
|
||||
|
|
95
apps/files/tests/js/detailsviewSpec.js
Normal file
95
apps/files/tests/js/detailsviewSpec.js
Normal file
|
@ -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];
|
||||
|
|
77
apps/files/tests/js/mainfileinfodetailviewSpec.js
Normal file
77
apps/files/tests/js/mainfileinfodetailviewSpec.js
Normal file
|
@ -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');
|
||||
|
||||
|
|
Loading…
Reference in a new issue