server/apps/comments/tests/js/commentscollectionSpec.js
2016-02-03 16:18:14 +01:00

148 lines
4 KiB
JavaScript

/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License comment 3
* or later.
*
* See the COPYING-README file.
*
*/
describe('OCA.Comments.CommentCollection', function() {
var CommentCollection = OCA.Comments.CommentCollection;
var collection, syncStub;
var comment1, comment2, comment3;
beforeEach(function() {
syncStub = sinon.stub(CommentCollection.prototype, 'sync');
collection = new CommentCollection();
collection.setObjectId(5);
comment1 = {
id: 1,
actorType: 'users',
actorId: 'user1',
actorDisplayName: 'User One',
objectType: 'files',
objectId: 5,
message: 'First',
creationDateTime: Date.UTC(2016, 1, 3, 10, 5, 0)
};
comment2 = {
id: 2,
actorType: 'users',
actorId: 'user2',
actorDisplayName: 'User Two',
objectType: 'files',
objectId: 5,
message: 'Second\nNewline',
creationDateTime: Date.UTC(2016, 1, 3, 10, 0, 0)
};
comment3 = {
id: 3,
actorType: 'users',
actorId: 'user3',
actorDisplayName: 'User Three',
objectType: 'files',
objectId: 5,
message: 'Third',
creationDateTime: Date.UTC(2016, 1, 3, 5, 0, 0)
};
});
afterEach(function() {
syncStub.restore();
});
it('fetches the next page', function() {
collection._limit = 2;
collection.fetchNext();
expect(syncStub.calledOnce).toEqual(true);
expect(syncStub.lastCall.args[0]).toEqual('REPORT');
var options = syncStub.lastCall.args[2];
expect(options.remove).toEqual(false);
var parser = new DOMParser();
var doc = parser.parseFromString(options.data, "application/xml");
expect(doc.getElementsByTagNameNS('http://owncloud.org/ns', 'limit')[0].textContent).toEqual('3');
expect(doc.getElementsByTagNameNS('http://owncloud.org/ns', 'offset')[0].textContent).toEqual('0');
syncStub.yieldTo('success', [comment1, comment2, comment3]);
expect(collection.length).toEqual(2);
expect(collection.hasMoreResults()).toEqual(true);
collection.fetchNext();
expect(syncStub.calledTwice).toEqual(true);
options = syncStub.lastCall.args[2];
doc = parser.parseFromString(options.data, "application/xml");
expect(doc.getElementsByTagNameNS('http://owncloud.org/ns', 'limit')[0].textContent).toEqual('3');
expect(doc.getElementsByTagNameNS('http://owncloud.org/ns', 'offset')[0].textContent).toEqual('2');
syncStub.yieldTo('success', [comment3]);
expect(collection.length).toEqual(3);
expect(collection.hasMoreResults()).toEqual(false);
collection.fetchNext();
// no further requests
expect(syncStub.calledTwice).toEqual(true);
});
it('resets page counted when calling reset', function() {
collection.fetchNext();
syncStub.yieldTo('success', [comment1]);
expect(collection.hasMoreResults()).toEqual(false);
collection.reset();
expect(collection.hasMoreResults()).toEqual(true);
});
describe('resetting read marker', function() {
var updateStub;
var clock;
beforeEach(function() {
updateStub = sinon.stub(OCA.Comments.CommentSummaryModel.prototype, 'save');
clock = sinon.useFakeTimers(Date.UTC(2016, 1, 3, 10, 5, 9));
});
afterEach(function() {
updateStub.restore();
clock.restore();
});
it('resets read marker to the default date', function() {
var successStub = sinon.stub();
collection.updateReadMarker(null, {
success: successStub
});
expect(updateStub.calledOnce).toEqual(true);
expect(updateStub.lastCall.args[0]).toEqual({
readMarker: new Date(Date.UTC(2016, 1, 3, 10, 5, 9)).toUTCString()
});
updateStub.yieldTo('success');
expect(successStub.calledOnce).toEqual(true);
});
it('resets read marker to the given date', function() {
var successStub = sinon.stub();
collection.updateReadMarker(new Date(Date.UTC(2016, 1, 2, 3, 4, 5)), {
success: successStub
});
expect(updateStub.calledOnce).toEqual(true);
expect(updateStub.lastCall.args[0]).toEqual({
readMarker: new Date(Date.UTC(2016, 1, 2, 3, 4, 5)).toUTCString()
});
updateStub.yieldTo('success');
expect(successStub.calledOnce).toEqual(true);
});
});
});