inf scroll tests for topics

v1.18.x
barisusakli 9 years ago
parent bece25cf6a
commit 3ec760ac85

@ -14,7 +14,10 @@ module.exports = function (SocketTopics) {
if (!data || !data.tid || !utils.isNumber(data.after) || parseInt(data.after, 10) < 0) { if (!data || !data.tid || !utils.isNumber(data.after) || parseInt(data.after, 10) < 0) {
return callback(new Error('[[error:invalid-data]]')); return callback(new Error('[[error:invalid-data]]'));
} }
var userPrivileges;
async.waterfall([
function (next) {
async.parallel({ async.parallel({
privileges: function (next) { privileges: function (next) {
privileges.topics.get(data.tid, socket.uid, next); privileges.topics.get(data.tid, socket.uid, next);
@ -22,15 +25,15 @@ module.exports = function (SocketTopics) {
topic: function (next) { topic: function (next) {
topics.getTopicFields(data.tid, ['postcount', 'deleted'], next); topics.getTopicFields(data.tid, ['postcount', 'deleted'], next);
} }
}, function (err, results) { }, next);
if (err) { },
return callback(err); function (results, next) {
}
if (!results.privileges.read || (parseInt(results.topic.deleted, 10) && !results.privileges.view_deleted)) { if (!results.privileges.read || (parseInt(results.topic.deleted, 10) && !results.privileges.view_deleted)) {
return callback(new Error('[[error:no-privileges]]')); return callback(new Error('[[error:no-privileges]]'));
} }
userPrivileges = results.privileges;
var set = 'tid:' + data.tid + ':posts'; var set = 'tid:' + data.tid + ':posts';
if (data.topicPostSort === 'most_votes') { if (data.topicPostSort === 'most_votes') {
set = 'tid:' + data.tid + ':posts:votes'; set = 'tid:' + data.tid + ':posts:votes';
@ -70,22 +73,21 @@ module.exports = function (SocketTopics) {
postSharing: function (next) { postSharing: function (next) {
social.getActivePostSharing(next); social.getActivePostSharing(next);
} }
}, function (err, topicData) { }, next);
if (err) { },
return callback(err); function (topicData, next) {
}
if (topicData.mainPost) { if (topicData.mainPost) {
topicData.posts = [topicData.mainPost].concat(topicData.posts); topicData.posts = [topicData.mainPost].concat(topicData.posts);
} }
topicData.privileges = results.privileges; topicData.privileges = userPrivileges;
topicData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1; topicData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1;
topicData['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1; topicData['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1;
topics.modifyPostsByPrivilege(topicData, results.privileges); topics.modifyPostsByPrivilege(topicData, userPrivileges);
callback(null, topicData); next(null, topicData);
}); }
}); ], callback);
}; };
SocketTopics.loadMoreUnreadTopics = function (socket, data, callback) { SocketTopics.loadMoreUnreadTopics = function (socket, data, callback) {
@ -110,7 +112,6 @@ module.exports = function (SocketTopics) {
topics.getRecentTopics(data.cid, socket.uid, start, stop, data.filter, callback); topics.getRecentTopics(data.cid, socket.uid, start, stop, data.filter, callback);
}; };
SocketTopics.loadMoreFromSet = function (socket, data, callback) { SocketTopics.loadMoreFromSet = function (socket, data, callback) {
if (!data || !utils.isNumber(data.after) || parseInt(data.after, 10) < 0 || !data.set) { if (!data || !utils.isNumber(data.after) || parseInt(data.after, 10) < 0 || !data.set) {
return callback(new Error('[[error:invalid-data]]')); return callback(new Error('[[error:invalid-data]]'));

@ -460,27 +460,23 @@ describe('Topic\'s', function () {
}); });
}); });
describe('.fork', function () { describe('.fork', function () {
var newTopic; var newTopic;
var replies = []; var replies = [];
var topicPids; var topicPids;
var originalBookmark = 5; var originalBookmark = 5;
function postReply( next ) { function postReply(next) {
topics.reply({uid: topic.userId, content: 'test post ' + replies.length, tid: newTopic.tid}, topics.reply({uid: topic.userId, content: 'test post ' + replies.length, tid: newTopic.tid}, function (err, result) {
function (err, result) {
assert.equal(err, null, 'was created with error'); assert.equal(err, null, 'was created with error');
assert.ok(result); assert.ok(result);
replies.push( result ); replies.push(result);
next(); next();
} }
); );
} }
before( function (done) { before(function (done) {
async.waterfall( async.waterfall([
[
function (next) { function (next) {
groups.join('administrators', topic.userId, next); groups.join('administrators', topic.userId, next);
}, },
@ -576,6 +572,90 @@ describe('Topic\'s', function () {
}); });
}); });
describe('infinitescroll', function () {
var socketTopics = require('../src/socket.io/topics');
var tid;
before(function (done) {
topics.post({uid: topic.userId, title: topic.title, content: topic.content, cid: topic.categoryId}, function (err, result) {
assert.ifError(err);
tid = result.topicData.tid;
done();
});
});
it('should error with invalid data', function (done) {
socketTopics.loadMore({uid: adminUid}, {}, function (err) {
assert.equal(err.message, '[[error:invalid-data]]');
done();
});
});
it('should infinite load topic posts', function (done) {
socketTopics.loadMore({uid: adminUid}, {tid: tid, after: 0}, function (err, data) {
assert.ifError(err);
assert(data.mainPost);
assert(data.posts);
assert(data.privileges);
done();
});
});
it('should error with invalid data', function (done) {
socketTopics.loadMoreUnreadTopics({uid: adminUid}, {after: 'invalid'}, function (err, data) {
assert.equal(err.message, '[[error:invalid-data]]');
done();
});
});
it('should load more unread topics', function (done) {
socketTopics.markUnread({uid: adminUid}, tid, function (err) {
assert.ifError(err);
socketTopics.loadMoreUnreadTopics({uid: adminUid}, {cid: topic.categoryId, after: 0}, function (err, data) {
assert.ifError(err);
assert(data);
assert(Array.isArray(data.topics));
done();
});
});
});
it('should error with invalid data', function (done) {
socketTopics.loadMoreRecentTopics({uid: adminUid}, {after: 'invalid'}, function (err, data) {
assert.equal(err.message, '[[error:invalid-data]]');
done();
});
});
it('should load more recent topics', function (done) {
socketTopics.loadMoreRecentTopics({uid: adminUid}, {cid: topic.categoryId, after: 0}, function (err, data) {
assert.ifError(err);
assert(data);
assert(Array.isArray(data.topics));
done();
});
});
it('should error with invalid data', function (done) {
socketTopics.loadMoreFromSet({uid: adminUid}, {after: 'invalid'}, function (err, data) {
assert.equal(err.message, '[[error:invalid-data]]');
done();
});
});
it('should load more from custom set', function (done) {
socketTopics.loadMoreRecentTopics({uid: adminUid}, {set: 'uid:' + adminUid + ':topics', after: 0}, function (err, data) {
assert.ifError(err);
assert(data);
assert(Array.isArray(data.topics));
done();
});
});
});
after(function (done) { after(function (done) {
db.emptydb(done); db.emptydb(done);
}); });

Loading…
Cancel
Save