This commit is contained in:
Lesley Norton 2018-09-12 15:47:01 -05:00
Родитель 9033f74045
Коммит 8bdc0fd909
3 изменённых файлов: 10 добавлений и 13 удалений

Просмотреть файл

@ -1,5 +1,6 @@
"use strict";
const crypto = require("crypto");
const isemail = require("isemail");
const HIBP = require("../hibp");
const DB = require("../db/DB");
@ -8,7 +9,6 @@ const HBSHelpers = require("../hbs-helpers");
const UNSUB_REASONS = require("../unsubscribe_reasons");
const sha1 = require("../sha1-utils");
const TIPS = require("../tips");
const crypto = require("crypto");
async function add(req, res) {
@ -84,7 +84,7 @@ async function postUnsubscribe(req, res) {
const unsubscribedUser = await DB.removeSubscriberByToken(req.body.token, req.body.emailHash);
// if user backs into unsubscribe page and clicks "unsubscribe" again
if (!unsubscribedUser) {
throw new Error("This email address is not subscribed to Firefox Monitor");
throw new Error("This email address is not subscribed to Firefox Monitor.");
}
const surveyTicket = crypto.randomBytes(40).toString("hex");
@ -94,7 +94,7 @@ async function postUnsubscribe(req, res) {
}
async function getUnsubSurvey(req, res) {
function getUnsubSurvey(req, res) {
//throws error if user refreshes unsubscribe survey page after they have submitted an answer
if(!req.session.unsub) {
throw new Error("This email address is not subscribed to Firefox Monitor.");
@ -106,7 +106,7 @@ async function getUnsubSurvey(req, res) {
}
async function postUnsubSurvey(req, res) {
function postUnsubSurvey(req, res) {
//clear session in case a user subscribes / unsubscribes multiple times or with multiple email addresses.
req.session.reset();
res.send({

Просмотреть файл

@ -16,7 +16,7 @@ router.get("/verify", jsonParser, asyncMiddleware(verify));
router.use("/unsubscribe", urlEncodedParser);
router.get("/unsubscribe", asyncMiddleware(getUnsubscribe));
router.post("/unsubscribe", asyncMiddleware(postUnsubscribe));
router.get("/unsubscribe_survey", asyncMiddleware(getUnsubSurvey));
router.post("/unsubscribe_survey", jsonParser, asyncMiddleware(postUnsubSurvey));
router.get("/unsubscribe_survey", getUnsubSurvey);
router.post("/unsubscribe_survey", jsonParser, postUnsubSurvey);
module.exports = router;

Просмотреть файл

@ -109,13 +109,13 @@ test("user unsubscribe POST request with valid hash and token unsubscribes user"
const validToken = "0e2cb147-2041-4e5b-8ca9-494e773b2cf0";
const validHash = getSha1("unverifiedemail@test.com");
// Set up mocks
const req = { body: { token: validToken, emailHash: validHash } };
const req = { body: { token: validToken, emailHash: validHash }, session: {}};
const resp = httpMocks.createResponse();
// Call code-under-test
await user.postUnsubscribe(req, resp);
expect(resp.statusCode).toEqual(200);
expect(resp.statusCode).toEqual(302);
const subscriber = await DB.getSubscriberByToken(validToken);
expect(subscriber).toBeUndefined();
});
@ -134,15 +134,12 @@ test("user unsubscribe GET request with invalid token returns error", async () =
});
test("user unsubscribe POST request with invalid token and hash redirects home", async () => {
test("user unsubscribe POST request with invalid token and throws error", async () => {
const invalidToken = "123456789";
const invalidHash = "0123456789abcdef";
const req = { body: { token: invalidToken, emailHash: invalidHash } };
const resp = { redirect: jest.fn() };
await user.postUnsubscribe(req, resp);
const mockRedirectCallArgs = resp.redirect.mock.calls[0];
expect(mockRedirectCallArgs[0]).toBe("/");
await expect(user.postUnsubscribe(req, resp)).rejects.toThrow("This email address is not subscribed to Firefox Monitor.");
});