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

Merge pull request #2761 from overleaf/jpa-user-controller-bail-out-next

[UserController] updateUserSettings: bail out after calling next(err)

GitOrigin-RevId: f1905c0c54f3feb98836443cbf8e080888d4901c
Eric Mc Sween 6 лет назад
Родитель
Сommit
d8615ddba3

+ 1 - 1
services/web/app/src/Features/User/UserController.js

@@ -248,7 +248,7 @@ const UserController = {
                 errorData.info.public.message = req.i18n.translate(
                   'problem_changing_email_address'
                 )
-                next(
+                return next(
                   new HttpErrors.InternalServerError(errorData).withCause(err)
                 )
               }

+ 19 - 0
services/web/test/unit/src/User/UserControllerTests.js

@@ -405,6 +405,25 @@ describe('UserController', function() {
       this.UserController.updateUserSettings(this.req, this.res)
     })
 
+    describe('when changeEmailAddress yields an error', function() {
+      it('should pass on an error and not send a success status', function(done) {
+        this.req.body.email = this.newEmail.toUpperCase()
+        this.UserUpdater.changeEmailAddress.callsArgWith(2, new Error())
+        const next = err => {
+          expect(err).to.exist
+          process.nextTick(() => {
+            // logic in User.findById
+            expect(this.res.send.called).to.equal(false)
+            expect(this.res.sendStatus.called).to.equal(false)
+            // logic after error handling
+            expect(this.User.findById.callCount).to.equal(1)
+            done()
+          })
+        }
+        this.UserController.updateUserSettings(this.req, this.res, next)
+      })
+    })
+
     describe('when using an external auth source', function() {
       beforeEach(function() {
         this.UserUpdater.changeEmailAddress.callsArgWith(2)