Merge pull request #24023 from nextcloud/dependachristoph/npm_and_yarn/jquery-3.1.0

Bump jquery from 2.2.4 to 3.1.0
This commit is contained in:
Greta 2020-11-13 14:42:46 +01:00 committed by GitHub
commit a4223b017e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 460 additions and 382 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -207,35 +207,6 @@ describe('OCA.Files.BreadCrumb tests', function() {
bc = null;
});
it('Opens and closes the menu on click', function() {
// Menu exists
expect($popovermenu.length).toEqual(1);
// Disable jQuery delay
jQuery.fx.off = true
// Click on menu
$crumbmenuLink.click();
expect($popovermenu.is(':visible')).toEqual(true);
// Click on home
$(document).mouseup();
expect($popovermenu.is(':visible')).toEqual(false);
// Change directory and reset elements
bc.setDirectory('/one/two/three/four/five/six/seven/eight/nine/ten');
$crumbmenuLink = bc.$el.find('.crumbmenu > a');
$popovermenu = $crumbmenuLink.next('.popovermenu');
// Click on menu again
$crumbmenuLink.click();
expect($popovermenu.is(':visible')).toEqual(true);
// Click on home again
$(document).mouseup();
expect($popovermenu.is(':visible')).toEqual(false);
});
it('Shows only items not in the breadcrumb', function() {
var hiddenCrumbs = bc.$el.find('.crumb:not(.crumbmenu).hidden');
expect($popovermenu.find('li:not(.in-breadcrumb)').length).toEqual(hiddenCrumbs.length);

View File

@ -58,7 +58,7 @@ describe('OCA.Files.FavoritesFileList tests', function() {
fileList.destroy();
fileList = undefined;
});
it('render files', function() {
it('render files', function(done) {
var deferred = $.Deferred();
fetchStub.returns(deferred.promise());
@ -77,6 +77,7 @@ describe('OCA.Files.FavoritesFileList tests', function() {
mimetype: 'text/plain'
}]);
setTimeout(function() {
var $rows = fileList.$el.find('tbody tr');
var $tr = $rows.eq(0);
expect($rows.length).toEqual(1);
@ -94,6 +95,9 @@ describe('OCA.Files.FavoritesFileList tests', function() {
'/remote.php/webdav/somedir/test.txt'
);
expect($tr.find('.nametext').text().trim()).toEqual('test.txt');
done();
}, 0);
});
});
});

View File

@ -123,6 +123,7 @@ describe('OC.Upload tests', function() {
});
describe('Upload conflicts', function() {
var conflictDialogStub;
var clock;
var fileList;
beforeEach(function() {
@ -162,6 +163,11 @@ describe('OC.Upload tests', function() {
deferred.resolve();
});
afterEach(function() {
if (clock) {
clock.restore();
clock = undefined
}
conflictDialogStub.restore();
fileList.destroy();
@ -210,7 +216,7 @@ describe('OC.Upload tests', function() {
expect(result[1].submit.calledOnce).toEqual(false);
expect(result[2].submit.calledOnce).toEqual(true);
done();
}, 0);
}, 10);
});
var result = addFiles(uploader, [
{name: 'conflict.txt'},
@ -251,8 +257,6 @@ describe('OC.Upload tests', function() {
uploader.onReplace(upload);
});
it('autorenames file when choosing replace in conflict mode', function(done) {
// needed for _.defer call
var clock = sinon.useFakeTimers();
var fileData = {name: 'conflict.txt'};
var uploadData = addFiles(uploader, [
fileData
@ -272,15 +276,15 @@ describe('OC.Upload tests', function() {
expect(uploadData[0].submit.calledOnce).toEqual(true);
getResponseStatusStub.returns(412);
uploader.fileUploadParam.fail.call($dummyUploader[0], {}, uploadData[0]);
clock.tick(500);
}
if(counter===2)
{
_.defer(function() {
expect(upload.getFileName()).toEqual('conflict (3).txt');
expect(uploadData[0].submit.calledTwice).toEqual(true);
clock.restore();
done();
})
}
});

View File

@ -200,15 +200,6 @@ describe('OCA.Files.FileList tests', function() {
});
});
describe('Adding files', function() {
var clock, now;
beforeEach(function() {
// to prevent date comparison issues
clock = sinon.useFakeTimers();
now = new Date();
});
afterEach(function() {
clock.restore();
});
it('generates file element with correct attributes when calling add() with file data', function() {
var fileData = new FileInfo({
id: 18,
@ -300,7 +291,6 @@ describe('OCA.Files.FileList tests', function() {
name: 'testFile.txt'
};
clock.tick(123456);
var $tr = fileList.add(fileData);
expect($tr).toBeDefined();
@ -312,7 +302,6 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-etag')).toBeUndefined();
expect($tr.attr('data-permissions')).toEqual('31');
expect($tr.attr('data-mime')).toBeUndefined();
expect($tr.attr('data-mtime')).toEqual('123456');
expect($tr.attr('data-e2eencrypted')).toEqual('false');
expect($tr.find('.filesize').text()).toEqual('Pending');
@ -323,7 +312,6 @@ describe('OCA.Files.FileList tests', function() {
type: 'dir',
name: 'testFolder'
};
clock.tick(123456);
var $tr = fileList.add(fileData);
expect($tr).toBeDefined();
@ -335,7 +323,6 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-etag')).toBeUndefined();
expect($tr.attr('data-permissions')).toEqual('31');
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('123456');
expect($tr.attr('data-e2eencrypted')).toEqual('false');
expect($tr.find('.filesize').text()).toEqual('Pending');
@ -584,7 +571,6 @@ describe('OCA.Files.FileList tests', function() {
deferredDelete1.resolve(200);
deferredDelete2.resolve(200);
return promise.then(function(){
expect(fileList.findFileEl('One.txt').length).toEqual(0);
expect(fileList.findFileEl('Two.jpg').length).toEqual(0);
expect(fileList.findFileEl('Three.pdf').length).toEqual(1);
@ -602,8 +588,7 @@ describe('OCA.Files.FileList tests', function() {
expect($('#emptycontent').hasClass('hidden')).toEqual(true);
expect(notificationStub.notCalled).toEqual(true);
done();
});
}).then(done, done);
});
it('shows busy state on files to be deleted', function(done) {
fileList.setFiles(testFiles);
@ -633,8 +618,7 @@ describe('OCA.Files.FileList tests', function() {
return promise.then(function(){
expect(fileList.findFileEl('One.txt').hasClass('busy')).toEqual(false);
expect(fileList.findFileEl('Two.jpg').hasClass('busy')).toEqual(false);
done();
});
}).then(done, done);
});
it('shows busy state on all files when deleting all', function(done) {
fileList.setFiles(testFiles);
@ -656,8 +640,7 @@ describe('OCA.Files.FileList tests', function() {
}
return promise.then(function(){
expect(count).toEqual(4);
done();
});
}).then(done, done);
});
it('updates summary when deleting last file', function(done) {
var $summary;
@ -673,8 +656,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.files.length).toEqual(0);
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
expect($('#emptycontent').hasClass('hidden')).toEqual(false);
done();
});
}).then(done, done);
});
it('bring back deleted item when delete call failed', function(done) {
fileList.setFiles(testFiles);
@ -688,8 +670,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.$fileList.find('tr').length).toEqual(4);
expect(notificationStub.calledTwice).toEqual(true);
done();
});
}).then(done, done);
});
it('remove file from list if delete call returned 404 not found', function(done) {
fileList.setFiles(testFiles);
@ -702,8 +683,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.$fileList.find('tr').length).toEqual(2);
expect(notificationStub.notCalled).toEqual(true);
done();
});
}).then(done, done);
});
});
describe('Renaming files', function() {
@ -870,7 +850,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.$fileList.find('input.filename').length).toEqual(0);
expect(fileList.$fileList.find('form').length).toEqual(0);
});
it('Restores thumbnail when rename was cancelled', function() {
it('Restores thumbnail when rename was cancelled', function(done) {
doRename();
expect(fileList.findFileEl('Tu_after_three.txt').find('.thumbnail').parent().attr('class'))
@ -878,9 +858,11 @@ describe('OCA.Files.FileList tests', function() {
deferredRename.reject(409);
return Promise.resolve().then(function() {
expect(fileList.findFileEl('One.txt').length).toEqual(1);
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
.toEqual(OC.imagePath('core', 'filetypes/text.svg'));
}).then(done, done);
});
});
describe('Moving files', function() {
@ -917,8 +899,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('262 B');
expect(notificationStub.notCalled).toEqual(true);
done();
});
}).then(done, done);
});
it('Moves list of files to target folder', function(done) {
var deferredMove1 = $.Deferred();
@ -954,8 +935,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('12 KB');
expect(notificationStub.notCalled).toEqual(true);
done();
});
}).then(done, done);
});
it('Shows notification if a file could not be moved', function(done) {
moveStub.callsFake(function(){
@ -968,8 +948,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('One.txt').length).toEqual(1);
expect(notificationStub.calledOnce).toEqual(true);
expect(notificationStub.getCall(0).args[0]).toEqual('Could not move "One.txt"');
done();
});
}).then(done, done);
});
it('Restores thumbnail if a file could not be moved', function(done) {
moveStub.callsFake(function(){
@ -986,8 +965,7 @@ describe('OCA.Files.FileList tests', function() {
expect(notificationStub.getCall(0).args[0]).toEqual('Could not move "One.txt"');
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
.toEqual(OC.imagePath('core', 'filetypes/text.svg'));
done();
});
}).then(done, done);
});
});
@ -1026,8 +1004,7 @@ describe('OCA.Files.FileList tests', function() {
// Copying sents a notification to tell that we've successfully copied file
expect(notificationStub.notCalled).toEqual(false);
done();
});
}).then(done, done);
});
it('Copies list of files to target folder', function(done) {
var deferredCopy1 = $.Deferred();
@ -1061,8 +1038,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('somedir').find('.filesize').text()).toEqual('12 KB');
expect(notificationStub.notCalled).toEqual(false);
done();
});
}).then(done, done);
});
it('Shows notification if a file could not be copied', function(done) {
copyStub.callsFake(function(){
@ -1076,8 +1052,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('One.txt').length).toEqual(1);
expect(notificationStub.calledOnce).toEqual(true);
expect(notificationStub.getCall(0).args[0]).toEqual('Could not copy "One.txt"');
done();
});
}).then(done, done);
});
it('Restores thumbnail if a file could not be copied', function(done) {
copyStub.callsFake(function(){
@ -1097,8 +1072,7 @@ describe('OCA.Files.FileList tests', function() {
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
.toEqual(OC.imagePath('core', 'filetypes/text.svg'));
done();
});
}).then(done, done);
});
});
@ -1677,13 +1651,15 @@ describe('OCA.Files.FileList tests', function() {
afterEach(function() {
getFolderContentsStub.restore();
});
it('fetches file list from server and renders it when reload() is called', function() {
fileList.reload();
it('fetches file list from server and renders it when reload() is called', function(done) {
var reloading = fileList.reload();
expect(getFolderContentsStub.calledOnce).toEqual(true);
expect(getFolderContentsStub.calledWith('/subdir')).toEqual(true);
deferredList.resolve(200, [testRoot].concat(testFiles));
return reloading.then(function() {
expect($('#fileList tr').length).toEqual(4);
expect(fileList.findFileEl('One.txt').length).toEqual(1);
}).then(done, done);
});
it('switches dir and fetches file list when calling changeDirectory()', function() {
fileList.changeDirectory('/anothersubdir');
@ -1724,59 +1700,91 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.getCurrentDirectory()).toEqual(path);
});
});
it('switches to root dir when current directory does not exist', function() {
fileList.changeDirectory('/unexist');
it('switches to root dir when current directory does not exist', function(done) {
var changing = fileList.changeDirectory('/unexist');
deferredList.reject(404);
return changing.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
}).then(done, done);
});
it('switches to root dir when current directory returns 400', function() {
fileList.changeDirectory('/unexist');
it('switches to root dir when current directory returns 400', function(done) {
var changing = fileList.changeDirectory('/unexist');
deferredList.reject(400);
return changing.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
}).then(done, done);
});
it('switches to root dir when current directory returns 405', function() {
fileList.changeDirectory('/unexist');
it('switches to root dir when current directory returns 405', function(done) {
var changing = fileList.changeDirectory('/unexist');
deferredList.reject(405);
return changing.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
}).then(done, done);
});
it('switches to root dir when current directory is forbidden', function() {
fileList.changeDirectory('/unexist');
it('switches to root dir when current directory is forbidden', function(done) {
var changing = fileList.changeDirectory('/unexist');
deferredList.reject(403);
return changing.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
}).then(done, done);
});
it('switches to root dir when current directory is unavailable', function() {
fileList.changeDirectory('/unexist');
it('switches to root dir when current directory is unavailable', function(done) {
var changing = fileList.changeDirectory('/unexist');
deferredList.reject(500);
return changing.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
}).then(done, done);
});
it('shows mask before loading file list then hides it at the end', function() {
it('shows mask before loading file list then hides it at the end', function(done) {
var showMaskStub = sinon.stub(fileList, 'showMask');
var hideMaskStub = sinon.stub(fileList, 'hideMask');
fileList.changeDirectory('/anothersubdir');
var changing = fileList.changeDirectory('/anothersubdir');
expect(showMaskStub.calledOnce).toEqual(true);
expect(hideMaskStub.calledOnce).toEqual(false);
deferredList.resolve(200, [testRoot].concat(testFiles));
return changing.then(function() {
expect(showMaskStub.calledOnce).toEqual(true);
expect(hideMaskStub.calledOnce).toEqual(true);
showMaskStub.restore();
hideMaskStub.restore();
}).then(done, done);
});
it('triggers "changeDirectory" event when changing directory', function() {
it('triggers "changeDirectory" event when changing directory', function(done) {
var handler = sinon.stub();
$('#app-content-files').on('changeDirectory', handler);
fileList.changeDirectory('/somedir');
var changing = fileList.changeDirectory('/somedir');
deferredList.resolve(200, [testRoot].concat(testFiles));
return changing.then(function() {
expect(handler.calledOnce).toEqual(true);
expect(handler.getCall(0).args[0].dir).toEqual('/somedir');
}).then(done, done);
});
it('triggers "afterChangeDirectory" event with fileid after changing directory', function() {
it('triggers "afterChangeDirectory" event with fileid after changing directory', function(done) {
var handler = sinon.stub();
$('#app-content-files').on('afterChangeDirectory', handler);
fileList.changeDirectory('/somedir');
var changing = fileList.changeDirectory('/somedir');
deferredList.resolve(200, [testRoot].concat(testFiles));
return changing.then(function() {
expect(handler.calledOnce).toEqual(true);
expect(handler.getCall(0).args[0].dir).toEqual('/somedir');
expect(handler.getCall(0).args[0].fileId).toEqual(99);
}).then(done, done);
});
it('changes the directory when receiving "urlChanged" event', function() {
$('#app-content-files').trigger(new $.Event('urlChanged', {view: 'files', dir: '/somedir'}));
@ -1843,10 +1851,9 @@ describe('OCA.Files.FileList tests', function() {
expect(changeDirStub.getCall(0).args[0]).toEqual('/subdir/two/three with space');
changeDirStub.restore();
});
it('dropping files on breadcrumb calls move operation', function(done) {
it('dropping files on breadcrumb calls move operation', function() {
var testDir = '/subdir/two/three with space/four/five';
var moveStub = sinon.stub(filesClient, 'move');
var resolve1, resolve2;
var deferredMove1 = $.Deferred();
var deferredMove2 = $.Deferred();
moveStub.onCall(0).returns(deferredMove1.promise());
@ -1873,7 +1880,6 @@ describe('OCA.Files.FileList tests', function() {
expect(moveStub.getCall(1).args[0]).toEqual(testDir + '/Two.jpg');
expect(moveStub.getCall(1).args[1]).toEqual('/subdir/two/three with space/Two.jpg');
moveStub.restore();
done();
});
deferredMove1.resolve(201);
deferredMove2.resolve(201);
@ -2362,7 +2368,6 @@ describe('OCA.Files.FileList tests', function() {
$('.selectedActions .filesSelectMenu .delete').click();
deferredDelete.resolve(204);
return deferred.promise();
});
it('Deletes all files when all selected when "Delete" clicked', function(done) {
var deferred = $.Deferred();
@ -2811,8 +2816,8 @@ describe('OCA.Files.FileList tests', function() {
getFileInfoStub.restore();
});
it('creates file with given name and adds it to the list', function() {
fileList.createFile('test.txt');
it('creates file with given name and adds it to the list', function(done) {
var creating = fileList.createFile('test.txt');
expect(createStub.calledOnce).toEqual(true);
expect(createStub.getCall(0).args[0]).toEqual('/subdir/test.txt');
@ -2835,9 +2840,11 @@ describe('OCA.Files.FileList tests', function() {
})
);
return creating.then(function() {
var $tr = fileList.findFileEl('test.txt');
expect($tr.length).toEqual(1);
expect($tr.attr('data-mime')).toEqual('text/plain');
}).then(done, done);
});
// TODO: error cases
// TODO: unique name cases
@ -2861,8 +2868,8 @@ describe('OCA.Files.FileList tests', function() {
getFileInfoStub.restore();
});
it('creates folder with given name and adds it to the list', function() {
fileList.createDirectory('sub dir');
it('creates folder with given name and adds it to the list', function(done) {
var creating = fileList.createDirectory('sub dir');
expect(createStub.calledOnce).toEqual(true);
expect(createStub.getCall(0).args[0]).toEqual('/subdir/sub dir');
@ -2881,9 +2888,11 @@ describe('OCA.Files.FileList tests', function() {
})
);
return creating.then(function() {
var $tr = fileList.findFileEl('sub dir');
expect($tr.length).toEqual(1);
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
}).then(done, done);
});
// TODO: error cases
// TODO: unique name cases
@ -2906,21 +2915,27 @@ describe('OCA.Files.FileList tests', function() {
expect(promise.state()).toEqual('resolved');
});
it('fetches info when folder is the current one', function() {
it('fetches info when folder is the current one', function(done) {
fileList.addAndFetchFileInfo('testfile.txt', '/subdir');
return Promise.resolve().then(function() {
expect(getFileInfoStub.calledOnce).toEqual(true);
expect(getFileInfoStub.getCall(0).args[0]).toEqual('/subdir/testfile.txt');
}).then(done, done);
});
it('adds file data to list when fetching is done', function() {
fileList.addAndFetchFileInfo('testfile.txt', '/subdir');
it('adds file data to list when fetching is done', function(done) {
var adding = fileList.addAndFetchFileInfo('testfile.txt', '/subdir');
getFileInfoDeferred.resolve(200, {
name: 'testfile.txt',
size: 100
});
return adding.then(function() {
expect(fileList.findFileEl('testfile.txt').attr('data-size')).toEqual('100');
}).then(done, done);
});
it('replaces file data to list when fetching is done', function() {
fileList.addAndFetchFileInfo('testfile.txt', '/subdir', {replace: true});
it('replaces file data to list when fetching is done', function(done) {
var adding = fileList.addAndFetchFileInfo('testfile.txt', '/subdir', {replace: true});
fileList.add({
name: 'testfile.txt',
size: 95
@ -2929,20 +2944,24 @@ describe('OCA.Files.FileList tests', function() {
name: 'testfile.txt',
size: 100
});
expect(fileList.findFileEl('testfile.txt').attr('data-size')).toEqual('95');
return adding.then(function() {
expect(fileList.findFileEl('testfile.txt').attr('data-size')).toEqual('100');
}).then(done, done);
});
it('resolves promise with file data when fetching is done', function() {
it('resolves promise with file data when fetching is done', function(done) {
var promise = fileList.addAndFetchFileInfo('testfile.txt', '/subdir', {replace: true});
getFileInfoDeferred.resolve(200, {
name: 'testfile.txt',
size: 100
});
expect(promise.state()).toEqual('pending');
return promise.then(function(status, data) {
expect(promise.state()).toEqual('resolved');
promise.then(function(status, data) {
expect(status).toEqual(200);
expect(data.name).toEqual('testfile.txt');
expect(data.size).toEqual(100);
});
}).then(done, done);
});
});
/**
@ -3018,7 +3037,6 @@ describe('OCA.Files.FileList tests', function() {
uploader.trigger('drop', eventData, data || {});
return !!data.targetDir;
}
it('drop on a tr or crumb outside file list does not trigger upload', function() {
var $anotherTable = $('<table><tbody><tr><td>outside<div class="crumb">crumb</div></td></tr></table>');
var ev;
@ -3167,7 +3185,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fetchInfoStub.getCall(0).args[0]).toEqual('upload.txt');
expect(fetchInfoStub.getCall(0).args[1]).toEqual('/subdir');
});
it('highlights all uploaded files after all fetches are done', function() {
it('highlights all uploaded files after all fetches are done', function(done) {
var highlightStub = sinon.stub(fileList, 'highlightFiles');
var def1 = addFile(createUpload('upload.txt', '/subdir'));
var def2 = addFile(createUpload('upload2.txt', '/subdir'));
@ -3179,12 +3197,16 @@ describe('OCA.Files.FileList tests', function() {
expect(highlightStub.notCalled).toEqual(true);
def2.resolve();
def3.resolve();
expect(highlightStub.calledOnce).toEqual(true);
setTimeout(function() {
expect(highlightStub.callCount).toEqual(1);
expect(highlightStub.getCall(0).args[0]).toEqual(['upload.txt', 'upload2.txt']);
highlightStub.restore();
done();
}, 5);
});
it('queries storage stats after all fetches are done', function() {
it('queries storage stats after all fetches are done', function(done) {
var statStub = sinon.stub(fileList, 'updateStorageStatistics');
var highlightStub = sinon.stub(fileList, 'highlightFiles');
var def1 = addFile(createUpload('upload.txt', '/subdir'));
@ -3197,15 +3219,20 @@ describe('OCA.Files.FileList tests', function() {
expect(statStub.notCalled).toEqual(true);
def2.resolve();
def3.resolve();
setTimeout(function() {
expect(statStub.calledOnce).toEqual(true);
highlightStub.restore();
done();
}, 3);
});
});
});
describe('Handling errors', function () {
var deferredList;
var getFolderContentsStub;
var reloading;
beforeEach(function() {
deferredList = $.Deferred();
@ -3213,33 +3240,39 @@ describe('OCA.Files.FileList tests', function() {
sinon.stub(filesClient, 'getFolderContents');
getFolderContentsStub.onCall(0).returns(deferredList.promise());
getFolderContentsStub.onCall(1).returns($.Deferred().promise());
fileList.reload();
reloading = fileList.reload();
});
afterEach(function() {
getFolderContentsStub.restore();
fileList = undefined;
});
it('redirects to root folder in case of forbidden access', function () {
it('redirects to root folder in case of forbidden access', function (done) {
deferredList.reject(403);
return reloading.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
expect(getFolderContentsStub.calledTwice).toEqual(true);
}).then(done, done);
});
it('redirects to root folder and shows notification in case of internal server error', function () {
it('redirects to root folder and shows notification in case of internal server error', function (done) {
expect(notificationStub.notCalled).toEqual(true);
deferredList.reject(500);
return reloading.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
expect(getFolderContentsStub.calledTwice).toEqual(true);
expect(notificationStub.calledOnce).toEqual(true);
}).then(done, done);
});
it('redirects to root folder and shows notification in case of storage not available', function () {
it('redirects to root folder and shows notification in case of storage not available', function (done) {
expect(notificationStub.notCalled).toEqual(true);
deferredList.reject(503, 'Storage is temporarily not available');
return reloading.then(function() {
expect(fileList.getCurrentDirectory()).toEqual('/');
expect(getFolderContentsStub.calledTwice).toEqual(true);
expect(notificationStub.calledOnce).toEqual(true);
}).then(done, done);
});
});
describe('showFileBusyState', function() {
@ -3255,7 +3288,6 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.find('.thumbnail').parent().attr('class'))
.toContain('icon-loading-small');
fileList.showFileBusyState('Two.jpg', false);
expect($tr.hasClass('busy')).toEqual(false);
expect(OC.TestUtil.getImageUrl($tr.find('.thumbnail')))

View File

@ -73,7 +73,7 @@ describe('OCA.Files.TagsPlugin tests', function() {
});
});
describe('Applying tags', function() {
it('through FileActionsMenu sends request to server and updates icon', function() {
it('through FileActionsMenu sends request to server and updates icon', function(done) {
var request;
fileList.setFiles(testFiles);
var $tr = fileList.findFileEl('One.txt');
@ -92,6 +92,7 @@ describe('OCA.Files.TagsPlugin tests', function() {
tags: ['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]
}));
setTimeout(function () {
// re-read the element as it was re-inserted
$tr = fileList.findFileEl('One.txt');
$favoriteMark = $tr.find('.favorite-mark');
@ -110,15 +111,18 @@ describe('OCA.Files.TagsPlugin tests', function() {
$favoriteActionInMenu = $tr.find('.fileActionsMenu .action-favorite');
$favoriteActionInMenu.click();
setTimeout(function() {
expect(fakeServer.requests.length).toEqual(2);
request = fakeServer.requests[1];
expect(JSON.parse(request.requestBody)).toEqual({
tags: ['tag1', 'tag2', 'tag3']
});
request.respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
tags: ['tag1', 'tag2', 'tag3']
}));
setTimeout(function() {
// re-read the element as it was re-inserted
$tr = fileList.findFileEl('One.txt');
$favoriteMark = $tr.find('.favorite-mark');
@ -128,6 +132,11 @@ describe('OCA.Files.TagsPlugin tests', function() {
expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3']);
expect($favoriteMark.find('.icon').hasClass('icon-star')).toEqual(true);
expect($favoriteMark.find('.icon').hasClass('icon-starred')).toEqual(false);
done();
}, 1);
}, 1);
}, 1);
});
});
describe('elementToFile', function() {

View File

@ -60,13 +60,14 @@ describe('OCA.Files_External.FileList tests', function() {
describe('loading file list for external storages', function() {
var ocsResponse;
var reloading;
beforeEach(function() {
fileList = new OCA.Files_External.FileList(
$('#app-content-container')
);
fileList.reload();
reloading = fileList.reload();
/* jshint camelcase: false */
ocsResponse = {
@ -94,7 +95,7 @@ describe('OCA.Files_External.FileList tests', function() {
}
};
});
it('render storage list', function() {
it('render storage list', function(done) {
var request;
var $rows;
var $tr;
@ -112,6 +113,7 @@ describe('OCA.Files_External.FileList tests', function() {
JSON.stringify(ocsResponse)
);
return reloading.then(function() {
$rows = fileList.$el.find('tbody tr');
expect($rows.length).toEqual(2);
@ -146,7 +148,7 @@ describe('OCA.Files_External.FileList tests', function() {
expect($tr.find('.nametext').text().trim()).toEqual('smb mount');
expect($tr.find('.column-scope > span').text().trim()).toEqual('Personal');
expect($tr.find('.column-backend').text().trim()).toEqual('SMB');
}).then(done, done);
});
});
});

View File

@ -316,7 +316,7 @@ describe('OCA.Trashbin.FileList tests', function () {
expect($('.selectedActions .item-delete').is(':visible')).toEqual(false);
expect($('.selectedActions .item-restore').is(':visible')).toEqual(false);
});
it('Deletes selected files when "Delete" clicked', function () {
it('Deletes selected files when "Delete" clicked', function (done) {
var request;
var promise = fileList._onClickDeleteSelected({
preventDefault: function () {
@ -334,9 +334,9 @@ describe('OCA.Trashbin.FileList tests', function () {
expect(fileList.findFileEl('Three.pdf.d33333').length).toEqual(0);
expect(fileList.findFileEl('somedir.d99999').length).toEqual(0);
expect(fileList.findFileEl('Two.jpg.d22222').length).toEqual(1);
}).then(done, done);
});
});
it('Deletes all files when all selected when "Delete" clicked', function () {
it('Deletes all files when all selected when "Delete" clicked', function (done) {
var request;
$('.select-all').click();
var promise = fileList._onClickDeleteSelected({
@ -349,11 +349,11 @@ describe('OCA.Trashbin.FileList tests', function () {
request.respond(200);
return promise.then(function () {
expect(fileList.isEmpty).toEqual(true);
});
}).then(done, done);
});
});
describe('Restore', function () {
it('Restores selected files when "Restore" clicked', function () {
it('Restores selected files when "Restore" clicked', function (done) {
var request;
var promise = fileList._onClickRestoreSelected({
preventDefault: function () {
@ -372,9 +372,9 @@ describe('OCA.Trashbin.FileList tests', function () {
expect(fileList.findFileEl('Three.pdf.d33333').length).toEqual(0);
expect(fileList.findFileEl('somedir.d99999').length).toEqual(0);
expect(fileList.findFileEl('Two.jpg.d22222').length).toEqual(1);
}).then(done, done);
});
});
it('Restores all files when all selected when "Restore" clicked', function () {
it('Restores all files when all selected when "Restore" clicked', function (done) {
var request;
$('.select-all').click();
var promise = fileList._onClickRestoreSelected({
@ -391,7 +391,7 @@ describe('OCA.Trashbin.FileList tests', function () {
}
return promise.then(function() {
expect(fileList.isEmpty).toEqual(true);
});
}).then(done, done);
});
});
});

View File

@ -167,14 +167,14 @@ describe('OCA.SystemTags.FileList tests', function() {
expect(getFilteredFilesSpec.notCalled).toEqual(true);
});
it('render files', function() {
it('render files', function(done) {
fileList = new OCA.SystemTags.FileList(
$('#app-content-container'), {
systemTagIds: ['123', '456']
}
);
fileList.reload();
var reloading = fileList.reload();
expect(getFilteredFilesSpec.calledOnce).toEqual(true);
expect(getFilteredFilesSpec.lastCall.args[0].systemTagIds).toEqual(['123', '456']);
@ -219,8 +219,10 @@ describe('OCA.SystemTags.FileList tests', function() {
requestDeferred.resolve(207, testFiles);
return reloading.then(function() {
expect(fileList.$el.find('#emptycontent').hasClass('hidden')).toEqual(true);
expect(fileList.$el.find('tbody>tr').length).toEqual(4);
}).then(done, done);
});
});
});

View File

@ -243,7 +243,6 @@ describe('OCA.SystemTags.SystemTagsInfoView tests', function() {
view.openDropdown();
expect(select2Stub.calledOnce).toBeTruthy();
expect(select2Stub.thisValues[0].selector).toEqual('.systemTagsInputField');
expect(select2Stub.withArgs('open')).toBeTruthy();
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -243,13 +243,13 @@ describe('Contacts menu', function() {
// Open the first one
$menuEl.find('.contact').eq(0).find('.other-actions').click();
expect($menuEl.find('.contact').eq(0).find('.menu').css('display')).toBe('block');
expect($menuEl.find('.contact').eq(0).find('.menu').css('display')).toBe('');
expect($menuEl.find('.contact').eq(1).find('.menu').css('display')).toBe('none');
// Open the second one
$menuEl.find('.contact').eq(1).find('.other-actions').click();
expect($menuEl.find('.contact').eq(0).find('.menu').css('display')).toBe('none');
expect($menuEl.find('.contact').eq(1).find('.menu').css('display')).toBe('block');
expect($menuEl.find('.contact').eq(1).find('.menu').css('display')).toBe('');
// Close the second one
$menuEl.find('.contact').eq(1).find('.other-actions').click();

View File

@ -22,7 +22,9 @@ describe('jquery.contactsMenu tests', function() {
});
afterEach(function() {
$selector1.off();
$selector1.remove();
$selector2.off();
$selector2.remove();
$appendTo.remove();
});
@ -100,10 +102,12 @@ describe('jquery.contactsMenu tests', function() {
});
describe('send requests to the server and render', function() {
it('load a topaction only', function() {
it('load a topaction only', function(done) {
$('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
$selector1.click();
expect(fakeServer.requests[0].method).toEqual('POST');
expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
fakeServer.requests[0].respond(
200,
{ 'Content-Type': 'application/json; charset=utf-8' },
@ -117,13 +121,15 @@ describe('jquery.contactsMenu tests', function() {
"actions": []
})
);
expect(fakeServer.requests[0].method).toEqual('POST');
expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
$selector1.on('load', function() {
expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="mailto:bar%40baz.wtf"><img src="foo.svg"><span>bar@baz.wtf</span></a></li></ul></div>');
done();
});
});
it('load topaction and more actions', function() {
it('load topaction and more actions', function(done) {
$('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
$selector1.click();
@ -147,10 +153,14 @@ describe('jquery.contactsMenu tests', function() {
expect(fakeServer.requests[0].method).toEqual('POST');
expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
$selector1.on('load', function() {
expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="mailto:bar%40baz.wtf"><img src="foo.svg"><span>bar@baz.wtf</span></a></li><li><a href="http://localhost/index.php/apps/contacts"><img src="details.svg"><span>Details</span></a></li></ul></div>');
done();
});
});
it('load no actions', function() {
it('load no actions', function(done) {
$('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
$selector1.click();
@ -167,10 +177,14 @@ describe('jquery.contactsMenu tests', function() {
expect(fakeServer.requests[0].method).toEqual('POST');
expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
$selector1.on('load', function() {
expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="#"><span>No action available</span></a></li></ul></div>');
done();
});
});
it('should throw an error', function() {
it('should throw an error', function(done) {
$('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
$selector1.click();
@ -182,10 +196,14 @@ describe('jquery.contactsMenu tests', function() {
expect(fakeServer.requests[0].method).toEqual('POST');
expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
$selector1.on('loaderror', function() {
expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="#"><span>Error fetching contact actions</span></a></li></ul></div>');
done();
});
});
it('should handle 404', function() {
it('should handle 404', function(done) {
$('#selector1, #selector2').contactsMenu('user', 0, $appendTo);
$selector1.click();
@ -197,7 +215,10 @@ describe('jquery.contactsMenu tests', function() {
expect(fakeServer.requests[0].method).toEqual('POST');
expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne');
$selector1.on('loaderror', function() {
expect($appendTo.html().replace(/[\r\n\t]?(\ \ +)?/g, '')).toEqual('<div class="menu popovermenu menu-left contactsmenu-popover loaded" style="display: block;"><ul><li class="hidden"><a><span class="icon-loading-small"></span></a></li><li><a href="#"><span>No action available</span></a></li></ul></div>');
done();
});
});
@ -211,3 +232,4 @@ describe('jquery.contactsMenu tests', function() {
expect($appendTo.find('div').hasClass('hidden')).toEqual(true);
});
});
});

View File

@ -110,18 +110,30 @@ describe('OC.L10N tests', function() {
});
});
describe('async loading of translations', function() {
it('loads bundle for given app and calls callback', function() {
it('loads bundle for given app and calls callback', function(done) {
var localeStub = sinon.stub(OC, 'getLocale').returns('zh_CN');
var callbackStub = sinon.stub();
var promiseStub = sinon.stub();
OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
var loading = OC.L10N.load(TEST_APP, callbackStub);
expect(callbackStub.notCalled).toEqual(true);
expect(promiseStub.notCalled).toEqual(true);
expect(fakeServer.requests.length).toEqual(1);
var req = fakeServer.requests[0];
loading
.then(promiseStub)
.then(function() {
expect(fakeServer.requests.length).toEqual(1);
expect(req.url).toEqual(
OC.getRootPath() + '/apps3/' + TEST_APP + '/l10n/zh_CN.json'
);
expect(callbackStub.calledOnce).toEqual(true);
expect(promiseStub.calledOnce).toEqual(true);
expect(t(TEST_APP, 'Hello world!')).toEqual('你好世界!');
localeStub.restore();
})
.then(done);
expect(promiseStub.notCalled).toEqual(true);
req.respond(
200,
{ 'Content-Type': 'application/json' },
@ -130,32 +142,30 @@ describe('OC.L10N tests', function() {
pluralForm: 'nplurals=2; plural=(n != 1);'
})
);
expect(callbackStub.calledOnce).toEqual(true);
expect(promiseStub.calledOnce).toEqual(true);
expect(t(TEST_APP, 'Hello world!')).toEqual('你好世界!');
localeStub.restore();
});
it('calls callback if translation already available', function() {
var promiseStub = sinon.stub();
it('calls callback if translation already available', function(done) {
var callbackStub = sinon.stub();
spyOn(console, 'warn');
OC.L10N.register(TEST_APP, {
'Hello world!': 'Hallo Welt!'
});
OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
OC.L10N.load(TEST_APP, callbackStub)
.then(function() {
expect(callbackStub.calledOnce).toEqual(true);
expect(promiseStub.calledOnce).toEqual(true);
expect(fakeServer.requests.length).toEqual(0);
})
.then(done);
});
it('calls callback if locale is en', function() {
var localeStub = sinon.stub(OC, 'getLocale').returns('en');
var promiseStub = sinon.stub();
it('calls callback if locale is en', function(done) {
var callbackStub = sinon.stub();
OC.L10N.load(TEST_APP, callbackStub).then(promiseStub);
OC.L10N.load(TEST_APP, callbackStub)
.then(function() {
expect(callbackStub.calledOnce).toEqual(true);
expect(promiseStub.calledOnce).toEqual(true);
expect(fakeServer.requests.length).toEqual(0);
})
.then(done)
.catch(done);
});
});
});

View File

@ -71,7 +71,7 @@ describe('Backbone Webdav extension', function() {
});
});
it('makes a POST request to create model into collection', function() {
it('makes a POST request to create model into collection', function(done) {
var collection = new TestCollection();
var model = collection.create({
firstName: 'Hello',
@ -104,10 +104,14 @@ describe('Backbone Webdav extension', function() {
}
});
setTimeout(function() {
expect(model.id).toEqual('123');
done();
}, 0)
});
it('uses PROPFIND to retrieve collection', function() {
it('uses PROPFIND to retrieve collection', function(done) {
var successStub = sinon.stub();
var errorStub = sinon.stub();
var collection = new TestCollection();
@ -164,6 +168,7 @@ describe('Backbone Webdav extension', function() {
]
});
setTimeout(function() {
expect(collection.length).toEqual(2);
var model = collection.get('123');
@ -178,9 +183,12 @@ describe('Backbone Webdav extension', function() {
expect(successStub.calledOnce).toEqual(true);
expect(errorStub.notCalled).toEqual(true);
done();
}, 0)
});
function testMethodError(doCall) {
function testMethodError(doCall, done) {
var successStub = sinon.stub();
var errorStub = sinon.stub();
@ -191,20 +199,24 @@ describe('Backbone Webdav extension', function() {
body: ''
});
setTimeout(function() {
expect(successStub.notCalled).toEqual(true);
expect(errorStub.calledOnce).toEqual(true);
done();
}, 0)
}
it('calls error handler if error status in PROPFIND response', function() {
it('calls error handler if error status in PROPFIND response', function(done) {
testMethodError(function(success, error) {
var collection = new TestCollection();
collection.fetch({
success: success,
error: error
});
}, done);
});
});
it('calls error handler if error status in POST response', function() {
it('calls error handler if error status in POST response', function(done) {
testMethodError(function(success, error) {
var collection = new TestCollection();
collection.create({
@ -214,7 +226,7 @@ describe('Backbone Webdav extension', function() {
success: success,
error: error
});
});
}, done);
});
});
describe('models', function() {
@ -281,7 +293,7 @@ describe('Backbone Webdav extension', function() {
expect(model.get('married')).toEqual(true);
});
it('uses PROPFIND to fetch single model', function() {
it('uses PROPFIND to fetch single model', function(done) {
var model = new TestModel({
id: '123'
});
@ -319,11 +331,15 @@ describe('Backbone Webdav extension', function() {
}
});
setTimeout(function() {
expect(model.id).toEqual('123');
expect(model.get('firstName')).toEqual('Hello');
expect(model.get('lastName')).toEqual('World');
expect(model.get('age')).toEqual(35);
expect(model.get('married')).toEqual(true);
done();
});
});
it('makes a DELETE request to destroy model', function() {
var model = new TestModel({
@ -350,7 +366,7 @@ describe('Backbone Webdav extension', function() {
});
});
function testMethodError(doCall) {
function testMethodError(doCall, done) {
var successStub = sinon.stub();
var errorStub = sinon.stub();
@ -361,20 +377,24 @@ describe('Backbone Webdav extension', function() {
body: ''
});
setTimeout(function() {
expect(successStub.notCalled).toEqual(true);
expect(errorStub.calledOnce).toEqual(true);
done();
});
}
it('calls error handler if error status in PROPFIND response', function() {
it('calls error handler if error status in PROPFIND response', function(done) {
testMethodError(function(success, error) {
var model = new TestModel();
model.fetch({
success: success,
error: error
});
}, done);
});
});
it('calls error handler if error status in PROPPATCH response', function() {
it('calls error handler if error status in PROPPATCH response', function(done) {
testMethodError(function(success, error) {
var model = new TestModel();
model.save({
@ -383,7 +403,7 @@ describe('Backbone Webdav extension', function() {
success: success,
error: error
});
});
}, done);
});
});
});

View File

@ -1114,7 +1114,8 @@ describe('OC.SetupChecks tests', function() {
{
'Content-Type': 'application/json',
'Strict-Transport-Security': 'max-age=15768000'
}
},
'{}'
);
async.done(function( data, s, x ){

View File

@ -328,7 +328,7 @@ export default L10n
*
* @returns {String} locale string
*/
export const getLocale = () => $('html').data('locale')
export const getLocale = () => $('html').data('locale') ?? 'en'
/**
* Returns the user's language

View File

@ -82,9 +82,10 @@ $.fn.contactsMenu = function(shareWith, shareType, appendTo) {
}
actions.forEach(function(action) {
const template = entryTemplate
$list.find('ul').append(template(action))
$list.find('ul').append(entryTemplate(action))
})
$div.trigger('load')
}, function(jqXHR) {
$list.find('ul').find('li').addClass('hidden')
@ -95,11 +96,12 @@ $.fn.contactsMenu = function(shareWith, shareType, appendTo) {
title = t('core', 'Error fetching contact actions')
}
const template = entryTemplate
$list.find('ul').append(template({
$list.find('ul').append(entryTemplate({
hyperlink: '#',
title,
}))
$div.trigger('loaderror', jqXHR)
})
})

12
package-lock.json generated
View File

@ -6733,14 +6733,14 @@
"integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ="
},
"jquery": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
"integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI="
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.1.1.tgz",
"integrity": "sha1-NHwcIcfgBBFeCk2jLOzgQfrTyKM="
},
"jquery-migrate": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-1.4.1.tgz",
"integrity": "sha1-hRUvPsmalWJfT30Lz2LpuGOPWnY="
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.1.0.tgz",
"integrity": "sha512-u/MtE1ST2pCr3rCyouJG2xMiw/k3OzLNeRKprjKTeHUezCGr0DyEgeXFdqFLmQfxfR5EsVu+mGo/sCcYdiYcIQ=="
},
"jquery-ui": {
"version": "1.12.1",

View File

@ -55,8 +55,8 @@
"escape-html": "^1.0.3",
"handlebars": "^4.7.6",
"jcrop": "git+https://github.com/ChristophWurst/Jcrop.git#v0.9.12-npm3",
"jquery": "2.2.4",
"jquery-migrate": "^1.4.1",
"jquery": "~3.1",
"jquery-migrate": "~3.1",
"jquery-ui": "^1.12.1",
"jquery-ui-dist": "^1.12.1",
"jstimezonedetect": "^1.0.7",