From 33aa5c732f64279cd77f4caa0e5260c52e9a3128 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 1 Jun 2015 12:43:42 +0100 Subject: [PATCH] if a domain licence link has expired render a nice message explaining they need to retry --- .../SubscriptionGroupController.coffee | 4 +++- .../SubscriptionGroupHandler.coffee | 3 ++- .../coffee/infrastructure/ExpressLocals.coffee | 4 ++++ .../app/views/subscriptions/group/invite.jade | 4 ++++ .../SubscriptionGroupControllerTests.coffee | 17 ++++++++++++++--- .../SubscriptionGroupHandlerTests.coffee | 14 +++++++++----- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee index cfba1e4a3c..8d8bd59bde 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee @@ -71,7 +71,9 @@ module.exports = if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)? return ErrorsController.notFound(req, res) SubscriptionGroupHandler.processGroupVerification req.session.user.email, subscription_id, req.query.token, (err)-> - if err? + if err? and err == "token_not_found" + res.redirect "/user/subscription/#{subscription_id}/group/invited?expired=true" + else if err? res.send 500 else res.redirect "/user/subscription/#{subscription_id}/group/successful-join" diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionGroupHandler.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionGroupHandler.coffee index c3ec62504b..ffd436943a 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionGroupHandler.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionGroupHandler.coffee @@ -61,9 +61,10 @@ module.exports = SubscriptionGroupHandler = processGroupVerification: (userEmail, subscription_id, token, callback)-> OneTimeTokenHandler.getValueFromTokenAndExpire token, (err, token_subscription_id)-> + if err? or subscription_id != token_subscription_id logger.err userEmail:userEmail, token:token, "token value not found for processing group verification" - return callback("token not found") + return callback("token_not_found") SubscriptionLocator.getSubscription subscription_id, (err, subscription)-> SubscriptionGroupHandler.addUserToGroup subscription.admin_id, userEmail, callback diff --git a/services/web/app/coffee/infrastructure/ExpressLocals.coffee b/services/web/app/coffee/infrastructure/ExpressLocals.coffee index f71e50e38c..4e67152b44 100644 --- a/services/web/app/coffee/infrastructure/ExpressLocals.coffee +++ b/services/web/app/coffee/infrastructure/ExpressLocals.coffee @@ -155,6 +155,10 @@ module.exports = (app)-> res.locals.systemMessages = messages next() + app.use (req, res, next)-> + res.locals.query = req.query + next() + app.use (req, res, next)-> subdomain = _.find Settings.i18n.subdomainLang, (subdomain)-> subdomain.lngCode == req.showUserOtherLng and !subdomain.hide diff --git a/services/web/app/views/subscriptions/group/invite.jade b/services/web/app/views/subscriptions/group/invite.jade index 78b8da11ca..1885ea20b8 100644 --- a/services/web/app/views/subscriptions/group/invite.jade +++ b/services/web/app/views/subscriptions/group/invite.jade @@ -7,6 +7,10 @@ block scripts block content .content.content-alt .container + .row + .col-md-8.col-md-offset-2 + -if (query.expired) + .alert.alert-warning #{translate("email_link_expired")} .row .col-md-8.col-md-offset-2(ng-cloak) .card(ng-controller="GroupSubscriptionInviteController") diff --git a/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee b/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee index 4060dea69f..8c3181da03 100644 --- a/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee @@ -5,7 +5,7 @@ assert = require("chai").assert modulePath = "../../../../app/js/Features/Subscription/SubscriptionGroupController" MockResponse = require "../helpers/MockResponse" -describe "Subscription Group Controller", -> +describe "SubscriptionGroupController", -> beforeEach -> @user = {_id:"!@312431",email:"user@email.com"} @@ -159,13 +159,24 @@ describe "Subscription Group Controller", -> @Controller.completeJoin @req, res describe "without a valid licence", -> - beforeEach -> - @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined) it "should send a 500", (done)-> + @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined) @Controller.completeJoin @req, {} @ErrorsController.notFound.called.should.equal true done() + + it "should redirect to the invited page with querystring if token was not found", (done)-> + @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({name:@licenceName}) + @req.query.token = @token + @GroupHandler.processGroupVerification.callsArgWith(3, "token_not_found") + res = + redirect : (location)=> + location.should.equal "/user/subscription/#{@subscription_id}/group/invited?expired=true" + done() + @Controller.completeJoin @req, res + + describe "exportGroupCsv", -> beforeEach -> diff --git a/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupHandlerTests.coffee b/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupHandlerTests.coffee index 03af764442..28c781ab59 100644 --- a/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupHandlerTests.coffee @@ -5,7 +5,7 @@ assert = require("chai").assert modulePath = "../../../../app/js/Features/Subscription/SubscriptionGroupHandler" -describe "Subscription Group Handler", -> +describe "SubscriptionGroupHandler", -> beforeEach -> @adminUser_id = "12321" @@ -143,7 +143,7 @@ describe "Subscription Group Handler", -> @subscription_id = "123ed13123" @licenceName = "great licnece" @email = "bob@smith.com" - @OneTimeTokenHandler.getNewToken.callsArgWith(1, null, @token) + @OneTimeTokenHandler.getNewToken.callsArgWith(2, null, @token) @EmailHandler.sendEmail.callsArgWith(2) it "should put a one time token into the email", (done)-> @@ -159,18 +159,22 @@ describe "Subscription Group Handler", -> @token = "31dDAd2Da" @subscription_id = "31DSd1123D" @admin_id = "eDSda1ew" - @OneTimeTokenHandler.getValueFromTokenAndExpire.callsArgWith(1, null, @subscription_id) @SubscriptionLocator.getSubscription.callsArgWith(1, null, {admin_id:@admin_id}) @Handler.addUserToGroup = sinon.stub().callsArgWith(2) it "should addUserToGroup", (done)-> + @OneTimeTokenHandler.getValueFromTokenAndExpire.callsArgWith(1, null, @subscription_id) @Handler.processGroupVerification @email, @subscription_id, @token, (err)=> @Handler.addUserToGroup.calledWith(@admin_id, @email).should.equal true done() + it "should return token_not_found error if it couldn't get the token", (done)-> + @OneTimeTokenHandler.getValueFromTokenAndExpire.callsArgWith(1) + @Handler.processGroupVerification @email, @subscription_id, @token, (err)=> + err.should.equal "token_not_found" + done() + - -