Просмотр исходного кода

Merge pull request #1816 from overleaf/spd-user-delete-newsletter

Don't fail to delete a user if unsubscribing from newsletter fails

GitOrigin-RevId: 8764717220d906a20a7dd0a90879a45d9dd8a7ce
Simon Detheridge 7 лет назад
Родитель
Сommit
561f54c1a3

+ 3 - 1
services/web/app/coffee/Features/User/UserDeleter.coffee

@@ -55,7 +55,9 @@ module.exports = UserDeleter =
 		return callback(new Error("no user supplied")) unless user?
 		async.series([
 			(cb)->
-				NewsletterManager.unsubscribe user, cb
+				NewsletterManager.unsubscribe user, (err) ->
+					logger.err("Failed to unsubscribe user from newsletter", user_id: user._id, error: err)
+					cb()
 			(cb)->
 				SubscriptionHandler.cancelSubscription user, cb
 			(cb)->

+ 22 - 1
services/web/test/unit/coffee/User/UserDeleterTests.coffee

@@ -50,7 +50,7 @@ describe "UserDeleter", ->
 			"../Institutions/InstitutionsAPI":
 				deleteAffiliations: @deleteAffiliations
 			"../../infrastructure/mongojs": @mongojs
-			"logger-sharelatex": @logger = { log: sinon.stub() }
+			"logger-sharelatex": @logger = { log: sinon.stub(), err: sinon.stub() }
 
 	describe "softDeleteUserForMigration", ->
 
@@ -132,3 +132,24 @@ describe "UserDeleter", ->
 			@UserDeleter.deleteUser @user._id, (err)=>
 				@UserMembershipsHandler.removeUserFromAllEntities.calledWith(@user._id).should.equal true
 				done()
+
+		describe "when unsubscribing from mailchimp fails", ->
+			beforeEach ->
+				@NewsletterManager.unsubscribe = sinon.stub().callsArgWith(1, new Error("something went wrong"))
+
+			it "should not return an error", (done) ->
+				@UserDeleter.deleteUser @user._id, (err)=>
+					@NewsletterManager.unsubscribe.calledWith(@user).should.equal true
+					should.not.exist(err)
+					done()
+
+			it "should delete the user", (done) ->
+				@UserDeleter.deleteUser @user._id, (err)=>
+					@NewsletterManager.unsubscribe.calledWith(@user).should.equal true
+					@user.remove.called.should.equal true
+					done()
+
+			it "should log an error", (done) ->
+				@UserDeleter.deleteUser @user._id, (err)=>
+					sinon.assert.called(@logger.err)
+					done()