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

don't create notification if user is already part of group

Henry Oswald 10 лет назад
Родитель
Сommit
fc4bd94a6e

+ 1 - 1
services/web/app/coffee/Features/Subscription/SubscriptionLocator.coffee

@@ -22,4 +22,4 @@ module.exports =
 		Subscription.findOne _id:subscription_id, callback
 
 	getSubscriptionByMemberIdAndId: (user_id, subscription_id, callback)->
-		Subscription.findOne member_ids: user_id, _id:subscription_id, callback
+		Subscription.findOne member_ids: user_id, _id:subscription_id, {_id:1}, callback

+ 14 - 6
services/web/app/coffee/Features/User/UserHandler.coffee

@@ -1,12 +1,20 @@
 SubscriptionDomainHandler = require("../Subscription/SubscriptionDomainHandler")
 NotificationsBuilder = require("../Notifications/NotificationsBuilder")
+SubscriptionGroupHandler = require("../Subscription/SubscriptionGroupHandler")
 
+module.exports = UserHandler =
 
-module.exports =
-
-	setupLoginData: (user, callback = ->)->
+	_populateGroupLicenceInvite: (user, callback)->
 		licence = SubscriptionDomainHandler.getLicenceUserCanJoin user
-		if licence?
-			NotificationsBuilder.groupPlan(user, licence).create(callback)
-		else
+		if !licence?
 			return callback()
+
+		SubscriptionGroupHandler.isUserPartOfGroup user._id, licence.subscription_id, (err, alreadyPartOfGroup)->
+			if err? or alreadyPartOfGroup
+				return callback(err)
+			else
+				NotificationsBuilder.groupPlan(user, licence).create(callback)
+
+	setupLoginData: (user, callback = ->)->
+		_populateGroupLicenceInvite user, callback
+

+ 69 - 0
services/web/test/UnitTests/coffee/User/UserHandlerTests.coffee

@@ -0,0 +1,69 @@
+sinon = require('sinon')
+chai = require('chai')
+should = chai.should()
+modulePath = "../../../../app/js/Features/User/UserHandler.js"
+SandboxedModule = require('sandboxed-module')
+
+describe "UserHandler", ->
+
+	beforeEach ->
+		@user = 
+			_id:"12390i"
+			email: "bob@bob.com"
+			remove: sinon.stub().callsArgWith(0)
+
+		@licence = 
+			subscription_id: 12323434
+		@SubscriptionDomainHandler =
+			getLicenceUserCanJoin: sinon.stub()
+
+		@SubscriptionGroupHandler =
+			isUserPartOfGroup:sinon.stub()
+		@createStub = sinon.stub().callsArgWith(0)
+		@NotificationsBuilder = 
+			groupPlan:sinon.stub().returns({create:@createStub})
+
+		@UserHandler = SandboxedModule.require modulePath, requires:
+			"logger-sharelatex": @logger = { log: sinon.stub() }
+			"../Notifications/NotificationsBuilder":@NotificationsBuilder
+			"../Subscription/SubscriptionDomainHandler":@SubscriptionDomainHandler
+			"../Subscription/SubscriptionGroupHandler":@SubscriptionGroupHandler
+
+	describe "_populateGroupLicenceInvite", ->
+
+		describe "no licence", ->
+			beforeEach (done)->
+				@SubscriptionDomainHandler.getLicenceUserCanJoin.returns()
+				@UserHandler._populateGroupLicenceInvite @user, done
+
+			it "should not call NotificationsBuilder", (done)->
+				@NotificationsBuilder.groupPlan.called.should.equal false
+				done()
+
+			it "should not call isUserPartOfGroup", (done)->
+				@SubscriptionGroupHandler.isUserPartOfGroup.called.should.equal false
+				done()
+
+		describe "with matching licence user is not in", ->
+
+			beforeEach (done)->
+				@SubscriptionDomainHandler.getLicenceUserCanJoin.returns(@licence)
+				@SubscriptionGroupHandler.isUserPartOfGroup.callsArgWith(2, null, false)
+				@UserHandler._populateGroupLicenceInvite @user, done
+
+			it "should create notifcation", (done)->
+				@NotificationsBuilder.groupPlan.calledWith(@user, @licence).should.equal true
+				done()
+
+
+
+		describe "with matching licence user is already in", ->
+
+			beforeEach (done)->
+				@SubscriptionDomainHandler.getLicenceUserCanJoin.returns(@licence)
+				@SubscriptionGroupHandler.isUserPartOfGroup.callsArgWith(2, null, true)
+				@UserHandler._populateGroupLicenceInvite @user, done
+
+			it "should create notifcation", (done)->
+				@NotificationsBuilder.groupPlan.called.should.equal false
+				done()