mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
update the entire users features on assign bonus bu don't update
the user features if there is nothing to update when assigning bonus
This commit is contained in:
parent
a73b2ceb37
commit
f1d07811df
2 changed files with 32 additions and 12 deletions
|
@ -38,28 +38,29 @@ module.exports = ReferalAllocator =
|
||||||
return callback(new Error("user not found")) if !user?
|
return callback(new Error("user not found")) if !user?
|
||||||
logger.log user_id: user_id, refered_user_count: user.refered_user_count, "assigning bonus"
|
logger.log user_id: user_id, refered_user_count: user.refered_user_count, "assigning bonus"
|
||||||
if user.refered_user_count? and user.refered_user_count > 0
|
if user.refered_user_count? and user.refered_user_count > 0
|
||||||
newFeatures = ReferalAllocator._calculateBonuses(user)
|
newFeatures = ReferalAllocator._calculateFeatures(user)
|
||||||
|
if _.isEqual newFeatures, user.features
|
||||||
|
return callback()
|
||||||
User.update query, { $set: features: newFeatures }, callback
|
User.update query, { $set: features: newFeatures }, callback
|
||||||
|
|
||||||
else
|
else
|
||||||
callback()
|
callback()
|
||||||
|
|
||||||
_calculateBonuses : (user)->
|
|
||||||
bonusLevel = ReferalAllocator._getBonusLevel(user)
|
|
||||||
|
|
||||||
newFeatures = {}
|
_calculateFeatures : (user)->
|
||||||
|
bonusLevel = ReferalAllocator._getBonusLevel(user)
|
||||||
|
currentFeatures = _.clone(user.features) #need to clone because we exend with underscore later
|
||||||
|
betterBonusFeatures = {}
|
||||||
_.each Settings.bonus_features["#{bonusLevel}"], (bonusLevel, key)->
|
_.each Settings.bonus_features["#{bonusLevel}"], (bonusLevel, key)->
|
||||||
currentLevel = user?.features?[key]
|
currentLevel = user?.features?[key]
|
||||||
if _.isBoolean(currentLevel) and currentLevel == false
|
if _.isBoolean(currentLevel) and currentLevel == false
|
||||||
newFeatures[key] = bonusLevel
|
betterBonusFeatures[key] = bonusLevel
|
||||||
|
|
||||||
if _.isNumber(currentLevel)
|
if _.isNumber(currentLevel)
|
||||||
if currentLevel == -1
|
if currentLevel == -1
|
||||||
return
|
return
|
||||||
bonusIsGreaterThanCurrent = currentLevel < bonusLevel
|
bonusIsGreaterThanCurrent = currentLevel < bonusLevel
|
||||||
if bonusIsGreaterThanCurrent or bonusLevel == -1
|
if bonusIsGreaterThanCurrent or bonusLevel == -1
|
||||||
newFeatures[key] = bonusLevel
|
betterBonusFeatures[key] = bonusLevel
|
||||||
|
newFeatures = _.extend(currentFeatures, betterBonusFeatures)
|
||||||
return newFeatures
|
return newFeatures
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ describe 'Referalallocator', ->
|
||||||
features:{collaborators:1, dropbox:false, versioning:false}
|
features:{collaborators:1, dropbox:false, versioning:false}
|
||||||
}
|
}
|
||||||
|
|
||||||
@User.findOne = sinon.stub().callsArgWith 1, null,stubbedUser
|
@User.findOne = sinon.stub().callsArgWith 1, null, stubbedUser
|
||||||
@User.update = sinon.stub().callsArgWith 2, null
|
@User.update = sinon.stub().callsArgWith 2, null
|
||||||
@ReferalAllocator.assignBonus @user_id, @callback
|
@ReferalAllocator.assignBonus @user_id, @callback
|
||||||
|
|
||||||
|
@ -110,6 +110,25 @@ describe 'Referalallocator', ->
|
||||||
it "should call the callback", ->
|
it "should call the callback", ->
|
||||||
@callback.called.should.equal true
|
@callback.called.should.equal true
|
||||||
|
|
||||||
|
describe "when there is nothing to assign", ->
|
||||||
|
|
||||||
|
beforeEach ->
|
||||||
|
@ReferalAllocator._calculateBonuses = sinon.stub().returns({})
|
||||||
|
@stubbedUser =
|
||||||
|
refered_user_count:4
|
||||||
|
features:{collaborators:3, versioning:true, dropbox:false}
|
||||||
|
@Settings.bonus_features =
|
||||||
|
"4":
|
||||||
|
collaborators:3
|
||||||
|
versioning:true
|
||||||
|
dropbox:false
|
||||||
|
@User.findOne = sinon.stub().callsArgWith 1, null, @stubbedUser
|
||||||
|
@User.update = sinon.stub().callsArgWith 2, null
|
||||||
|
|
||||||
|
it "should not call update if there are no bonuses to apply", (done)->
|
||||||
|
@ReferalAllocator.assignBonus @user_id, (err)=>
|
||||||
|
@User.update.called.should.equal false
|
||||||
|
done()
|
||||||
|
|
||||||
describe "when the user has better features already", ->
|
describe "when the user has better features already", ->
|
||||||
|
|
||||||
|
@ -138,7 +157,7 @@ describe 'Referalallocator', ->
|
||||||
it "should not overright if the user has -1 users", (done)->
|
it "should not overright if the user has -1 users", (done)->
|
||||||
@stubbedUser.features.collaborators = -1
|
@stubbedUser.features.collaborators = -1
|
||||||
@ReferalAllocator.assignBonus @user_id, =>
|
@ReferalAllocator.assignBonus @user_id, =>
|
||||||
@User.update.calledWith({_id: @user_id }, {$set: features:{dropbox:true, versioning:false} }).should.equal true
|
@User.update.calledWith({_id: @user_id }, {$set: features:{dropbox:true, versioning:false, collaborators:-1} }).should.equal true
|
||||||
done()
|
done()
|
||||||
|
|
||||||
describe "when the user is not at a bonus level", ->
|
describe "when the user is not at a bonus level", ->
|
||||||
|
|
Loading…
Reference in a new issue