Include invites count in canAddXCollaborators

This commit is contained in:
Shane Kilkelly 2016-08-02 15:42:50 +01:00
parent 2494026b85
commit 3a3688d3d0
3 changed files with 54 additions and 9 deletions

View file

@ -17,6 +17,14 @@ module.exports = CollaboratorsInviteHandler =
return callback(err)
callback(null, invites)
getInviteCount: (projectId, callback=(err, count)->) ->
logger.log {projectId}, "counting invites for project"
ProjectInvite.count {projectId: projectId}, (err, count) ->
if err?
logger.err {err, projectId}, "error getting invites from mongo"
return callback(err)
callback(null, count)
inviteToProject: (projectId, sendingUserId, email, privileges, callback=(err,invite)->) ->
logger.log {projectId, sendingUserId, email, privileges}, "adding invite"
Crypto.randomBytes 24, (err, buffer) ->

View file

@ -4,6 +4,7 @@ User = require("../../models/User").User
SubscriptionLocator = require("./SubscriptionLocator")
Settings = require("settings-sharelatex")
CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
CollaboratorsInvitesHandler = require("../Collaborators/CollaboratorsInviteHandler")
module.exports =
@ -20,10 +21,12 @@ module.exports =
return callback(error) if error?
CollaboratorsHandler.getCollaboratorCount project_id, (error, current_number) =>
return callback(error) if error?
if current_number + x_collaborators <= allowed_number or allowed_number < 0
callback null, true
else
callback null, false
CollaboratorsInvitesHandler.getInviteCount project_id, (error, invite_count) =>
return callback(error) if error?
if current_number + invite_count + x_collaborators <= allowed_number or allowed_number < 0
callback null, true
else
callback null, false
userHasSubscriptionOrIsGroupMember: (user, callback = (err, hasSubscriptionOrIsMember)->) ->
@userHasSubscription user, (err, hasSubscription, subscription)=>
@ -41,7 +44,7 @@ module.exports =
hasValidSubscription = subscription? and (subscription.recurlySubscription_id? or subscription?.customAccount == true)
logger.log user:user, hasValidSubscription:hasValidSubscription, subscription:subscription, "checking if user has subscription"
callback err, hasValidSubscription, subscription
userIsMemberOfGroupSubscription: (user, callback = (error, isMember, subscriptions) ->) ->
logger.log user_id: user._id, "checking is user is member of subscription groups"
SubscriptionLocator.getMemberSubscriptions user._id, (err, subscriptions = []) ->
@ -65,4 +68,3 @@ getOwnerOfProject = (project_id, callback)->
return callback(error) if error?
User.findById project.owner_ref, (error, owner) ->
callback(error, owner)

View file

@ -30,6 +30,7 @@ describe "LimitationsManager", ->
'./SubscriptionLocator':@SubscriptionLocator
'settings-sharelatex' : @Settings = {}
"../Collaborators/CollaboratorsHandler": @CollaboratorsHandler = {}
"../Collaborators/CollaboratorsInviteHandler": @CollaboratorsInviteHandler = {}
'logger-sharelatex':log:->
describe "allowedNumberOfCollaboratorsInProject", ->
@ -56,6 +57,7 @@ describe "LimitationsManager", ->
describe "canAddXCollaborators", ->
beforeEach ->
@CollaboratorsHandler.getCollaboratorCount = (project_id, callback) => callback(null, @current_number)
@CollaboratorsInviteHandler.getInviteCount = (project_id, callback) => callback(null, @invite_count)
sinon.stub @LimitationsManager,
"allowedNumberOfCollaboratorsInProject",
(project_id, callback) => callback(null, @allowed_number)
@ -65,6 +67,17 @@ describe "LimitationsManager", ->
beforeEach ->
@current_number = 1
@allowed_number = 2
@invite_count = 0
@LimitationsManager.canAddXCollaborators(@project_id, 1, @callback)
it "should return true", ->
@callback.calledWith(null, true).should.equal true
describe "when the project has fewer collaborators and invites than allowed", ->
beforeEach ->
@current_number = 1
@allowed_number = 4
@invite_count = 1
@LimitationsManager.canAddXCollaborators(@project_id, 1, @callback)
it "should return true", ->
@ -74,6 +87,7 @@ describe "LimitationsManager", ->
beforeEach ->
@current_number = 1
@allowed_number = 2
@invite_count = 0
@LimitationsManager.canAddXCollaborators(@project_id, 2, @callback)
it "should return false", ->
@ -83,6 +97,7 @@ describe "LimitationsManager", ->
beforeEach ->
@current_number = 3
@allowed_number = 2
@invite_count = 0
@LimitationsManager.canAddXCollaborators(@project_id, 1, @callback)
it "should return false", ->
@ -92,11 +107,31 @@ describe "LimitationsManager", ->
beforeEach ->
@current_number = 100
@allowed_number = -1
@invite_count = 0
@LimitationsManager.canAddXCollaborators(@project_id, 1, @callback)
it "should return true", ->
@callback.calledWith(null, true).should.equal true
describe 'when the project has more invites than allowed', ->
beforeEach ->
@current_number = 0
@allowed_number = 2
@invite_count = 2
@LimitationsManager.canAddXCollaborators(@project_id, 1, @callback)
it "should return false", ->
@callback.calledWith(null, false).should.equal true
describe 'when the project has more invites and collaborators than allowed', ->
beforeEach ->
@current_number = 1
@allowed_number = 2
@invite_count = 1
@LimitationsManager.canAddXCollaborators(@project_id, 1, @callback)
it "should return false", ->
@callback.calledWith(null, false).should.equal true
describe "userHasSubscription", ->
beforeEach ->
@ -193,7 +228,7 @@ describe "LimitationsManager", ->
@LimitationsManager.userHasSubscriptionOrIsGroupMember @user, (err, hasSubOrIsGroupMember)->
hasSubOrIsGroupMember.should.equal false
done()
describe "hasGroupMembersLimitReached", ->
beforeEach ->
@ -214,10 +249,10 @@ describe "LimitationsManager", ->
@LimitationsManager.hasGroupMembersLimitReached @user_id, (err, limitReached)->
limitReached.should.equal false
done()
it "should return true if the limit has been exceded", (done)->
@subscription.membersLimit = 0
@SubscriptionLocator.getUsersSubscription.callsArgWith(1, null, @subscription)
@LimitationsManager.hasGroupMembersLimitReached @user_id, (err, limitReached)->
limitReached.should.equal true
done()
done()