123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- /**
- * @copyright 2015 Vincent Petry <pvince81@owncloud.com>
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Daniel Calviño Sánchez <danxuliu@gmail.com>
- * @author Michael Jobst <mjobst+github@tecratech.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Raghu Nayyar <hey@raghunayyar.com>
- * @author Vincent Petry <vincent@nextcloud.com>
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- describe('OCA.Files.MainFileInfoDetailView tests', function() {
- var view, tooltipStub, fileActions, fileList, testFileInfo;
- beforeEach(function() {
- tooltipStub = sinon.stub($.fn, 'tooltip');
- fileActions = new OCA.Files.FileActions();
- fileList = new OCA.Files.FileList($('<table></table>'), {
- fileActions: fileActions
- });
- view = new OCA.Files.MainFileInfoDetailView({
- fileList: fileList,
- fileActions: fileActions
- });
- testFileInfo = new OCA.Files.FileInfoModel({
- id: 5,
- name: 'One.txt',
- mimetype: 'text/plain',
- permissions: 31,
- path: '/subdir',
- size: 123456789,
- etag: 'abcdefg',
- mtime: Date.UTC(2015, 6, 17, 1, 2, 0, 0)
- });
- });
- afterEach(function() {
- view.remove();
- view = undefined;
- tooltipStub.restore();
- });
- describe('rendering', function() {
- it('displays basic info', function() {
- var clock = sinon.useFakeTimers(Date.UTC(2015, 6, 17, 1, 2, 0, 3));
- var dateExpected = OC.Util.formatDate(Date(Date.UTC(2015, 6, 17, 1, 2, 0, 0)));
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.fileName h3').text()).toEqual('One.txt');
- expect(view.$el.find('.fileName h3').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('seconds ago');
- expect(view.$el.find('.date').attr('title')).toEqual(dateExpected);
- clock.restore();
- });
- it('displays permalink', function() {
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.permalink').attr('href'))
- .toEqual(OC.getProtocol() + '://' + OC.getHost() + OC.generateUrl('/f/5'));
- });
- it('displays favorite icon', function() {
- fileActions.registerAction({
- name: 'Favorite',
- mime: 'all',
- permissions: OC.PERMISSION_NONE
- });
- testFileInfo.set('tags', [OC.TAG_FAVORITE]);
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(true);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(false);
- testFileInfo.set('tags', []);
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
- });
- it('does not display favorite icon if favorite action is not available', function() {
- testFileInfo.set('tags', [OC.TAG_FAVORITE]);
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.action-favorite').length).toEqual(0);
- testFileInfo.set('tags', []);
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.action-favorite').length).toEqual(0);
- });
- it('displays mime icon', function() {
- // File
- var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview');
- testFileInfo.set('mimetype', 'text/calendar');
- view.setFileInfo(testFileInfo);
- expect(lazyLoadPreviewStub.calledOnce).toEqual(true);
- var previewArgs = lazyLoadPreviewStub.getCall(0).args;
- expect(previewArgs[0].mime).toEqual('text/calendar');
- expect(previewArgs[0].path).toEqual('/subdir/One.txt');
- expect(previewArgs[0].etag).toEqual('abcdefg');
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
- // returns mime icon first without img parameter
- previewArgs[0].callback(
- OC.imagePath('core', 'filetypes/text-calendar.svg')
- );
- // still loading
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
- // preview loading failed, no prview
- previewArgs[0].error();
- // loading stopped, the mimetype icon gets displayed
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false);
- expect(view.$el.find('.thumbnail').css('background-image'))
- .toContain('filetypes/text-calendar.svg');
- // Folder
- testFileInfo.set('mimetype', 'httpd/unix-directory');
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.thumbnail').css('background-image'))
- .toContain('filetypes/folder.svg');
- lazyLoadPreviewStub.restore();
- });
- it('uses icon from model if present in model', function() {
- var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview');
- testFileInfo.set('mimetype', 'httpd/unix-directory');
- testFileInfo.set('icon', OC.MimeType.getIconUrl('dir-external'));
- view.setFileInfo(testFileInfo);
- expect(lazyLoadPreviewStub.notCalled).toEqual(true);
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false);
- expect(view.$el.find('.thumbnail').css('background-image'))
- .toContain('filetypes/folder-external.svg');
- lazyLoadPreviewStub.restore();
- });
- it('displays thumbnail', function() {
- var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview');
- testFileInfo.set('mimetype', 'text/plain');
- view.setFileInfo(testFileInfo);
- expect(lazyLoadPreviewStub.calledOnce).toEqual(true);
- var previewArgs = lazyLoadPreviewStub.getCall(0).args;
- expect(previewArgs[0].mime).toEqual('text/plain');
- expect(previewArgs[0].path).toEqual('/subdir/One.txt');
- expect(previewArgs[0].etag).toEqual('abcdefg');
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
- // returns mime icon first without img parameter
- previewArgs[0].callback(
- OC.imagePath('core', 'filetypes/text-plain.svg')
- );
- // still loading
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
- // return an actual (simulated) image
- previewArgs[0].callback(
- 'testimage', {
- width: 100,
- height: 200
- }
- );
- // loading stopped, image got displayed
- expect(view.$el.find('.thumbnail').css('background-image'))
- .toContain('testimage');
- expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false);
- lazyLoadPreviewStub.restore();
- });
- it('does not show size if no size available', function() {
- testFileInfo.unset('size');
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.size').length).toEqual(0);
- });
- it('renders displayName instead of name if available', function() {
- testFileInfo.set('displayName', 'hello.txt');
- view.setFileInfo(testFileInfo);
- expect(view.$el.find('.fileName h3').text()).toEqual('hello.txt');
- expect(view.$el.find('.fileName h3').attr('title')).toEqual('hello.txt');
- });
- it('rerenders when changes are made on the model', function() {
- // Show the "Favorite" icon
- fileActions.registerAction({
- name: 'Favorite',
- mime: 'all',
- permissions: OC.PERMISSION_NONE
- });
- view.setFileInfo(testFileInfo);
- testFileInfo.set('tags', [OC.TAG_FAVORITE]);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(true);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(false);
- testFileInfo.set('tags', []);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
- });
- it('unbinds change listener from model', function() {
- // Show the "Favorite" icon
- fileActions.registerAction({
- name: 'Favorite',
- mime: 'all',
- permissions: OC.PERMISSION_NONE
- });
- view.setFileInfo(testFileInfo);
- view.setFileInfo(new OCA.Files.FileInfoModel({
- id: 999,
- name: 'test.txt',
- path: '/'
- }));
- // set value on old model
- testFileInfo.set('tags', [OC.TAG_FAVORITE]);
- // no change
- expect(view.$el.find('.action-favorite > span').hasClass('icon-starred')).toEqual(false);
- expect(view.$el.find('.action-favorite > span').hasClass('icon-star')).toEqual(true);
- });
- });
- describe('events', function() {
- it('triggers default action when clicking on the thumbnail', function() {
- var actionHandler = sinon.stub();
- fileActions.registerAction({
- name: 'Something',
- mime: 'all',
- permissions: OC.PERMISSION_READ,
- actionHandler: actionHandler
- });
- fileActions.setDefault('text/plain', 'Something');
- view.setFileInfo(testFileInfo);
- view.$el.find('.thumbnail').click();
- expect(actionHandler.calledOnce).toEqual(true);
- expect(actionHandler.getCall(0).args[0]).toEqual('One.txt');
- expect(actionHandler.getCall(0).args[1].fileList).toEqual(fileList);
- expect(actionHandler.getCall(0).args[1].fileActions).toEqual(fileActions);
- expect(actionHandler.getCall(0).args[1].fileInfoModel).toEqual(testFileInfo);
- });
- it('triggers "Favorite" action when clicking on the star', function() {
- var actionHandler = sinon.stub();
- fileActions.registerAction({
- name: 'Favorite',
- mime: 'all',
- permissions: OC.PERMISSION_READ,
- actionHandler: actionHandler
- });
- view.setFileInfo(testFileInfo);
- view.$el.find('.action-favorite').click();
- expect(actionHandler.calledOnce).toEqual(true);
- expect(actionHandler.getCall(0).args[0]).toEqual('One.txt');
- expect(actionHandler.getCall(0).args[1].fileList).toEqual(fileList);
- expect(actionHandler.getCall(0).args[1].fileActions).toEqual(fileActions);
- expect(actionHandler.getCall(0).args[1].fileInfoModel).toEqual(testFileInfo);
- });
- });
- });
|