Post queue (#5878)

* #5876

* add user to post queue table

* add time of post into queue

add posting restrictions to queue

* fix shouldQueueLogic for guests

* add test for post-queue route
This commit is contained in:
Barış Soner Uşaklı
2017-08-15 12:59:40 -04:00
committed by GitHub
parent 1864a50826
commit f161bbf956
19 changed files with 502 additions and 4 deletions

View File

@@ -12,6 +12,8 @@ var privileges = require('../src/privileges');
var user = require('../src/user');
var groups = require('../src/groups');
var socketPosts = require('../src/socket.io/posts');
var socketTopics = require('../src/socket.io/topics');
var meta = require('../src/meta');
describe('Post\'s', function () {
var voterUid;
@@ -296,7 +298,6 @@ describe('Post\'s', function () {
var pid;
var replyPid;
var tid;
var meta = require('../src/meta');
before(function (done) {
topics.post({
uid: voterUid,
@@ -553,7 +554,6 @@ describe('Post\'s', function () {
});
it('should parse signature and remove links and images', function (done) {
var meta = require('../src/meta');
meta.config['signatures:disableLinks'] = 1;
meta.config['signatures:disableImages'] = 1;
var userData = {
@@ -749,4 +749,76 @@ describe('Post\'s', function () {
});
});
});
describe('post queue', function () {
var uid;
before(function (done) {
meta.config.postQueue = 1;
user.create({ username: 'newuser' }, function (err, _uid) {
assert.ifError(err);
uid = _uid;
done();
});
});
after(function (done) {
meta.config.postQueue = 0;
done();
});
it('should add topic to post queue', function (done) {
socketTopics.post({ uid: uid }, { title: 'should be queued', content: 'queued topic content', cid: cid }, function (err, result) {
assert.ifError(err);
assert.strictEqual(result.queued, true);
assert.equal(result.message, '[[success:post-queued]]');
done();
});
});
it('should add reply to post queue', function (done) {
socketPosts.reply({ uid: uid }, { content: 'this is a queued reply', tid: topicData.tid }, function (err, result) {
assert.ifError(err);
assert.strictEqual(result.queued, true);
assert.equal(result.message, '[[success:post-queued]]');
done();
});
});
it('should get queued posts and submit', function (done) {
var ids;
async.waterfall([
function (next) {
db.getSortedSetRange('post:queue', 0, -1, next);
},
function (_ids, next) {
ids = _ids;
var keys = ids.map(function (id) {
return 'post:queue:' + id;
});
db.getObjects(keys, next);
},
function (data, next) {
data.forEach(function (data) {
data.data = JSON.parse(data.data);
});
assert.equal(data[0].type, 'topic');
assert.equal(data[0].data.content, 'queued topic content');
assert.equal(data[1].type, 'reply');
assert.equal(data[1].data.content, 'this is a queued reply');
socketPosts.accept({ uid: globalModUid }, { id: ids[0] }, next);
},
function (next) {
socketPosts.accept({ uid: globalModUid }, { id: ids[1] }, next);
},
], done);
});
it('should prevent regular users from approving posts', function (done) {
socketPosts.accept({ uid: uid }, { id: 1 }, function (err) {
assert.equal(err.message, '[[error:no-privileges]]');
done();
});
});
});
});