Procházet zdrojové kódy

Use the admin_ids array to query for subscriptions

Alberto Fernández Capel před 8 roky
rodič
revize
46a1cdc510

+ 0 - 3
services/web/app/coffee/Features/Subscription/SubscriptionDomainHandler.coffee

@@ -9,9 +9,6 @@ module.exports = SubscriptionDomainHandler =
 		licence = SubscriptionDomainHandler._findDomainLicence(user.email)
 		return licence
 
-	rejectInvitationToGroup: (user, subscription, callback)->
-		removeUserFromGroup(subscription.admin_id, user._id, callback)
-
 	getDomainLicencePage: (user)->
 		licence = SubscriptionDomainHandler._findDomainLicence(user.email)
 		if licence?.verifyEmail

+ 21 - 8
services/web/app/coffee/Features/Subscription/SubscriptionGroupHandler.coffee

@@ -46,15 +46,10 @@ module.exports = SubscriptionGroupHandler =
 		Subscription.update {admin_id: oldId}, {admin_id: newId}, (error) ->
 			callback(error) if error?
 
-			# Mongo won't let us pull and addToSet in the same query, so do it in
-			# two. Note we need to add first, since the query is based on the old user.
-			query = { member_ids: oldId }
-			addNewUserUpdate = $addToSet: { member_ids: newId }
-			removeOldUserUpdate =  $pull: { member_ids: oldId }
+			replaceInArray Subscription, "manager_ids", oldId, newId, (error) ->
+				callback(error) if error?
 
-			Subscription.update query, addNewUserUpdate, { multi: true }, (error) ->
-				return callback(error) if error?
-				Subscription.update query, removeOldUserUpdate, { multi: true }, callback
+				replaceInArray Subscription, "member_ids", oldId, newId, callback
 
 	getPopulatedListOfMembers: (subscriptionId, callback)->
 		SubscriptionLocator.getSubscription subscriptionId, (err, subscription)->
@@ -87,6 +82,24 @@ module.exports = SubscriptionGroupHandler =
 			logger.log user_id:user_id, subscription_id:subscription_id, partOfGroup:partOfGroup, "checking if user is part of a group"
 			callback(err, partOfGroup)
 
+replaceInArray = (model, property, oldValue, newValue, callback) ->
+	logger.log "Replacing #{oldValue} with #{newValue} in #{property} of #{model}"
+
+	# Mongo won't let us pull and addToSet in the same query, so do it in
+	# two. Note we need to add first, since the query is based on the old user.
+	query = {}
+	query[property] = oldValue
+
+	setNewValue = {}
+	setNewValue[property] = newValue
+
+	setOldValue = {}
+	setOldValue[property] = oldValue
+
+	model.update query, { $addToSet: setNewValue }, { multi: true }, (error) ->
+		return callback(error) if error?
+		model.update query, { $pull: setOldValue }, { multi: true }, callback
+
 buildUserViewModel = (user)->
 	u =
 		email: user.email

+ 12 - 9
services/web/app/coffee/Features/Subscription/SubscriptionLocator.coffee

@@ -2,7 +2,7 @@ Subscription = require('../../models/Subscription').Subscription
 logger = require("logger-sharelatex")
 ObjectId = require('mongoose').Types.ObjectId
 
-module.exports =
+module.exports = SubscriptionLocator =
 
 	getUsersSubscription: (user_or_id, callback)->
 		if user_or_id? and user_or_id._id?
@@ -15,14 +15,17 @@ module.exports =
 			callback(err, subscription)
 
 	getManagedSubscription: (managerId, callback)->
-			logger.log managerId: managerId, "getting managed subscription"
-			Subscription.findOne admin_id: managerId, (err, subscription)->
-				if subscription?
-					logger.log managerId: managerId, "got managed subscription"
-				else
-					err ||= new Error("No subscription found managed by user #{managerId}")
-
-				callback(err, subscription)
+		SubscriptionLocator.findManagedSubscription managerId, (err, subscription)->
+			if subscription?
+				logger.log managerId: managerId, "got managed subscription"
+			else
+				err ||= new Error("No subscription found managed by user #{managerId}")
+
+			callback(err, subscription)
+
+	findManagedSubscription: (managerId, callback)->
+		logger.log managerId: managerId, "finding managed subscription"
+		Subscription.findOne manager_ids: managerId, callback
 
 	getMemberSubscriptions: (user_or_id, callback) ->
 		if user_or_id? and user_or_id._id?

+ 2 - 0
services/web/test/acceptance/coffee/FeatureUpdaterTests.coffee

@@ -39,6 +39,7 @@ describe "FeatureUpdater.refreshFeatures", ->
 		beforeEach ->
 			Subscription.create {
 				admin_id: @user._id
+				manager_ids: [@user._id]
 				planCode: 'collaborator'
 				customAccount: true
 			} # returns a promise
@@ -163,6 +164,7 @@ describe "FeatureUpdater.refreshFeatures", ->
 		beforeEach (done) ->
 			Subscription.create {
 				admin_id: @user._id
+				manager_ids: [@user._id]
 				planCode: 'professional'
 				customAccount: true
 			}, (error) =>

+ 19 - 15
services/web/test/unit/coffee/Subscription/SubscriptionGroupHandlerTests.coffee

@@ -16,7 +16,8 @@ describe "SubscriptionGroupHandler", ->
 		@subscription_id = "31DSd1123D"
 
 		@subscription =
-			admin_id:@adminUser_id
+			admin_id: @adminUser_id
+			manager_ids: [@adminUser_id]
 			_id:@subscription_id
 
 		@SubscriptionLocator =
@@ -124,34 +125,37 @@ describe "SubscriptionGroupHandler", ->
 				done()
 
 	describe "replaceUserReferencesInGroups", ->
-		beforeEach ->
+		beforeEach (done)->
 			@oldId = "ba5eba11"
 			@newId = "5ca1ab1e"
+			@Handler.replaceUserReferencesInGroups @oldId, @newId, ->
+				done()
 
-		it "replaces the admin_id", (done) ->
-			@Handler.replaceUserReferencesInGroups @oldId, @newId, (err) =>
-
+		it "replaces the admin_id", ->
 				@Subscription.update.calledWith(
 					{ admin_id: @oldId },
 					{ admin_id: @newId }
 				).should.equal true
 
-				done()
-
-		it "replaces the member ids", (done) ->
-			@Handler.replaceUserReferencesInGroups @oldId, @newId, (err) =>
-
+		it "replaces the manager_ids", ->
 				@Subscription.update.calledWith(
-					{ member_ids: @oldId },
-					{ $addToSet: { member_ids: @newId } }
+					{manager_ids:"ba5eba11"},{$addToSet:{manager_ids:"5ca1ab1e"}},{multi:true}
 				).should.equal true
 
 				@Subscription.update.calledWith(
-					{ member_ids: @oldId },
-					{ $pull: { member_ids: @oldId } }
+					{manager_ids:"ba5eba11"},{$pull:{manager_ids:"ba5eba11"}},{multi:true}
 				).should.equal true
 
-				done()
+		it "replaces the member ids", ->
+			@Subscription.update.calledWith(
+				{ member_ids: @oldId },
+				{ $addToSet: { member_ids: @newId } }
+			).should.equal true
+
+			@Subscription.update.calledWith(
+				{ member_ids: @oldId },
+				{ $pull: { member_ids: @oldId } }
+			).should.equal true
 
 	describe "getPopulatedListOfMembers", ->
 		beforeEach ->

+ 9 - 1
services/web/test/unit/coffee/Subscription/SubscriptionLocatorTests.coffee

@@ -3,7 +3,7 @@ should = require('chai').should()
 sinon = require 'sinon'
 modulePath = "../../../../app/js/Features/Subscription/SubscriptionLocator"
 assert = require("chai").assert
-ObjectId = require('mongoose').Types.ObjectId	
+ObjectId = require('mongoose').Types.ObjectId
 
 
 describe "Subscription Locator Tests", ->
@@ -41,3 +41,11 @@ describe "Subscription Locator Tests", ->
 				subscription.should.equal @subscription
 				done()
 
+		describe "finding managed subscription", ->
+
+			it "should query the database", (done)->
+				@Subscription.findOne.callsArgWith(1, null, @subscription)
+				@SubscriptionLocator.getManagedSubscription @user._id, (err, subscription)=>
+					@Subscription.findOne.calledWith({"manager_ids":@user._id}).should.equal true
+					subscription.should.equal @subscription
+					done()