From cc96ecfd7454240a9b32e855ce82d1a672c177b0 Mon Sep 17 00:00:00 2001 From: Simon Detheridge Date: Thu, 25 Apr 2019 15:20:28 +0100 Subject: [PATCH] Merge pull request #1734 from sharelatex/spd-delete-user-crash Don't fail in refreshFeatures if the v1 user doesn't exist GitOrigin-RevId: 7849f5f942ef39762b40c31a616b51b4b1fe0706 --- .../Features/Subscription/FeaturesUpdater.coffee | 1 + .../Subscription/V1SubscriptionManager.coffee | 7 +++++-- .../V1SusbcriptionManagerTests.coffee | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/services/web/app/coffee/Features/Subscription/FeaturesUpdater.coffee b/services/web/app/coffee/Features/Subscription/FeaturesUpdater.coffee index 32662b76c6..d95596b060 100644 --- a/services/web/app/coffee/Features/Subscription/FeaturesUpdater.coffee +++ b/services/web/app/coffee/Features/Subscription/FeaturesUpdater.coffee @@ -54,6 +54,7 @@ module.exports = FeaturesUpdater = _getV1Features: (user_id, callback = (error, features = {}) ->) -> V1SubscriptionManager.getPlanCodeFromV1 user_id, (err, planCode, v1Id) -> if err? + return callback(null, []) if err?.name == 'NotFoundError' return callback(err) callback(err, FeaturesUpdater._mergeFeatures( diff --git a/services/web/app/coffee/Features/Subscription/V1SubscriptionManager.coffee b/services/web/app/coffee/Features/Subscription/V1SubscriptionManager.coffee index 0e63259734..0ebb3317a9 100644 --- a/services/web/app/coffee/Features/Subscription/V1SubscriptionManager.coffee +++ b/services/web/app/coffee/Features/Subscription/V1SubscriptionManager.coffee @@ -2,7 +2,7 @@ UserGetter = require "../User/UserGetter" request = require "request" settings = require "settings-sharelatex" logger = require "logger-sharelatex" -{ V1ConnectionError } = require "../Errors/Errors" +{ V1ConnectionError, NotFoundError } = require "../Errors/Errors" module.exports = V1SubscriptionManager = # Returned planCode = 'v1_pro' | 'v1_pro_plus' | 'v1_student' | 'v1_free' | null @@ -97,4 +97,7 @@ module.exports = V1SubscriptionManager = if 200 <= response.statusCode < 300 return callback null, body, v1Id else - return callback new Error("non-success code from v1: #{response.statusCode}") + if response.statusCode == 404 + return callback new NotFoundError("v1 user not found: #{userId}") + else + return callback new Error("non-success code from v1: #{response.statusCode}") diff --git a/services/web/test/unit/coffee/Subscription/V1SusbcriptionManagerTests.coffee b/services/web/test/unit/coffee/Subscription/V1SusbcriptionManagerTests.coffee index 7666a418bb..aefa7d1f30 100644 --- a/services/web/test/unit/coffee/Subscription/V1SusbcriptionManagerTests.coffee +++ b/services/web/test/unit/coffee/Subscription/V1SusbcriptionManagerTests.coffee @@ -179,6 +179,20 @@ describe 'V1SubscriptionManager', -> expect(err).to.exist done() + describe 'when the call returns an http not-found status code', -> + beforeEach -> + @V1SubscriptionManager.v1IdForUser = sinon.stub() + .yields(null, @v1UserId) + @request.yields(null, { statusCode: 404 }, "{}") + @call = (cb) => + @V1SubscriptionManager._v1Request @user_id, { url: () -> '/foo' }, cb + + it 'should produce an not-found error', (done) -> + @call (err, body, v1Id) => + expect(err).to.exist + expect(err.name).to.equal 'NotFoundError' + done() + describe 'v1IdForUser', -> beforeEach -> @UserGetter.getUser = sinon.stub() @@ -221,4 +235,4 @@ describe 'V1SubscriptionManager', -> it 'should return the v1 user id', (done) -> @call (err, user_id) => expect(user_id).to.eql 42 - done() \ No newline at end of file + done()