test: additional tests for #12034

This commit is contained in:
Julian Lam
2023-09-26 13:37:43 -04:00
parent bdc221eb37
commit d7e9f32412
2 changed files with 69 additions and 4 deletions

View File

@@ -21,6 +21,7 @@ const translator = require('../src/translator');
const privileges = require('../src/privileges');
const plugins = require('../src/plugins');
const utils = require('../src/utils');
const slugify = require('../src/slugify');
const helpers = require('./helpers');
const sleep = util.promisify(setTimeout);
@@ -571,15 +572,27 @@ describe('Controllers', () => {
describe('blocking access for unconfirmed emails', () => {
let jar;
let token;
const username = utils.generateUUID().slice(0, 10);
before(async () => {
jar = await helpers.registerUser({
username: utils.generateUUID().slice(0, 10),
username,
password: utils.generateUUID(),
});
token = await helpers.getCsrfToken(jar);
});
async function abortInterstitial() {
await requestAsync(`${nconf.get('url')}/register/abort`, {
method: 'post',
jar,
simple: false,
headers: {
'x-csrf-token': token,
},
});
}
it('should not apply if requireEmailAddress is not enabled', async () => {
meta.config.requireEmailAddress = 0;
@@ -600,11 +613,12 @@ describe('Controllers', () => {
},
});
console.log(res.headers.location);
assert.strictEqual(res.headers.location, `${nconf.get('relative_path')}/`);
meta.config.requireEmailAddress = 1;
});
it('should continue to redirect back to interstitial after an email is entered, as it is not confirmed', async () => {
it('should allow access to regular resources after an email is entered, even if unconfirmed', async () => {
const res = await requestAsync(`${nconf.get('url')}/recent`, {
jar,
json: true,
@@ -613,8 +627,56 @@ describe('Controllers', () => {
simple: false,
});
assert.strictEqual(res.statusCode, 200);
});
it('should redirect back to interstitial for categories requiring validated email', async () => {
const name = utils.generateUUID();
const { cid } = await categories.create({ name });
await privileges.categories.rescind(['groups:read'], cid, ['registered-users']);
await privileges.categories.give(['groups:read'], cid, ['verified-users']);
const res = await requestAsync(`${nconf.get('url')}/category/${cid}/${slugify(name)}`, {
jar,
json: true,
resolveWithFullResponse: true,
followRedirect: false,
simple: false,
});
assert.strictEqual(res.statusCode, 307);
assert.strictEqual(res.headers.location, `${nconf.get('relative_path')}/register/complete`);
await abortInterstitial();
});
it('should redirect back to interstitial for topics requiring validated email', async () => {
const name = utils.generateUUID();
const { cid } = await categories.create({ name });
await privileges.categories.rescind(['groups:topics:read'], cid, 'registered-users');
await privileges.categories.give(['groups:topics:read'], cid, 'verified-users');
const res = await requestAsync(`${nconf.get('url')}/category/${cid}/${slugify(name)}`, {
jar,
json: true,
resolveWithFullResponse: true,
followRedirect: false,
simple: false,
});
assert.strictEqual(res.statusCode, 200);
const title = utils.generateUUID();
const uid = await user.getUidByUsername(username);
const { topicData } = await topics.post({ uid, cid, title, content: utils.generateUUID() });
const res2 = await requestAsync(`${nconf.get('url')}/topic/${topicData.tid}/${slugify(title)}`, {
jar,
json: true,
resolveWithFullResponse: true,
followRedirect: false,
simple: false,
});
assert.strictEqual(res2.statusCode, 307);
assert.strictEqual(res2.headers.location, `${nconf.get('relative_path')}/register/complete`);
await abortInterstitial();
await topics.purge(topicData.tid, uid);
});
});
});