mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
test: add email interstitial tests
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const winston = require('winston');
|
||||
|
||||
const user = require('.');
|
||||
const db = require('../database');
|
||||
const meta = require('../meta');
|
||||
@@ -58,6 +60,8 @@ Interstitials.email = async (data) => {
|
||||
await user.email.sendValidationEmail(userData.uid, {
|
||||
email: formData.email,
|
||||
force: true,
|
||||
}).catch((err) => {
|
||||
winston.error(`[user.create] Validation email failed to send\n[emailer.send] ${err.stack}`);
|
||||
});
|
||||
data.req.session.emailChanged = 1;
|
||||
} else {
|
||||
|
||||
@@ -26,42 +26,31 @@ describe('Controllers', () => {
|
||||
let cid;
|
||||
let pid;
|
||||
let fooUid;
|
||||
let adminUid;
|
||||
let category;
|
||||
|
||||
before((done) => {
|
||||
async.series({
|
||||
category: function (next) {
|
||||
categories.create({
|
||||
before(async () => {
|
||||
category = await categories.create({
|
||||
name: 'Test Category',
|
||||
description: 'Test category created by testing script',
|
||||
}, next);
|
||||
},
|
||||
user: async () => {
|
||||
const uid = await user.create({ username: 'foo', password: 'barbar', gdpr_consent: true });
|
||||
await user.setUserField(uid, 'email', 'foo@test.com');
|
||||
await user.email.confirmByUid(uid);
|
||||
return uid;
|
||||
},
|
||||
navigation: function (next) {
|
||||
});
|
||||
cid = category.cid;
|
||||
|
||||
fooUid = await user.create({ username: 'foo', password: 'barbar', gdpr_consent: true });
|
||||
await user.setUserField(fooUid, 'email', 'foo@test.com');
|
||||
await user.email.confirmByUid(fooUid);
|
||||
|
||||
adminUid = await user.create({ username: 'admin', password: 'barbar', gdpr_consent: true });
|
||||
await groups.join('administrators', adminUid);
|
||||
|
||||
const navigation = require('../src/navigation/admin');
|
||||
const data = require('../install/data/navigation.json');
|
||||
|
||||
navigation.save(data, next);
|
||||
},
|
||||
}, (err, results) => {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
category = results.category;
|
||||
cid = results.category.cid;
|
||||
fooUid = results.user;
|
||||
await navigation.save(data);
|
||||
|
||||
topics.post({ uid: results.user, title: 'test topic title', content: 'test topic content', cid: results.category.cid }, (err, result) => {
|
||||
const result = await topics.post({ uid: fooUid, title: 'test topic title', content: 'test topic content', cid: cid });
|
||||
tid = result.topicData.tid;
|
||||
pid = result.postData.pid;
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should load /config with csrf_token', (done) => {
|
||||
@@ -415,6 +404,99 @@ describe('Controllers', () => {
|
||||
assert.strictEqual(res.statusCode, 302);
|
||||
assert.strictEqual(res.headers.location, `${nconf.get('relative_path')}/`);
|
||||
});
|
||||
|
||||
it('should error if userData is falsy', async () => {
|
||||
try {
|
||||
await user.interstitials.email({ userData: null });
|
||||
assert(false);
|
||||
} catch (err) {
|
||||
assert.strictEqual(err.message, '[[error:invalid-data]]');
|
||||
}
|
||||
});
|
||||
|
||||
it('should throw error if email is not valid', async () => {
|
||||
const uid = await user.create({ username: 'interstiuser1' });
|
||||
try {
|
||||
const result = await user.interstitials.email({
|
||||
userData: { uid: uid, updateEmail: true },
|
||||
req: { uid: uid },
|
||||
interstitials: [],
|
||||
});
|
||||
assert.strictEqual(result.interstitials[0].template, 'partials/email_update');
|
||||
await result.interstitials[0].callback({ uid: uid }, {
|
||||
email: 'invalidEmail',
|
||||
});
|
||||
assert(false);
|
||||
} catch (err) {
|
||||
assert.strictEqual(err.message, '[[error:invalid-email]]');
|
||||
}
|
||||
});
|
||||
|
||||
it('should set req.session.emailChanged to 1', async () => {
|
||||
const uid = await user.create({ username: 'interstiuser2' });
|
||||
const result = await user.interstitials.email({
|
||||
userData: { uid: uid, updateEmail: true },
|
||||
req: { uid: uid, session: {} },
|
||||
interstitials: [],
|
||||
});
|
||||
|
||||
await result.interstitials[0].callback({ uid: uid }, {
|
||||
email: 'interstiuser2@nodebb.org',
|
||||
});
|
||||
assert.strictEqual(result.req.session.emailChanged, 1);
|
||||
});
|
||||
|
||||
it('should set email if admin is changing it', async () => {
|
||||
const uid = await user.create({ username: 'interstiuser3' });
|
||||
const result = await user.interstitials.email({
|
||||
userData: { uid: uid, updateEmail: true },
|
||||
req: { uid: adminUid },
|
||||
interstitials: [],
|
||||
});
|
||||
|
||||
await result.interstitials[0].callback({ uid: uid }, {
|
||||
email: 'interstiuser3@nodebb.org',
|
||||
});
|
||||
const userData = await user.getUserData(uid);
|
||||
assert.strictEqual(userData.email, 'interstiuser3@nodebb.org');
|
||||
assert.strictEqual(userData['email:confirmed'], 1);
|
||||
});
|
||||
|
||||
it('should throw error if user tries to edit other users email', async () => {
|
||||
const uid = await user.create({ username: 'interstiuser4' });
|
||||
try {
|
||||
const result = await user.interstitials.email({
|
||||
userData: { uid: uid, updateEmail: true },
|
||||
req: { uid: 1000 },
|
||||
interstitials: [],
|
||||
});
|
||||
|
||||
await result.interstitials[0].callback({ uid: uid }, {
|
||||
email: 'derp@derp.com',
|
||||
});
|
||||
assert(false);
|
||||
} catch (err) {
|
||||
assert.strictEqual(err.message, '[[error:no-privileges]]');
|
||||
}
|
||||
});
|
||||
|
||||
it('should remove current email', async () => {
|
||||
const uid = await user.create({ username: 'interstiuser5', email: 'interstiuser5@nodebb.org' });
|
||||
await user.email.confirmByUid(uid);
|
||||
|
||||
const result = await user.interstitials.email({
|
||||
userData: { uid: uid, updateEmail: true },
|
||||
req: { uid: uid, session: { id: 0 } },
|
||||
interstitials: [],
|
||||
});
|
||||
|
||||
await result.interstitials[0].callback({ uid: uid }, {
|
||||
email: '',
|
||||
});
|
||||
const userData = await user.getUserData(uid);
|
||||
assert.strictEqual(userData.email, '');
|
||||
assert.strictEqual(userData['email:confirmed'], 0);
|
||||
});
|
||||
});
|
||||
|
||||
it('should load /robots.txt', (done) => {
|
||||
|
||||
Reference in New Issue
Block a user