mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: #8286, rescind notif when its resolved/rejected
This commit is contained in:
@@ -363,7 +363,7 @@ Flags.getTargetCid = async function (type, id) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Flags.update = async function (flagId, uid, changeset) {
|
Flags.update = async function (flagId, uid, changeset) {
|
||||||
const current = await db.getObjectFields('flag:' + flagId, ['state', 'assignee', 'type', 'targetId']);
|
const current = await db.getObjectFields('flag:' + flagId, ['uid', 'state', 'assignee', 'type', 'targetId']);
|
||||||
const now = changeset.datetime || Date.now();
|
const now = changeset.datetime || Date.now();
|
||||||
const notifyAssignee = async function (assigneeId) {
|
const notifyAssignee = async function (assigneeId) {
|
||||||
if (assigneeId === '' || parseInt(uid, 10) === parseInt(assigneeId, 10)) {
|
if (assigneeId === '' || parseInt(uid, 10) === parseInt(assigneeId, 10)) {
|
||||||
@@ -404,6 +404,9 @@ Flags.update = async function (flagId, uid, changeset) {
|
|||||||
} else {
|
} else {
|
||||||
tasks.push(db.sortedSetAdd('flags:byState:' + changeset[prop], now, flagId));
|
tasks.push(db.sortedSetAdd('flags:byState:' + changeset[prop], now, flagId));
|
||||||
tasks.push(db.sortedSetRemove('flags:byState:' + current[prop], flagId));
|
tasks.push(db.sortedSetRemove('flags:byState:' + current[prop], flagId));
|
||||||
|
if (changeset[prop] === 'resolved' || changeset[prop] === 'rejected') {
|
||||||
|
tasks.push(notifications.rescind('flag:' + current.type + ':' + current.targetId + ':uid:' + current.uid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (prop === 'assignee') {
|
} else if (prop === 'assignee') {
|
||||||
/* eslint-disable-next-line */
|
/* eslint-disable-next-line */
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var assert = require('assert');
|
const assert = require('assert');
|
||||||
var async = require('async');
|
const async = require('async');
|
||||||
|
const util = require('util');
|
||||||
|
const sleep = util.promisify(setTimeout);
|
||||||
|
|
||||||
var db = require('./mocks/databasemock');
|
const db = require('./mocks/databasemock');
|
||||||
var Flags = require('../src/flags');
|
const Flags = require('../src/flags');
|
||||||
var Categories = require('../src/categories');
|
const Categories = require('../src/categories');
|
||||||
var Topics = require('../src/topics');
|
const Topics = require('../src/topics');
|
||||||
var Posts = require('../src/posts');
|
const Posts = require('../src/posts');
|
||||||
var User = require('../src/user');
|
const User = require('../src/user');
|
||||||
var Groups = require('../src/groups');
|
const Groups = require('../src/groups');
|
||||||
var Meta = require('../src/meta');
|
const Meta = require('../src/meta');
|
||||||
var Privileges = require('../src/privileges');
|
const Privileges = require('../src/privileges');
|
||||||
|
|
||||||
describe('Flags', function () {
|
describe('Flags', function () {
|
||||||
let uid1;
|
let uid1;
|
||||||
@@ -363,6 +365,28 @@ describe('Flags', function () {
|
|||||||
const state = await db.getObjectField('flag:1', 'state');
|
const state = await db.getObjectField('flag:1', 'state');
|
||||||
assert.strictEqual('wip', state);
|
assert.strictEqual('wip', state);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should rescind notification if flag is resolved', async () => {
|
||||||
|
const SocketFlags = require('../src/socket.io/flags.js');
|
||||||
|
const result = await Topics.post({
|
||||||
|
cid: category.cid,
|
||||||
|
uid: uid3,
|
||||||
|
title: 'Topic to flag',
|
||||||
|
content: 'This is flaggable content',
|
||||||
|
});
|
||||||
|
const flagId = await SocketFlags.create({ uid: uid1 }, { type: 'post', id: result.postData.pid, reason: 'spam' });
|
||||||
|
await sleep(2000);
|
||||||
|
|
||||||
|
let userNotifs = await User.notifications.getAll(adminUid);
|
||||||
|
assert(userNotifs.includes('flag:post:' + result.postData.pid + ':uid:' + uid1));
|
||||||
|
|
||||||
|
await Flags.update(flagId, adminUid, {
|
||||||
|
state: 'resolved',
|
||||||
|
});
|
||||||
|
|
||||||
|
userNotifs = await User.notifications.getAll(adminUid);
|
||||||
|
assert(!userNotifs.includes('flag:post:' + result.postData.pid + ':uid:' + uid1));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('.getTarget()', function () {
|
describe('.getTarget()', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user