|
|
|
@ -13,40 +13,30 @@ var Groups = require('../src/groups');
|
|
|
|
|
var Meta = require('../src/meta');
|
|
|
|
|
|
|
|
|
|
describe('Flags', function () {
|
|
|
|
|
before(function (done) {
|
|
|
|
|
let uid1;
|
|
|
|
|
let uid2;
|
|
|
|
|
let uid3;
|
|
|
|
|
let category;
|
|
|
|
|
before(async () => {
|
|
|
|
|
// Create some stuff to flag
|
|
|
|
|
async.waterfall([
|
|
|
|
|
async.apply(User.create, { username: 'testUser', password: 'abcdef', email: 'b@c.com' }),
|
|
|
|
|
function (uid, next) {
|
|
|
|
|
Categories.create({
|
|
|
|
|
name: 'test category',
|
|
|
|
|
}, function (err, category) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return done(err);
|
|
|
|
|
}
|
|
|
|
|
uid1 = await User.create({ username: 'testUser', password: 'abcdef', email: 'b@c.com' });
|
|
|
|
|
|
|
|
|
|
Topics.post({
|
|
|
|
|
cid: category.cid,
|
|
|
|
|
uid: uid,
|
|
|
|
|
title: 'Topic to flag',
|
|
|
|
|
content: 'This is flaggable content',
|
|
|
|
|
}, next);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
function (topicData, next) {
|
|
|
|
|
User.create({
|
|
|
|
|
username: 'testUser2', password: 'abcdef', email: 'c@d.com',
|
|
|
|
|
}, next);
|
|
|
|
|
},
|
|
|
|
|
function (uid, next) {
|
|
|
|
|
Groups.join('administrators', uid, next);
|
|
|
|
|
},
|
|
|
|
|
function (next) {
|
|
|
|
|
User.create({
|
|
|
|
|
username: 'unprivileged', password: 'abcdef', email: 'd@e.com',
|
|
|
|
|
}, next);
|
|
|
|
|
},
|
|
|
|
|
], done);
|
|
|
|
|
uid2 = await User.create({ username: 'testUser2', password: 'abcdef', email: 'c@d.com' });
|
|
|
|
|
await Groups.join('administrators', uid2);
|
|
|
|
|
|
|
|
|
|
category = await Categories.create({
|
|
|
|
|
name: 'test category',
|
|
|
|
|
});
|
|
|
|
|
await Topics.post({
|
|
|
|
|
cid: category.cid,
|
|
|
|
|
uid: uid1,
|
|
|
|
|
title: 'Topic to flag',
|
|
|
|
|
content: 'This is flaggable content',
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
uid3 = await User.create({
|
|
|
|
|
username: 'unprivileged', password: 'abcdef', email: 'd@e.com',
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('.create()', function () {
|
|
|
|
@ -274,9 +264,9 @@ describe('Flags', function () {
|
|
|
|
|
|
|
|
|
|
describe('.update()', function () {
|
|
|
|
|
it('should alter a flag\'s various attributes and persist them to the database', function (done) {
|
|
|
|
|
Flags.update(1, 1, {
|
|
|
|
|
Flags.update(1, uid2, {
|
|
|
|
|
state: 'wip',
|
|
|
|
|
assignee: 1,
|
|
|
|
|
assignee: uid2,
|
|
|
|
|
}, function (err) {
|
|
|
|
|
assert.ifError(err);
|
|
|
|
|
db.getObjectFields('flag:1', ['state', 'assignee'], function (err, data) {
|
|
|
|
@ -286,7 +276,7 @@ describe('Flags', function () {
|
|
|
|
|
|
|
|
|
|
assert.strictEqual('wip', data.state);
|
|
|
|
|
assert.ok(!isNaN(parseInt(data.assignee, 10)));
|
|
|
|
|
assert.strictEqual(1, parseInt(data.assignee, 10));
|
|
|
|
|
assert.strictEqual(uid2, parseInt(data.assignee, 10));
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
@ -313,6 +303,65 @@ describe('Flags', function () {
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should allow assignment if user is an admin and do nothing otherwise', async () => {
|
|
|
|
|
await Flags.update(1, uid2, {
|
|
|
|
|
assignee: uid2,
|
|
|
|
|
});
|
|
|
|
|
let assignee = await db.getObjectField('flag:1', 'assignee');
|
|
|
|
|
assert.strictEqual(uid2, parseInt(assignee, 10));
|
|
|
|
|
|
|
|
|
|
await Flags.update(1, uid2, {
|
|
|
|
|
assignee: uid3,
|
|
|
|
|
});
|
|
|
|
|
assignee = await db.getObjectField('flag:1', 'assignee');
|
|
|
|
|
assert.strictEqual(uid2, parseInt(assignee, 10));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should allow assignment if user is a global mod and do nothing otherwise', async () => {
|
|
|
|
|
await Groups.join('Global Moderators', uid3);
|
|
|
|
|
|
|
|
|
|
await Flags.update(1, uid3, {
|
|
|
|
|
assignee: uid3,
|
|
|
|
|
});
|
|
|
|
|
let assignee = await db.getObjectField('flag:1', 'assignee');
|
|
|
|
|
assert.strictEqual(uid3, parseInt(assignee, 10));
|
|
|
|
|
|
|
|
|
|
await Flags.update(1, uid3, {
|
|
|
|
|
assignee: uid1,
|
|
|
|
|
});
|
|
|
|
|
assignee = await db.getObjectField('flag:1', 'assignee');
|
|
|
|
|
assert.strictEqual(uid3, parseInt(assignee, 10));
|
|
|
|
|
|
|
|
|
|
await Groups.leave('Global Moderators', uid3);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should allow assignment if user is a mod of the category, do nothing otherwise', async () => {
|
|
|
|
|
await Groups.join('cid:' + category.cid + ':privileges:moderate', uid3);
|
|
|
|
|
|
|
|
|
|
await Flags.update(1, uid3, {
|
|
|
|
|
assignee: uid3,
|
|
|
|
|
});
|
|
|
|
|
let assignee = await db.getObjectField('flag:1', 'assignee');
|
|
|
|
|
assert.strictEqual(uid3, parseInt(assignee, 10));
|
|
|
|
|
|
|
|
|
|
await Flags.update(1, uid3, {
|
|
|
|
|
assignee: uid1,
|
|
|
|
|
});
|
|
|
|
|
assignee = await db.getObjectField('flag:1', 'assignee');
|
|
|
|
|
assert.strictEqual(uid3, parseInt(assignee, 10));
|
|
|
|
|
|
|
|
|
|
await Groups.leave('cid:' + category.cid + ':privileges:moderate', uid3);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should do nothing when you attempt to set a bogus state', async () => {
|
|
|
|
|
await Flags.update(1, uid2, {
|
|
|
|
|
state: 'hocus pocus',
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const state = await db.getObjectField('flag:1', 'state');
|
|
|
|
|
assert.strictEqual('wip', state);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('.getTarget()', function () {
|
|
|
|
|