test: add email interstitial tests

isekai-main
Barış Soner Uşaklı 3 years ago
parent 91e21ecc62
commit 1264dcb555

@ -1,5 +1,7 @@
'use strict'; 'use strict';
const winston = require('winston');
const user = require('.'); const user = require('.');
const db = require('../database'); const db = require('../database');
const meta = require('../meta'); const meta = require('../meta');
@ -58,6 +60,8 @@ Interstitials.email = async (data) => {
await user.email.sendValidationEmail(userData.uid, { await user.email.sendValidationEmail(userData.uid, {
email: formData.email, email: formData.email,
force: true, force: true,
}).catch((err) => {
winston.error(`[user.create] Validation email failed to send\n[emailer.send] ${err.stack}`);
}); });
data.req.session.emailChanged = 1; data.req.session.emailChanged = 1;
} else { } else {

@ -26,42 +26,31 @@ describe('Controllers', () => {
let cid; let cid;
let pid; let pid;
let fooUid; let fooUid;
let adminUid;
let category; let category;
before((done) => { before(async () => {
async.series({ category = await categories.create({
category: function (next) {
categories.create({
name: 'Test Category', name: 'Test Category',
description: 'Test category created by testing script', description: 'Test category created by testing script',
}, next); });
}, cid = category.cid;
user: async () => {
const uid = await user.create({ username: 'foo', password: 'barbar', gdpr_consent: true }); fooUid = await user.create({ username: 'foo', password: 'barbar', gdpr_consent: true });
await user.setUserField(uid, 'email', 'foo@test.com'); await user.setUserField(fooUid, 'email', 'foo@test.com');
await user.email.confirmByUid(uid); await user.email.confirmByUid(fooUid);
return uid;
}, adminUid = await user.create({ username: 'admin', password: 'barbar', gdpr_consent: true });
navigation: function (next) { await groups.join('administrators', adminUid);
const navigation = require('../src/navigation/admin'); const navigation = require('../src/navigation/admin');
const data = require('../install/data/navigation.json'); const data = require('../install/data/navigation.json');
navigation.save(data, next); await navigation.save(data);
},
}, (err, results) => {
if (err) {
return done(err);
}
category = results.category;
cid = results.category.cid;
fooUid = results.user;
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; tid = result.topicData.tid;
pid = result.postData.pid; pid = result.postData.pid;
done(err);
});
});
}); });
it('should load /config with csrf_token', (done) => { it('should load /config with csrf_token', (done) => {
@ -415,6 +404,99 @@ describe('Controllers', () => {
assert.strictEqual(res.statusCode, 302); assert.strictEqual(res.statusCode, 302);
assert.strictEqual(res.headers.location, `${nconf.get('relative_path')}/`); 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) => { it('should load /robots.txt', (done) => {

Loading…
Cancel
Save