|
|
@@ -5,7 +5,7 @@ modulePath = "../../../../app/js/Features/Subscription/SubscriptionUpdater"
|
|
|
assert = require("chai").assert
|
|
|
ObjectId = require('mongoose').Types.ObjectId
|
|
|
|
|
|
-describe "Subscription Updater", ->
|
|
|
+describe "SubscriptionUpdater", ->
|
|
|
|
|
|
beforeEach ->
|
|
|
@recurlySubscription =
|
|
|
@@ -13,7 +13,7 @@ describe "Subscription Updater", ->
|
|
|
plan:
|
|
|
plan_code: "kjhsakjds"
|
|
|
@adminUser =
|
|
|
- _id:"5208dd34438843e2db000007"
|
|
|
+ _id: @adminuser_id = "5208dd34438843e2db000007"
|
|
|
@otherUserId = "5208dd34438842e2db000005"
|
|
|
@allUserIds = ["13213", "dsadas", "djsaiud89"]
|
|
|
@subscription = subscription =
|
|
|
@@ -21,14 +21,14 @@ describe "Subscription Updater", ->
|
|
|
members_id: @allUserIds
|
|
|
save: sinon.stub().callsArgWith(0)
|
|
|
freeTrial:{}
|
|
|
- plan_code:"student_or_something"
|
|
|
+ planCode:"student_or_something"
|
|
|
|
|
|
@groupSubscription =
|
|
|
admin_id: @adminUser._id
|
|
|
members_id: @allUserIds
|
|
|
save: sinon.stub().callsArgWith(0)
|
|
|
freeTrial:{}
|
|
|
- plan_code:"group_subscription"
|
|
|
+ planCode:"group_subscription"
|
|
|
|
|
|
|
|
|
@updateStub = sinon.stub().callsArgWith(2, null)
|
|
|
@@ -71,42 +71,33 @@ describe "Subscription Updater", ->
|
|
|
beforeEach ->
|
|
|
|
|
|
@SubscriptionLocator.getUsersSubscription.callsArgWith(1, null, @subscription)
|
|
|
- @SubscriptionLocator.getGroupSubscriptionMemberOf.callsArgWith(1, null, @groupSubscription)
|
|
|
- @SubscriptionUpdater._updateSubscription = sinon.stub().callsArgWith(2)
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly = sinon.stub().callsArgWith(2)
|
|
|
|
|
|
it "should update the subscription if the user already is admin of one", (done)->
|
|
|
@SubscriptionUpdater._createNewSubscription = sinon.stub()
|
|
|
|
|
|
@SubscriptionUpdater.syncSubscription @recurlySubscription, @adminUser._id, (err)=>
|
|
|
@SubscriptionLocator.getUsersSubscription.calledWith(@adminUser._id).should.equal true
|
|
|
- @SubscriptionUpdater._updateSubscription.called.should.equal true
|
|
|
- @SubscriptionUpdater._updateSubscription.calledWith(@recurlySubscription, @subscription).should.equal true
|
|
|
- done()
|
|
|
-
|
|
|
- it "should sync with the group subscription if the recurly subscription is expired", (done)->
|
|
|
- @recurlySubscription.state = "expired"
|
|
|
-
|
|
|
- @SubscriptionUpdater.syncSubscription @recurlySubscription, @adminUser._id, (err)=>
|
|
|
- @SubscriptionLocator.getUsersSubscription.calledWith(@adminUser._id).should.equal true
|
|
|
- @SubscriptionUpdater._updateSubscription.called.should.equal true
|
|
|
- @SubscriptionUpdater._updateSubscription.calledWith(@recurlySubscription, @subscription).should.equal true
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@adminUser._id, @groupSubscription.planCode).should.equal true
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly.called.should.equal true
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly.calledWith(@recurlySubscription, @subscription).should.equal true
|
|
|
done()
|
|
|
|
|
|
it "should not call updateFeatures with group subscription if recurly subscription is not expired", (done)->
|
|
|
|
|
|
@SubscriptionUpdater.syncSubscription @recurlySubscription, @adminUser._id, (err)=>
|
|
|
@SubscriptionLocator.getUsersSubscription.calledWith(@adminUser._id).should.equal true
|
|
|
- @SubscriptionUpdater._updateSubscription.called.should.equal true
|
|
|
- @SubscriptionUpdater._updateSubscription.calledWith(@recurlySubscription, @subscription).should.equal true
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly.called.should.equal true
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly.calledWith(@recurlySubscription, @subscription).should.equal true
|
|
|
@UserFeaturesUpdater.updateFeatures.called.should.equal false
|
|
|
done()
|
|
|
|
|
|
|
|
|
- describe "_updateSubscription", ->
|
|
|
-
|
|
|
+ describe "_updateSubscriptionFromRecurly", ->
|
|
|
+ beforeEach ->
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures = sinon.stub().callsArgWith(1)
|
|
|
+
|
|
|
it "should update the subscription with token etc when not expired", (done)->
|
|
|
- @SubscriptionUpdater._updateSubscription @recurlySubscription, @subscription, (err)=>
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly @recurlySubscription, @subscription, (err)=>
|
|
|
@subscription.recurlySubscription_id.should.equal @recurlySubscription.uuid
|
|
|
@subscription.planCode.should.equal @recurlySubscription.plan.plan_code
|
|
|
|
|
|
@@ -114,43 +105,40 @@ describe "Subscription Updater", ->
|
|
|
assert.equal(@subscription.freeTrial.expiresAt, undefined)
|
|
|
assert.equal(@subscription.freeTrial.planCode, undefined)
|
|
|
@subscription.save.called.should.equal true
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@adminUser._id, @recurlySubscription.plan.plan_code).should.equal true
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@adminUser._id).should.equal true
|
|
|
done()
|
|
|
|
|
|
it "should remove the recurlySubscription_id when expired", (done)->
|
|
|
@recurlySubscription.state = "expired"
|
|
|
|
|
|
- @SubscriptionUpdater._updateSubscription @recurlySubscription, @subscription, (err)=>
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly @recurlySubscription, @subscription, (err)=>
|
|
|
assert.equal(@subscription.recurlySubscription_id, undefined)
|
|
|
@subscription.save.called.should.equal true
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@adminUser._id, @Settings.defaultPlanCode).should.equal true
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@adminUser._id).should.equal true
|
|
|
done()
|
|
|
|
|
|
it "should update all the users features", (done)->
|
|
|
- @SubscriptionUpdater._updateSubscription @recurlySubscription, @subscription, (err)=>
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@adminUser._id, @recurlySubscription.plan.plan_code).should.equal true
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@allUserIds[0], @recurlySubscription.plan.plan_code).should.equal true
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@allUserIds[1], @recurlySubscription.plan.plan_code).should.equal true
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@allUserIds[2], @recurlySubscription.plan.plan_code).should.equal true
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly @recurlySubscription, @subscription, (err)=>
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@adminUser._id).should.equal true
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@allUserIds[0]).should.equal true
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@allUserIds[1]).should.equal true
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@allUserIds[2]).should.equal true
|
|
|
done()
|
|
|
|
|
|
it "should set group to true and save how many members can be added to group", (done)->
|
|
|
@PlansLocator.findLocalPlanInSettings.withArgs(@recurlySubscription.plan.plan_code).returns({groupPlan:true, membersLimit:5})
|
|
|
- @SubscriptionUpdater._updateSubscription @recurlySubscription, @subscription, (err)=>
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly @recurlySubscription, @subscription, (err)=>
|
|
|
@subscription.membersLimit.should.equal 5
|
|
|
@subscription.groupPlan.should.equal true
|
|
|
done()
|
|
|
|
|
|
it "should not set group to true or set groupPlan", (done)->
|
|
|
- @SubscriptionUpdater._updateSubscription @recurlySubscription, @subscription, (err)=>
|
|
|
+ @SubscriptionUpdater._updateSubscriptionFromRecurly @recurlySubscription, @subscription, (err)=>
|
|
|
assert.notEqual @subscription.membersLimit, 5
|
|
|
assert.notEqual @subscription.groupPlan, true
|
|
|
done()
|
|
|
|
|
|
- it "should call assignBonus", (done)->
|
|
|
- @SubscriptionUpdater._updateSubscription @recurlySubscription, @subscription, (err)=>
|
|
|
- @ReferalAllocator.assignBonus.calledWith(@subscription.admin_id).should.equal true
|
|
|
- done()
|
|
|
+
|
|
|
|
|
|
describe "_createNewSubscription", ->
|
|
|
it "should create a new subscription then update the subscription", (done)->
|
|
|
@@ -176,6 +164,9 @@ describe "Subscription Updater", ->
|
|
|
done()
|
|
|
|
|
|
describe "removeUserFromGroup", ->
|
|
|
+ beforeEach ->
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures = sinon.stub().callsArgWith(1)
|
|
|
+
|
|
|
it "should pull the users id from the group", (done)->
|
|
|
@SubscriptionUpdater.removeUserFromGroup @adminUser._id, @otherUserId, =>
|
|
|
searchOps =
|
|
|
@@ -187,5 +178,47 @@ describe "Subscription Updater", ->
|
|
|
|
|
|
it "should update the users features", (done)->
|
|
|
@SubscriptionUpdater.removeUserFromGroup @adminUser._id, @otherUserId, =>
|
|
|
- @UserFeaturesUpdater.updateFeatures.calledWith(@otherUserId, @Settings.defaultPlanCode).should.equal true
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures.calledWith(@otherUserId).should.equal true
|
|
|
done()
|
|
|
+
|
|
|
+ describe "_setUsersMinimumFeatures", ->
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ it "should call updateFeatures with the subscription if set", (done)->
|
|
|
+ @SubscriptionLocator.getUsersSubscription.callsArgWith(1, null, @subscription)
|
|
|
+ @SubscriptionLocator.getGroupSubscriptionMemberOf.callsArgWith(1, null)
|
|
|
+
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures @adminUser._id, (err)=>
|
|
|
+ args = @UserFeaturesUpdater.updateFeatures.args[0]
|
|
|
+ assert.equal args[0], @adminUser._id
|
|
|
+ assert.equal args[1], @subscription.planCode
|
|
|
+ done()
|
|
|
+
|
|
|
+ it "should call updateFeatures with the group subscription if set", (done)->
|
|
|
+ @SubscriptionLocator.getUsersSubscription.callsArgWith(1, null)
|
|
|
+ @SubscriptionLocator.getGroupSubscriptionMemberOf.callsArgWith(1, null, @groupSubscription)
|
|
|
+
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures @adminUser._id, (err)=>
|
|
|
+ args = @UserFeaturesUpdater.updateFeatures.args[0]
|
|
|
+ assert.equal args[0], @adminUser._id
|
|
|
+ assert.equal args[1], @groupSubscription.planCode
|
|
|
+ done()
|
|
|
+
|
|
|
+
|
|
|
+ it "should call updateFeatures with default if there are no subscriptions for user", (done)->
|
|
|
+ @SubscriptionLocator.getUsersSubscription.callsArgWith(1, null)
|
|
|
+ @SubscriptionLocator.getGroupSubscriptionMemberOf.callsArgWith(1, null)
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures @adminuser_id, (err)=>
|
|
|
+ args = @UserFeaturesUpdater.updateFeatures.args[0]
|
|
|
+ assert.equal args[0], @adminUser._id
|
|
|
+ assert.equal args[1], @Settings.defaultPlanCode
|
|
|
+ done()
|
|
|
+
|
|
|
+ it "should call assignBonus", (done)->
|
|
|
+ @SubscriptionLocator.getUsersSubscription.callsArgWith(1, null)
|
|
|
+ @SubscriptionLocator.getGroupSubscriptionMemberOf.callsArgWith(1, null)
|
|
|
+ @SubscriptionUpdater._setUsersMinimumFeatures @adminuser_id, (err)=>
|
|
|
+ @ReferalAllocator.assignBonus.calledWith(@adminuser_id).should.equal true
|
|
|
+ done()
|
|
|
+
|