661756b02a
A revert triggers a move in the DAV client, and the DAV client expects a DAV error message to be provided by the server in case of failure; if no error message is given the client ends trying to get an attribute from an undefined object and "crashes". Besides that, if the revert fails the "done" callback of the promise (the first parameter of "then") is never called, so a "fail" callback should be used instead. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
109 lines
2.9 KiB
JavaScript
109 lines
2.9 KiB
JavaScript
/*
|
|
* Copyright (c) 2015
|
|
*
|
|
* This file is licensed under the Affero General Public License version 3
|
|
* or later.
|
|
*
|
|
* See the COPYING-README file.
|
|
*
|
|
*/
|
|
describe('OCA.Versions.VersionModel', function() {
|
|
var VersionModel = OCA.Versions.VersionModel;
|
|
var model;
|
|
var uid = OC.currentUser = 'user';
|
|
|
|
beforeEach(function() {
|
|
model = new VersionModel({
|
|
id: 10000000,
|
|
fileId: 10,
|
|
timestamp: 10000000,
|
|
fullPath: '/subdir/some file.txt',
|
|
name: 'some file.txt',
|
|
size: 150,
|
|
user: 'user',
|
|
client: new OC.Files.Client({
|
|
host: 'localhost',
|
|
port: 80,
|
|
root: '/remote.php/dav/versions/user',
|
|
useHTTPS: OC.getProtocol() === 'https'
|
|
})
|
|
});
|
|
});
|
|
|
|
it('returns the full path', function() {
|
|
expect(model.getFullPath()).toEqual('/subdir/some file.txt');
|
|
});
|
|
it('returns the preview url', function() {
|
|
expect(model.getPreviewUrl())
|
|
.toEqual(OC.generateUrl('/apps/files_versions/preview') +
|
|
'?file=%2Fsubdir%2Fsome%20file.txt&version=10000000'
|
|
);
|
|
});
|
|
it('returns the download url', function() {
|
|
expect(model.getDownloadUrl())
|
|
.toEqual(OC.linkToRemoteBase('dav') + '/versions/' + uid +
|
|
'/versions/10/10000000'
|
|
);
|
|
});
|
|
describe('reverting', function() {
|
|
var revertEventStub;
|
|
var successStub;
|
|
var errorStub;
|
|
|
|
beforeEach(function() {
|
|
revertEventStub = sinon.stub();
|
|
errorStub = sinon.stub();
|
|
successStub = sinon.stub();
|
|
|
|
model.on('revert', revertEventStub);
|
|
model.on('error', errorStub);
|
|
});
|
|
it('tells the server to revert when calling the revert method', function(done) {
|
|
var promise = model.revert({
|
|
success: successStub
|
|
});
|
|
|
|
expect(fakeServer.requests.length).toEqual(1);
|
|
var request = fakeServer.requests[0];
|
|
expect(request.url)
|
|
.toEqual(
|
|
OC.linkToRemoteBase('dav') + '/versions/user/versions/10/10000000'
|
|
);
|
|
expect(request.requestHeaders.Destination).toEqual(OC.getRootPath() + '/remote.php/dav/versions/user/restore/target');
|
|
request.respond(201);
|
|
|
|
promise.then(function() {
|
|
expect(revertEventStub.calledOnce).toEqual(true);
|
|
expect(successStub.calledOnce).toEqual(true);
|
|
expect(errorStub.notCalled).toEqual(true);
|
|
|
|
done();
|
|
});
|
|
});
|
|
it('triggers error event when server returns a failure', function(done) {
|
|
var promise = model.revert({
|
|
success: successStub
|
|
});
|
|
|
|
expect(fakeServer.requests.length).toEqual(1);
|
|
var responseErrorHeaders = {
|
|
"Content-Type": "application/xml"
|
|
};
|
|
var responseErrorBody =
|
|
'<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">' +
|
|
' <s:exception>Sabre\\DAV\\Exception\\SomeException</s:exception>' +
|
|
' <s:message>Some error message</s:message>' +
|
|
'</d:error>';
|
|
fakeServer.requests[0].respond(404, responseErrorHeaders, responseErrorBody);
|
|
|
|
promise.fail(function() {
|
|
expect(revertEventStub.notCalled).toEqual(true);
|
|
expect(successStub.notCalled).toEqual(true);
|
|
expect(errorStub.calledOnce).toEqual(true);
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|