From 1d80878bf887ba89b8444a37f2c1b44a78a8f060 Mon Sep 17 00:00:00 2001 From: Tim Alby Date: Wed, 27 Jun 2018 18:43:20 +0200 Subject: [PATCH] delete affiliations on user deletion --- .../User/UserAffiliationsManager.coffee | 8 +++++++ .../coffee/Features/User/UserDeleter.coffee | 3 +++ .../User/UserAffiliationsManagerTests.coffee | 21 +++++++++++++++++++ .../unit/coffee/User/UserDeleterTests.coffee | 10 +++++++++ 4 files changed, 42 insertions(+) diff --git a/services/web/app/coffee/Features/User/UserAffiliationsManager.coffee b/services/web/app/coffee/Features/User/UserAffiliationsManager.coffee index dc78466d97..95c74eab39 100644 --- a/services/web/app/coffee/Features/User/UserAffiliationsManager.coffee +++ b/services/web/app/coffee/Features/User/UserAffiliationsManager.coffee @@ -31,6 +31,14 @@ module.exports = UserAffiliationsManager = }, callback + deleteAffiliations: (userId, callback = (error) ->) -> + makeAffiliationRequest { + method: 'DELETE' + path: "/api/v2/users/#{userId.toString()}/affiliations" + defaultErrorMessage: "Couldn't delete affiliations" + }, callback + + makeAffiliationRequest = (requestOptions, callback = (error) ->) -> return callback(null) unless settings?.apis?.v1?.url # service is not configured requestOptions.extraSuccessStatusCodes ||= [] diff --git a/services/web/app/coffee/Features/User/UserDeleter.coffee b/services/web/app/coffee/Features/User/UserDeleter.coffee index a74d0f8182..c09bebbd8c 100644 --- a/services/web/app/coffee/Features/User/UserDeleter.coffee +++ b/services/web/app/coffee/Features/User/UserDeleter.coffee @@ -4,6 +4,7 @@ ProjectDeleter = require("../Project/ProjectDeleter") logger = require("logger-sharelatex") SubscriptionHandler = require("../Subscription/SubscriptionHandler") async = require("async") +{ deleteAffiliations } = require("./UserAffiliationsManager") module.exports = @@ -22,6 +23,8 @@ module.exports = ProjectDeleter.deleteUsersProjects user._id, cb (cb)-> SubscriptionHandler.cancelSubscription user, cb + (cb)-> + deleteAffiliations user._id, cb (cb)-> user.remove cb ], (err)-> diff --git a/services/web/test/unit/coffee/User/UserAffiliationsManagerTests.coffee b/services/web/test/unit/coffee/User/UserAffiliationsManagerTests.coffee index 4c69e4d0b0..d463983cfd 100644 --- a/services/web/test/unit/coffee/User/UserAffiliationsManagerTests.coffee +++ b/services/web/test/unit/coffee/User/UserAffiliationsManagerTests.coffee @@ -103,3 +103,24 @@ describe "UserAffiliationsManager", -> should.exist(err) err.message.should.exist done() + + describe 'deleteAffiliations', -> + it 'delete affiliations', (done)-> + @request.callsArgWith(1, null, { statusCode: 200 }) + @UserAffiliationsManager.deleteAffiliations @stubbedUser._id, (err) => + should.not.exist(err) + @request.calledOnce.should.equal true + requestOptions = @request.lastCall.args[0] + expectedUrl = "v1.url/api/v2/users/#{@stubbedUser._id}/affiliations" + requestOptions.url.should.equal expectedUrl + requestOptions.method.should.equal 'DELETE' + done() + + it 'handle error', (done)-> + body = errors: 'affiliation error message' + @request.callsArgWith(1, null, { statusCode: 518 }, body) + @UserAffiliationsManager.deleteAffiliations @stubbedUser._id, (err) => + should.exist(err) + err.message.should.have.string 518 + err.message.should.have.string body.errors + done() diff --git a/services/web/test/unit/coffee/User/UserDeleterTests.coffee b/services/web/test/unit/coffee/User/UserDeleterTests.coffee index 5a00816e55..d2be2d211b 100644 --- a/services/web/test/unit/coffee/User/UserDeleterTests.coffee +++ b/services/web/test/unit/coffee/User/UserDeleterTests.coffee @@ -23,11 +23,16 @@ describe "UserDeleter", -> @SubscriptionHandler = cancelSubscription: sinon.stub().callsArgWith(1) + + @deleteAffiliations = sinon.stub().callsArgWith(1) + @UserDeleter = SandboxedModule.require modulePath, requires: "../../models/User": User: @User "../Newsletter/NewsletterManager": @NewsletterManager "../Subscription/SubscriptionHandler": @SubscriptionHandler "../Project/ProjectDeleter": @ProjectDeleter + "./UserAffiliationsManager": + deleteAffiliations: @deleteAffiliations "logger-sharelatex": @logger = { log: sinon.stub() } describe "deleteUser", -> @@ -52,3 +57,8 @@ describe "UserDeleter", -> @UserDeleter.deleteUser @user._id, (err)=> @SubscriptionHandler.cancelSubscription.calledWith(@user).should.equal true done() + + it "should delete user affiliations", (done)-> + @UserDeleter.deleteUser @user._id, (err)=> + @deleteAffiliations.calledWith(@user._id).should.equal true + done()