mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-21 23:12:58 +01:00
test: added test cases for .addReport and .rescindReport()
This commit is contained in:
@@ -545,6 +545,7 @@ Flags.getReports = async function (flagId) {
|
|||||||
return reports;
|
return reports;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Not meant to be called directly, call Flags.create() instead.
|
||||||
Flags.addReport = async function (flagId, type, id, uid, reason, timestamp) {
|
Flags.addReport = async function (flagId, type, id, uid, reason, timestamp) {
|
||||||
await db.sortedSetAddBulk([
|
await db.sortedSetAddBulk([
|
||||||
[`flags:byReporter:${uid}`, timestamp, flagId],
|
[`flags:byReporter:${uid}`, timestamp, flagId],
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ const User = require('../src/user');
|
|||||||
const Groups = require('../src/groups');
|
const Groups = require('../src/groups');
|
||||||
const Meta = require('../src/meta');
|
const Meta = require('../src/meta');
|
||||||
const Privileges = require('../src/privileges');
|
const Privileges = require('../src/privileges');
|
||||||
|
const plugins = require('../src/plugins');
|
||||||
const utils = require('../src/utils');
|
const utils = require('../src/utils');
|
||||||
const api = require('../src/api');
|
const api = require('../src/api');
|
||||||
|
|
||||||
@@ -31,6 +32,13 @@ describe('Flags', () => {
|
|||||||
let csrfToken;
|
let csrfToken;
|
||||||
let category;
|
let category;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
|
const dummyEmailerHook = async (data) => {};
|
||||||
|
// Attach an emailer hook so related requests do not error
|
||||||
|
plugins.hooks.register('flags-test', {
|
||||||
|
hook: 'filter:email.send',
|
||||||
|
method: dummyEmailerHook,
|
||||||
|
});
|
||||||
|
|
||||||
// Create some stuff to flag
|
// Create some stuff to flag
|
||||||
uid1 = await User.create({ username: 'testUser', password: 'abcdef', email: 'b@c.com' });
|
uid1 = await User.create({ username: 'testUser', password: 'abcdef', email: 'b@c.com' });
|
||||||
|
|
||||||
@@ -61,6 +69,10 @@ describe('Flags', () => {
|
|||||||
csrfToken = login.csrf_token;
|
csrfToken = login.csrf_token;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
after(() => {
|
||||||
|
plugins.hooks.unregister('flags-test', 'filter:email.send');
|
||||||
|
});
|
||||||
|
|
||||||
describe('.create()', () => {
|
describe('.create()', () => {
|
||||||
it('should create a flag and return its data', (done) => {
|
it('should create a flag and return its data', (done) => {
|
||||||
Flags.create('post', 1, 1, 'Test flag', (err, flagData) => {
|
Flags.create('post', 1, 1, 'Test flag', (err, flagData) => {
|
||||||
@@ -99,6 +111,71 @@ describe('Flags', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('.addReport()', () => {
|
||||||
|
let flagId;
|
||||||
|
let postData;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
// Create a topic and flag it
|
||||||
|
({ postData } = await Topics.post({
|
||||||
|
cid: category.cid,
|
||||||
|
uid: uid1,
|
||||||
|
title: utils.generateUUID(),
|
||||||
|
content: utils.generateUUID(),
|
||||||
|
}));
|
||||||
|
({ flagId } = await Flags.create('post', postData.pid, adminUid, utils.generateUUID()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should add a report to an existing flag', async () => {
|
||||||
|
await Flags.addReport(flagId, 'post', postData.pid, uid3, utils.generateUUID(), Date.now());
|
||||||
|
|
||||||
|
const reports = await db.getSortedSetMembers(`flag:${flagId}:reports`);
|
||||||
|
assert.strictEqual(reports.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should add an additional report even if same user calls it again', async () => {
|
||||||
|
// This isn't exposed to the end user, but is possible via direct method call
|
||||||
|
await Flags.addReport(flagId, 'post', postData.pid, uid3, utils.generateUUID(), Date.now());
|
||||||
|
|
||||||
|
const reports = await db.getSortedSetMembers(`flag:${flagId}:reports`);
|
||||||
|
assert.strictEqual(reports.length, 3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('.rescindReport()', () => {
|
||||||
|
let flagId;
|
||||||
|
let postData;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
// Create a topic and flag it
|
||||||
|
({ postData } = await Topics.post({
|
||||||
|
cid: category.cid,
|
||||||
|
uid: uid1,
|
||||||
|
title: utils.generateUUID(),
|
||||||
|
content: utils.generateUUID(),
|
||||||
|
}));
|
||||||
|
({ flagId } = await Flags.create('post', postData.pid, adminUid, utils.generateUUID()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should remove a report from an existing flag', async () => {
|
||||||
|
await Flags.create('post', postData.pid, uid3, utils.generateUUID());
|
||||||
|
await Flags.rescindReport('post', postData.pid, uid3);
|
||||||
|
const reports = await Flags.getReports(flagId);
|
||||||
|
|
||||||
|
assert.strictEqual(reports.length, 1);
|
||||||
|
assert(reports.every(({ reporter }) => reporter.uid !== uid3));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should automatically mark the flag resolved if there are no reports remaining after removal', async () => {
|
||||||
|
await Flags.rescindReport('post', postData.pid, adminUid);
|
||||||
|
const reports = await Flags.getReports(flagId);
|
||||||
|
const { state } = await Flags.get(flagId);
|
||||||
|
|
||||||
|
assert.strictEqual(reports.length, 0);
|
||||||
|
assert.strictEqual(state, 'resolved');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('.exists()', () => {
|
describe('.exists()', () => {
|
||||||
it('should return Boolean True if a flag matching the flag hash already exists', (done) => {
|
it('should return Boolean True if a flag matching the flag hash already exists', (done) => {
|
||||||
Flags.exists('post', 1, 1, (err, exists) => {
|
Flags.exists('post', 1, 1, (err, exists) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user