Don't add old v1 features for new accounts

Introduces the notion of v1 'grandfathered features', specifically Gihub and Mendeley integration. This allows us to create new v1 accounts for new users without them automatically getting the new features.

Requires a settings change in `settings.web.sl.coffee` to disable these features by default for v1 accounts.

bug: overleaf/sharelatex#1014
This commit is contained in:
Simon Detheridge
2018-10-12 17:45:57 +01:00
parent 1256d29af9
commit 48995d2d44
3 changed files with 101 additions and 16 deletions
@@ -15,10 +15,14 @@ describe 'V1SubscriptionManager', ->
log: sinon.stub()
err: sinon.stub()
warn: sinon.stub()
"settings-sharelatex":
"settings-sharelatex": @Settings =
apis:
v1:
host: @host = "http://overleaf.example.com"
v1GrandfatheredFeaturesUidCutoff: 10
v1GrandfatheredFeatures:
github: true
mendeley: true
"request": @request = sinon.stub()
@userId = 'abcd'
@v1UserId = 42
@@ -67,14 +71,27 @@ describe 'V1SubscriptionManager', ->
expect(planCode).to.equal null
done()
describe 'getGrandfatheredFeaturesForV1User', ->
describe 'when the user ID is greater than the cutoff', ->
it 'should return an empty feature set', (done) ->
expect(@V1SubscriptionManager.getGrandfatheredFeaturesForV1User 100).to.eql {}
done()
describe 'when the user ID is less than the cutoff', ->
it 'should return a feature set with grandfathered properties for github and mendeley', (done) ->
expect(@V1SubscriptionManager.getGrandfatheredFeaturesForV1User 1).to.eql
github: true
mendeley: true
done()
describe '_v1Request', ->
beforeEach ->
@UserGetter.getUser = sinon.stub()
.yields(null, @user)
describe 'when getUser produces an error', ->
describe 'when v1IdForUser produces an error', ->
beforeEach ->
@UserGetter.getUser = sinon.stub()
@V1SubscriptionManager.v1IdForUser = sinon.stub()
.yields(new Error('woops'))
@call = (cb) =>
@V1SubscriptionManager._v1Request @user_id, { url: () -> '/foo' }, cb
@@ -91,9 +108,9 @@ describe 'V1SubscriptionManager', ->
expect(err).to.exist
done()
describe 'when getUser does not find a user', ->
describe 'when v1IdForUser does not find a user', ->
beforeEach ->
@UserGetter.getUser = sinon.stub()
@V1SubscriptionManager.v1IdForUser = sinon.stub()
.yields(null, null)
@call = (cb) =>
@V1SubscriptionManager._v1Request @user_id, { url: () -> '/foo' }, cb
@@ -120,3 +137,47 @@ describe 'V1SubscriptionManager', ->
@call (err) =>
expect(err).to.exist
done()
describe 'v1IdForUser', ->
beforeEach ->
@UserGetter.getUser = sinon.stub()
.yields(null, @user)
describe 'when getUser produces an error', ->
beforeEach ->
@UserGetter.getUser = sinon.stub()
.yields(new Error('woops'))
@call = (cb) =>
@V1SubscriptionManager.v1IdForUser @user_id, cb
it 'should produce an error', (done) ->
@call (err) =>
expect(err).to.exist
done()
describe 'when getUser does not find a user', ->
beforeEach ->
@UserGetter.getUser = sinon.stub()
.yields(null, null)
@call = (cb) =>
@V1SubscriptionManager.v1IdForUser @user_id, cb
it 'should not error', (done) ->
@call (err, user_id) =>
expect(err).to.not.exist
done()
describe 'when it works', ->
beforeEach ->
@call = (cb) =>
@V1SubscriptionManager.v1IdForUser @user_id, cb
it 'should not error', (done) ->
@call (err, user_id) =>
expect(err).to.not.exist
done()
it 'should return the v1 user id', (done) ->
@call (err, user_id) =>
expect(user_id).to.eql 42
done()