Fix file action download spinner
This commit is contained in:
parent
73d9699be9
commit
80cf4e84e3
4 changed files with 101 additions and 3 deletions
|
@ -589,7 +589,7 @@
|
|||
context.fileList.showFileBusyState(filename, false);
|
||||
};
|
||||
|
||||
context.fileList.showFileBusyState(downloadFileaction, true);
|
||||
context.fileList.showFileBusyState(filename, true);
|
||||
OCA.Files.Files.handleDownload(url, disableLoadingState);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -295,7 +295,12 @@
|
|||
}
|
||||
};
|
||||
|
||||
OC.redirect(url + '&downloadStartSecret=' + randomToken);
|
||||
if (url.indexOf('?') >= 0) {
|
||||
url += '&';
|
||||
} else {
|
||||
url += '?';
|
||||
}
|
||||
OC.redirect(url + 'downloadStartSecret=' + randomToken);
|
||||
OC.Util.waitFor(checkForDownloadCookie, 500);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -227,7 +227,7 @@ describe('OCA.Files.FileActions tests', function() {
|
|||
name: 'Test',
|
||||
type: OCA.Files.FileActions.TYPE_INLINE,
|
||||
mime: 'all',
|
||||
icon: OC.imagePath('core', 'actions/test'),
|
||||
icon: OC.imagePath('core', 'actions/test'),
|
||||
permissions: OC.PERMISSION_READ,
|
||||
actionHandler: actionStub
|
||||
});
|
||||
|
@ -556,4 +556,45 @@ describe('OCA.Files.FileActions tests', function() {
|
|||
expect(handler.notCalled).toEqual(true);
|
||||
});
|
||||
});
|
||||
describe('default actions', function() {
|
||||
describe('download', function() {
|
||||
it('redirects to URL and sets busy state to list', function() {
|
||||
var handleDownloadStub = sinon.stub(OCA.Files.Files, 'handleDownload');
|
||||
var busyStub = sinon.stub(fileList, 'showFileBusyState');
|
||||
var fileData = {
|
||||
id: 18,
|
||||
type: 'file',
|
||||
name: 'testName.txt',
|
||||
mimetype: 'text/plain',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456',
|
||||
permissions: OC.PERMISSION_READ | OC.PERMISSION_UPDATE
|
||||
};
|
||||
|
||||
// note: FileActions.display() is called implicitly
|
||||
fileList.add(fileData);
|
||||
|
||||
var model = fileList.getModelForFile('testName.txt');
|
||||
|
||||
fileActions.registerDefaultActions();
|
||||
fileActions.triggerAction('Download', model, fileList);
|
||||
|
||||
expect(busyStub.calledOnce).toEqual(true);
|
||||
expect(busyStub.calledWith('testName.txt', true)).toEqual(true);
|
||||
expect(handleDownloadStub.calledOnce).toEqual(true);
|
||||
expect(handleDownloadStub.getCall(0).args[0]).toEqual(
|
||||
OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=testName.txt'
|
||||
);
|
||||
busyStub.reset();
|
||||
handleDownloadStub.yield();
|
||||
|
||||
expect(busyStub.calledOnce).toEqual(true);
|
||||
expect(busyStub.calledWith('testName.txt', false)).toEqual(true);
|
||||
|
||||
busyStub.restore();
|
||||
handleDownloadStub.restore();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -87,4 +87,56 @@ describe('OCA.Files.Files tests', function() {
|
|||
expect(url).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22test%20file.txt%22%2C%22abc.txt%22%5D');
|
||||
});
|
||||
});
|
||||
describe('handleDownload', function() {
|
||||
var redirectStub;
|
||||
var cookieStub;
|
||||
var clock;
|
||||
var testUrl;
|
||||
|
||||
beforeEach(function() {
|
||||
testUrl = 'http://example.com/owncloud/path/download.php';
|
||||
redirectStub = sinon.stub(OC, 'redirect');
|
||||
cookieStub = sinon.stub(OC.Util, 'isCookieSetToValue');
|
||||
clock = sinon.useFakeTimers();
|
||||
});
|
||||
afterEach(function() {
|
||||
redirectStub.restore();
|
||||
cookieStub.restore();
|
||||
clock.restore();
|
||||
});
|
||||
|
||||
it('appends secret to url when no existing parameters', function() {
|
||||
Files.handleDownload(testUrl);
|
||||
expect(redirectStub.calledOnce).toEqual(true);
|
||||
expect(redirectStub.getCall(0).args[0]).toContain(testUrl + '?downloadStartSecret=');
|
||||
});
|
||||
it('appends secret to url with existing parameters', function() {
|
||||
Files.handleDownload(testUrl + '?test=1');
|
||||
expect(redirectStub.calledOnce).toEqual(true);
|
||||
expect(redirectStub.getCall(0).args[0]).toContain(testUrl + '?test=1&downloadStartSecret=');
|
||||
});
|
||||
it('sets cookie and calls callback when cookie appears', function() {
|
||||
var callbackStub = sinon.stub();
|
||||
var token;
|
||||
Files.handleDownload(testUrl, callbackStub);
|
||||
expect(redirectStub.calledOnce).toEqual(true);
|
||||
token = OC.parseQueryString(redirectStub.getCall(0).args[0]).downloadStartSecret;
|
||||
expect(token).toBeDefined();
|
||||
|
||||
expect(cookieStub.calledOnce).toEqual(true);
|
||||
cookieStub.returns(false);
|
||||
clock.tick(600);
|
||||
|
||||
expect(cookieStub.calledTwice).toEqual(true);
|
||||
expect(cookieStub.getCall(1).args[0]).toEqual('ocDownloadStarted');
|
||||
expect(cookieStub.getCall(1).args[1]).toEqual(token);
|
||||
expect(callbackStub.notCalled).toEqual(true);
|
||||
|
||||
cookieStub.returns(true);
|
||||
clock.tick(2000);
|
||||
|
||||
expect(cookieStub.callCount).toEqual(3);
|
||||
expect(callbackStub.calledOnce).toEqual(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue