nextcloud/apps/files_versions/tests/js/versioncollectionSpec.js

162 lines
4.0 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.VersionCollection', function() {
var VersionCollection = OCA.Versions.VersionCollection;
var collection, fileInfoModel;
beforeEach(function() {
fileInfoModel = new OCA.Files.FileInfoModel({
path: '/subdir',
name: 'some file.txt'
});
collection = new VersionCollection();
collection.setFileInfo(fileInfoModel);
});
it('fetches the next page', function() {
collection.fetchNext();
expect(fakeServer.requests.length).toEqual(1);
expect(fakeServer.requests[0].url).toEqual(
OC.generateUrl('apps/files_versions/ajax/getVersions.php') +
'?source=%2Fsubdir%2Fsome%20file.txt&start=0'
);
fakeServer.requests[0].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({
status: 'success',
data: {
endReached: false,
versions: [{
version: 10000000,
size: 123,
name: 'some file.txt',
fullPath: '/subdir/some file.txt'
},{
version: 15000000,
size: 150,
name: 'some file.txt',
path: '/subdir/some file.txt'
}]
}
})
);
expect(collection.length).toEqual(2);
expect(collection.hasMoreResults()).toEqual(true);
collection.fetchNext();
expect(fakeServer.requests.length).toEqual(2);
expect(fakeServer.requests[1].url).toEqual(
OC.generateUrl('apps/files_versions/ajax/getVersions.php') +
'?source=%2Fsubdir%2Fsome%20file.txt&start=2'
);
fakeServer.requests[1].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({
status: 'success',
data: {
endReached: true,
versions: [{
version: 18000000,
size: 123,
name: 'some file.txt',
path: '/subdir/some file.txt'
}]
}
})
);
expect(collection.length).toEqual(3);
expect(collection.hasMoreResults()).toEqual(false);
collection.fetchNext();
// no further requests
expect(fakeServer.requests.length).toEqual(2);
});
it('properly parses the results', function() {
collection.fetchNext();
expect(fakeServer.requests.length).toEqual(1);
expect(fakeServer.requests[0].url).toEqual(
OC.generateUrl('apps/files_versions/ajax/getVersions.php') +
'?source=%2Fsubdir%2Fsome%20file.txt&start=0'
);
fakeServer.requests[0].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({
status: 'success',
data: {
endReached: false,
versions: [{
version: 10000000,
size: 123,
name: 'some file.txt',
path: '/subdir/some file.txt'
},{
version: 15000000,
size: 150,
name: 'some file.txt',
path: '/subdir/some file.txt'
}]
}
})
);
expect(collection.length).toEqual(2);
var model = collection.at(0);
expect(model.get('id')).toEqual(10000000);
expect(model.get('timestamp')).toEqual(10000000);
expect(model.get('name')).toEqual('some file.txt');
expect(model.get('fullPath')).toEqual('/subdir/some file.txt');
expect(model.get('size')).toEqual(123);
model = collection.at(1);
expect(model.get('id')).toEqual(15000000);
expect(model.get('timestamp')).toEqual(15000000);
expect(model.get('name')).toEqual('some file.txt');
expect(model.get('fullPath')).toEqual('/subdir/some file.txt');
expect(model.get('size')).toEqual(150);
});
it('resets page counted when setting a new file info model', function() {
collection.fetchNext();
expect(fakeServer.requests.length).toEqual(1);
fakeServer.requests[0].respond(
200,
{ 'Content-Type': 'application/json' },
JSON.stringify({
status: 'success',
data: {
endReached: true,
versions: [{
version: 18000000,
size: 123,
name: 'some file.txt',
path: '/subdir/some file.txt'
}]
}
})
);
expect(collection.hasMoreResults()).toEqual(false);
collection.setFileInfo(fileInfoModel);
expect(collection.hasMoreResults()).toEqual(true);
});
});