Newer
Older
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
require('./lib/test_env.js');
const
assert = require('assert'),
vows = require('vows'),
start_stop = require('./lib/start-stop.js'),
wsapi = require('./lib/wsapi.js');
var suite = vows.describe('email-throttling');
var token;
// start up a pristine server
start_stop.addStartupBatches(suite);
// now stage a registration (causing an email to be sent)
suite.addBatch({
"staging a registration": {
topic: wsapi.post('/wsapi/stage_user', {
email: 'first@fakeemail.com',
Shane Tomlinson
committed
pass: 'firstfakepass',
Ben Adida
committed
site:'https://fakesite.com:443'
Lloyd Hilaiel
committed
"returns 200": function(err, r) {
assert.strictEqual(r.code, 200);
}
}
});
// wait for the token
suite.addBatch({
"a token": {
topic: function() {
Lloyd Hilaiel
committed
start_stop.waitForToken(this.callback);
},
"is obtained": function (t) {
assert.strictEqual(typeof t, 'string');
token = t;
}
}
});
suite.addBatch({
"immediately staging another": {
topic: wsapi.post('/wsapi/stage_user', {
email: 'first@fakeemail.com',
Shane Tomlinson
committed
pass: 'firstfakepass',
Ben Adida
committed
site:'http://fakesite.com:80'
Lloyd Hilaiel
committed
"is throttled": function(err, r) {
assert.strictEqual(r.code, 429);
}
}
});
suite.addBatch({
"finishing creating the first account": {
topic: function() {
Shane Tomlinson
committed
wsapi.post('/wsapi/complete_user_creation', { token: token }).call(this);
Lloyd Hilaiel
committed
"works": function(err, r) {
assert.equal(r.code, 200);
assert.strictEqual(true, JSON.parse(r.body).success);
token = undefined;
}
}
});
suite.addBatch({
"add a new email address to our account": {
topic: wsapi.post('/wsapi/stage_email', {
email: 'second@fakeemail.com',
Ben Adida
committed
site:'https://fakesite.com'
Lloyd Hilaiel
committed
"works": function(err, r) {
assert.strictEqual(r.code, 200);
}
}
});
// wait for the token
suite.addBatch({
"a token": {
topic: function() {
Lloyd Hilaiel
committed
start_stop.waitForToken(this.callback);
},
"is obtained": function (t) {
assert.strictEqual(typeof t, 'string');
token = t;
}
}
});
suite.addBatch({
"re-adding that same new email address a second time": {
topic: wsapi.post('/wsapi/stage_email', {
email: 'second@fakeemail.com',
Ben Adida
committed
site:'http://fakesite.com'
"is throttled with a 429": function(err, r) {
assert.strictEqual(r.code, 429);
}
}
});
suite.addBatch({
"and when we attempt to finish adding the email address": {
topic: function() {
Lloyd Hilaiel
committed
wsapi.post('/wsapi/complete_email_confirmation', { token: token }).call(this);
Lloyd Hilaiel
committed
"it works swimmingly": function(err, r) {
assert.equal(r.code, 200);
assert.strictEqual(JSON.parse(r.body).success, true);
token = undefined;
}
}
});
// shut the server down and cleanup
start_stop.addShutdownBatches(suite);
// run or export the suite.
if (process.argv[1] === __filename) suite.run();
else suite.export(module);