mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
refactor: get rid of some async.waterfall/series/parallel calls
This commit is contained in:
@@ -552,36 +552,22 @@ describe('authentication', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should lockout account on 3 failed login attempts', (done) => {
|
||||
it('should lockout account on 3 failed login attempts', async () => {
|
||||
meta.config.loginAttempts = 3;
|
||||
let uid;
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
user.create({ username: 'lockme', password: '123456' }, next);
|
||||
},
|
||||
async (_uid) => {
|
||||
uid = _uid;
|
||||
return helpers.loginUser('lockme', 'abcdef');
|
||||
},
|
||||
async data => helpers.loginUser('lockme', 'abcdef'),
|
||||
async data => helpers.loginUser('lockme', 'abcdef'),
|
||||
async data => helpers.loginUser('lockme', 'abcdef'),
|
||||
async (data) => {
|
||||
const uid = await user.create({ username: 'lockme', password: '123456' });
|
||||
await helpers.loginUser('lockme', 'abcdef');
|
||||
await helpers.loginUser('lockme', 'abcdef');
|
||||
await helpers.loginUser('lockme', 'abcdef');
|
||||
let data = await helpers.loginUser('lockme', 'abcdef');
|
||||
|
||||
meta.config.loginAttempts = 5;
|
||||
assert.equal(data.res.statusCode, 403);
|
||||
assert.equal(data.body, '[[error:account-locked]]');
|
||||
return helpers.loginUser('lockme', 'abcdef');
|
||||
},
|
||||
function (data, next) {
|
||||
data = await helpers.loginUser('lockme', 'abcdef');
|
||||
assert.equal(data.res.statusCode, 403);
|
||||
assert.equal(data.body, '[[error:account-locked]]');
|
||||
db.exists(`lockout:${uid}`, next);
|
||||
},
|
||||
function (locked, next) {
|
||||
const locked = await db.exists(`lockout:${uid}`);
|
||||
assert(locked);
|
||||
next();
|
||||
},
|
||||
], done);
|
||||
});
|
||||
|
||||
it('should clear all reset tokens upon successful login', async () => {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
|
||||
const async = require('async');
|
||||
const assert = require('assert');
|
||||
const nconf = require('nconf');
|
||||
const request = require('request');
|
||||
@@ -18,20 +16,10 @@ describe('Categories', () => {
|
||||
let posterUid;
|
||||
let adminUid;
|
||||
|
||||
before((done) => {
|
||||
async.series({
|
||||
posterUid: function (next) {
|
||||
User.create({ username: 'poster' }, next);
|
||||
},
|
||||
adminUid: function (next) {
|
||||
User.create({ username: 'admin' }, next);
|
||||
},
|
||||
}, (err, results) => {
|
||||
assert.ifError(err);
|
||||
posterUid = results.posterUid;
|
||||
adminUid = results.adminUid;
|
||||
groups.join('administrators', adminUid, done);
|
||||
});
|
||||
before(async () => {
|
||||
posterUid = await User.create({ username: 'poster' });
|
||||
adminUid = await User.create({ username: 'admin' });
|
||||
await groups.join('administrators', adminUid);
|
||||
});
|
||||
|
||||
|
||||
@@ -156,32 +144,22 @@ describe('Categories', () => {
|
||||
describe('Categories.moveRecentReplies', () => {
|
||||
let moveCid;
|
||||
let moveTid;
|
||||
before((done) => {
|
||||
async.parallel({
|
||||
category: function (next) {
|
||||
before(async () => {
|
||||
const [category, topic] = await Promise.all([
|
||||
Categories.create({
|
||||
name: 'Test Category 2',
|
||||
description: 'Test category created by testing script',
|
||||
}, next);
|
||||
},
|
||||
topic: function (next) {
|
||||
}),
|
||||
Topics.post({
|
||||
uid: posterUid,
|
||||
cid: categoryObj.cid,
|
||||
title: 'Test Topic Title',
|
||||
content: 'The content of test topic',
|
||||
}, next);
|
||||
},
|
||||
}, (err, results) => {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
moveCid = results.category.cid;
|
||||
moveTid = results.topic.topicData.tid;
|
||||
Topics.reply({ uid: posterUid, content: 'test post', tid: moveTid }, (err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
}),
|
||||
]);
|
||||
moveCid = category.cid;
|
||||
moveTid = topic.topicData.tid;
|
||||
await Topics.reply({ uid: posterUid, content: 'test post', tid: moveTid });
|
||||
});
|
||||
|
||||
it('should move posts from one category to another', (done) => {
|
||||
@@ -526,52 +504,24 @@ describe('Categories', () => {
|
||||
assert(canDelete);
|
||||
});
|
||||
|
||||
it('should create category with settings from', (done) => {
|
||||
let child1Cid;
|
||||
let parentCid;
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
Categories.create({ name: 'copy from', description: 'copy me' }, next);
|
||||
},
|
||||
function (category, next) {
|
||||
parentCid = category.cid;
|
||||
Categories.create({ name: 'child1', description: 'will be gone', cloneFromCid: parentCid }, next);
|
||||
},
|
||||
function (category, next) {
|
||||
child1Cid = category.cid;
|
||||
assert.equal(category.description, 'copy me');
|
||||
next();
|
||||
},
|
||||
], done);
|
||||
it('should create category with settings from', async () => {
|
||||
const category = await Categories.create({ name: 'copy from', description: 'copy me' });
|
||||
const parentCid = category.cid;
|
||||
const childCategory = await Categories.create({ name: 'child1', description: 'will be gone', cloneFromCid: parentCid });
|
||||
assert.equal(childCategory.description, 'copy me');
|
||||
});
|
||||
|
||||
it('should copy settings from', (done) => {
|
||||
let child1Cid;
|
||||
let parentCid;
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
Categories.create({ name: 'parent', description: 'copy me' }, next);
|
||||
},
|
||||
function (category, next) {
|
||||
parentCid = category.cid;
|
||||
Categories.create({ name: 'child1' }, next);
|
||||
},
|
||||
function (category, next) {
|
||||
child1Cid = category.cid;
|
||||
socketCategories.copySettingsFrom(
|
||||
it('should copy settings from', async () => {
|
||||
const category = await Categories.create({ name: 'parent', description: 'copy me' });
|
||||
const parentCid = category.cid;
|
||||
const childCategory = await Categories.create({ name: 'child1' });
|
||||
const child1Cid = childCategory.cid;
|
||||
const destinationCategory = await socketCategories.copySettingsFrom(
|
||||
{ uid: adminUid },
|
||||
{ fromCid: parentCid, toCid: child1Cid, copyParent: true },
|
||||
next
|
||||
);
|
||||
},
|
||||
function (destinationCategory, next) {
|
||||
Categories.getCategoryField(child1Cid, 'description', next);
|
||||
},
|
||||
function (description, next) {
|
||||
const description = await Categories.getCategoryField(child1Cid, 'description');
|
||||
assert.equal(description, 'copy me');
|
||||
next();
|
||||
},
|
||||
], done);
|
||||
});
|
||||
|
||||
it('should copy privileges from another category', async () => {
|
||||
@@ -852,19 +802,12 @@ describe('Categories', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should not fail when there are multiple groups', (done) => {
|
||||
async.series([
|
||||
async.apply(groups.create, { name: 'testGroup2' }),
|
||||
async.apply(groups.join, 'cid:1:privileges:groups:moderate', 'testGroup2'),
|
||||
async.apply(groups.join, 'testGroup2', 1),
|
||||
function (next) {
|
||||
Categories.getModeratorUids([cid, 2], (err, uids) => {
|
||||
assert.ifError(err);
|
||||
it('should not fail when there are multiple groups', async () => {
|
||||
await groups.create({ name: 'testGroup2' });
|
||||
await groups.join('cid:1:privileges:groups:moderate', 'testGroup2');
|
||||
await groups.join('testGroup2', 1);
|
||||
const uids = await Categories.getModeratorUids([cid, 2]);
|
||||
assert(uids[0].includes('1'));
|
||||
next();
|
||||
});
|
||||
},
|
||||
], done);
|
||||
});
|
||||
|
||||
it('should not return moderators of disabled categories', async () => {
|
||||
@@ -875,13 +818,11 @@ describe('Categories', () => {
|
||||
assert(!uids[0].includes('1'));
|
||||
});
|
||||
|
||||
after((done) => {
|
||||
async.series([
|
||||
async.apply(groups.leave, `cid:${cid}:privileges:groups:moderate`, 'testGroup'),
|
||||
async.apply(groups.leave, `cid:${cid}:privileges:groups:moderate`, 'testGroup2'),
|
||||
async.apply(groups.destroy, 'testGroup'),
|
||||
async.apply(groups.destroy, 'testGroup2'),
|
||||
], done);
|
||||
after(async () => {
|
||||
await groups.leave(`cid:${cid}:privileges:groups:moderate`, 'testGroup');
|
||||
await groups.leave(`cid:${cid}:privileges:groups:moderate`, 'testGroup2');
|
||||
await groups.destroy('testGroup');
|
||||
await groups.destroy('testGroup2');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2,18 +2,19 @@
|
||||
|
||||
|
||||
const assert = require('assert');
|
||||
const async = require('async');
|
||||
const nconf = require('nconf');
|
||||
const util = require('util');
|
||||
|
||||
const db = require('./mocks/databasemock');
|
||||
const meta = require('../src/meta');
|
||||
const user = require('../src/user');
|
||||
const topics = require('../src/topics');
|
||||
const categories = require('../src/categories');
|
||||
const groups = require('../src/groups');
|
||||
const notifications = require('../src/notifications');
|
||||
const socketNotifications = require('../src/socket.io/notifications');
|
||||
|
||||
const sleep = util.promisify(setTimeout);
|
||||
|
||||
describe('Notifications', () => {
|
||||
let uid;
|
||||
let notification;
|
||||
@@ -226,73 +227,39 @@ describe('Notifications', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should link to the first unread post in a watched topic', (done) => {
|
||||
const categories = require('../src/categories');
|
||||
const topics = require('../src/topics');
|
||||
let watcherUid;
|
||||
let cid;
|
||||
let tid;
|
||||
let pid;
|
||||
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
user.create({ username: 'watcher' }, next);
|
||||
},
|
||||
function (_watcherUid, next) {
|
||||
watcherUid = _watcherUid;
|
||||
|
||||
categories.create({
|
||||
it('should link to the first unread post in a watched topic', async () => {
|
||||
const watcherUid = await user.create({ username: 'watcher' });
|
||||
const { cid } = await categories.create({
|
||||
name: 'Test Category',
|
||||
description: 'Test category created by testing script',
|
||||
}, next);
|
||||
},
|
||||
function (category, next) {
|
||||
cid = category.cid;
|
||||
});
|
||||
|
||||
topics.post({
|
||||
const { topicData } = await topics.post({
|
||||
uid: watcherUid,
|
||||
cid: cid,
|
||||
title: 'Test Topic Title',
|
||||
content: 'The content of test topic',
|
||||
}, next);
|
||||
},
|
||||
function (topic, next) {
|
||||
tid = topic.topicData.tid;
|
||||
});
|
||||
const { tid } = topicData;
|
||||
|
||||
topics.follow(tid, watcherUid, next);
|
||||
},
|
||||
function (next) {
|
||||
topics.reply({
|
||||
await topics.follow(tid, watcherUid);
|
||||
|
||||
const { pid } = await topics.reply({
|
||||
uid: uid,
|
||||
content: 'This is the first reply.',
|
||||
tid: tid,
|
||||
}, next);
|
||||
},
|
||||
function (post, next) {
|
||||
pid = post.pid;
|
||||
});
|
||||
|
||||
topics.reply({
|
||||
await topics.reply({
|
||||
uid: uid,
|
||||
content: 'This is the second reply.',
|
||||
tid: tid,
|
||||
}, next);
|
||||
},
|
||||
function (post, next) {
|
||||
});
|
||||
// notifications are sent asynchronously with a 1 second delay.
|
||||
setTimeout(next, 3000);
|
||||
},
|
||||
function (next) {
|
||||
user.notifications.get(watcherUid, next);
|
||||
},
|
||||
function (notifications, next) {
|
||||
await sleep(3000);
|
||||
const notifications = await user.notifications.get(watcherUid);
|
||||
assert.equal(notifications.unread.length, 1, 'there should be 1 unread notification');
|
||||
assert.equal(`${nconf.get('relative_path')}/post/${pid}`, notifications.unread[0].path, 'the notification should link to the first unread post');
|
||||
next();
|
||||
},
|
||||
], (err) => {
|
||||
assert.ifError(err);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should get notification by nid', (done) => {
|
||||
@@ -403,41 +370,22 @@ describe('Notifications', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should send notification to followers of user when he posts', (done) => {
|
||||
let followerUid;
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
user.create({ username: 'follower' }, next);
|
||||
},
|
||||
function (_followerUid, next) {
|
||||
followerUid = _followerUid;
|
||||
user.follow(followerUid, uid, next);
|
||||
},
|
||||
function (next) {
|
||||
categories.create({
|
||||
it('should send notification to followers of user when he posts', async () => {
|
||||
const followerUid = await user.create({ username: 'follower' });
|
||||
await user.follow(followerUid, uid);
|
||||
const { cid } = await categories.create({
|
||||
name: 'Test Category',
|
||||
description: 'Test category created by testing script',
|
||||
}, next);
|
||||
},
|
||||
function (category, next) {
|
||||
topics.post({
|
||||
});
|
||||
await topics.post({
|
||||
uid: uid,
|
||||
cid: category.cid,
|
||||
cid: cid,
|
||||
title: 'Test Topic Title',
|
||||
content: 'The content of test topic',
|
||||
}, next);
|
||||
},
|
||||
function (data, next) {
|
||||
setTimeout(next, 1100);
|
||||
},
|
||||
function (next) {
|
||||
user.notifications.getAll(followerUid, '', next);
|
||||
},
|
||||
], (err, data) => {
|
||||
assert.ifError(err);
|
||||
assert(data);
|
||||
done();
|
||||
});
|
||||
await sleep(1100);
|
||||
const data = await user.notifications.getAll(followerUid, '');
|
||||
assert(data);
|
||||
});
|
||||
|
||||
it('should send welcome notification', (done) => {
|
||||
|
||||
Reference in New Issue
Block a user