#!/usr/bin/env node /* 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', pass: 'firstfakepass', site:'https://fakesite.com:443' }), "returns 200": function(err, r) { assert.strictEqual(r.code, 200); } } }); // wait for the token suite.addBatch({ "a token": { topic: function() { 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', pass: 'firstfakepass', site:'http://fakesite.com:80' }), "is throttled": function(err, r) { assert.strictEqual(r.code, 429); } } }); suite.addBatch({ "finishing creating the first account": { topic: function() { wsapi.post('/wsapi/complete_user_creation', { token: token }).call(this); }, "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', site:'https://fakesite.com' }), "works": function(err, r) { assert.strictEqual(r.code, 200); } } }); // wait for the token suite.addBatch({ "a token": { topic: function() { 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', 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() { wsapi.post('/wsapi/complete_email_confirmation', { token: token }).call(this); }, "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);