|
|
@@ -9,30 +9,83 @@ describe "InstitutionsManager", ->
|
|
|
beforeEach ->
|
|
|
@institutionId = 123
|
|
|
@logger = log: ->
|
|
|
+ @user = {}
|
|
|
@getInstitutionAffiliations = sinon.stub()
|
|
|
@refreshFeatures = sinon.stub().yields()
|
|
|
- @getUsersByAnyConfirmedEmail = sinon.stub().yields()
|
|
|
+ @UserGetter =
|
|
|
+ getUsersByAnyConfirmedEmail: sinon.stub().yields()
|
|
|
+ getUser: sinon.stub().callsArgWith(1, null, @user)
|
|
|
+ @creator =
|
|
|
+ create: sinon.stub().callsArg(0)
|
|
|
+ @NotificationsBuilder =
|
|
|
+ featuresUpgradedByAffiliation: sinon.stub().returns(@creator)
|
|
|
+ redundantPersonalSubscription: sinon.stub().returns(@creator)
|
|
|
+ @SubscriptionLocator =
|
|
|
+ getUsersSubscription: sinon.stub().callsArg(1)
|
|
|
+ @institutionWithV1Data =
|
|
|
+ name: 'Wombat University'
|
|
|
+ @institution =
|
|
|
+ fetchV1Data: sinon.stub().callsArgWith(0, null, @institutionWithV1Data)
|
|
|
+ @InstitutionModel =
|
|
|
+ Institution:
|
|
|
+ findOne: sinon.stub().callsArgWith(1, null, @institution)
|
|
|
+ @Mongo =
|
|
|
+ ObjectId: sinon.stub().returnsArg(0)
|
|
|
+
|
|
|
@InstitutionsManager = SandboxedModule.require modulePath, requires:
|
|
|
'logger-sharelatex': @logger
|
|
|
'./InstitutionsAPI':
|
|
|
getInstitutionAffiliations: @getInstitutionAffiliations
|
|
|
'../Subscription/FeaturesUpdater':
|
|
|
refreshFeatures: @refreshFeatures
|
|
|
- '../User/UserGetter':
|
|
|
- getUsersByAnyConfirmedEmail: @getUsersByAnyConfirmedEmail
|
|
|
+ '../User/UserGetter': @UserGetter
|
|
|
+ '../Notifications/NotificationsBuilder': @NotificationsBuilder
|
|
|
+ '../Subscription/SubscriptionLocator': @SubscriptionLocator
|
|
|
+ '../../models/Institution': @InstitutionModel
|
|
|
+ '../../infrastructure/mongojs': @Mongo
|
|
|
|
|
|
describe 'upgradeInstitutionUsers', ->
|
|
|
- it 'refresh all users Features', (done) ->
|
|
|
- affiliations = [
|
|
|
- { user_id: '123abc123abc123abc123abc' }
|
|
|
- { user_id: '456def456def456def456def' }
|
|
|
+ beforeEach ->
|
|
|
+ @user1Id = '123abc123abc123abc123abc'
|
|
|
+ @user2Id = '456def456def456def456def'
|
|
|
+ @affiliations = [
|
|
|
+ { user_id: @user1Id }
|
|
|
+ { user_id: @user2Id }
|
|
|
]
|
|
|
- @getInstitutionAffiliations.yields(null, affiliations)
|
|
|
+ @user1 =
|
|
|
+ _id: @user1Id
|
|
|
+ @user2 =
|
|
|
+ _id: @user2Id
|
|
|
+ @subscription =
|
|
|
+ planCode: 'pro'
|
|
|
+ groupPlan: false
|
|
|
+ @UserGetter.getUser.withArgs(@user1Id).callsArgWith(1, null, @user1)
|
|
|
+ @UserGetter.getUser.withArgs(@user2Id).callsArgWith(1, null, @user2)
|
|
|
+ @SubscriptionLocator.getUsersSubscription.withArgs(@user2).callsArgWith(1, null, @subscription)
|
|
|
+ @refreshFeatures.withArgs(@user1Id).callsArgWith(2, null, {}, true)
|
|
|
+ @getInstitutionAffiliations.yields(null, @affiliations)
|
|
|
+
|
|
|
+ it 'refresh all users Features', (done) ->
|
|
|
@InstitutionsManager.upgradeInstitutionUsers @institutionId, (error) =>
|
|
|
should.not.exist(error)
|
|
|
sinon.assert.calledTwice(@refreshFeatures)
|
|
|
done()
|
|
|
|
|
|
+ it "notifies users if their features have been upgraded", (done) ->
|
|
|
+ @InstitutionsManager.upgradeInstitutionUsers @institutionId, (error) =>
|
|
|
+ should.not.exist(error)
|
|
|
+ sinon.assert.calledOnce(@NotificationsBuilder.featuresUpgradedByAffiliation)
|
|
|
+ sinon.assert.calledWith(@NotificationsBuilder.featuresUpgradedByAffiliation, @affiliations[0], @user1)
|
|
|
+ done()
|
|
|
+
|
|
|
+ it "notifies users if they have a subscription that should be cancelled", (done) ->
|
|
|
+ @InstitutionsManager.upgradeInstitutionUsers @institutionId, (error) =>
|
|
|
+ should.not.exist(error)
|
|
|
+ sinon.assert.calledOnce(@NotificationsBuilder.redundantPersonalSubscription)
|
|
|
+ sinon.assert.calledWith(@NotificationsBuilder.redundantPersonalSubscription, @affiliations[1], @user2)
|
|
|
+ done()
|
|
|
+
|
|
|
+
|
|
|
describe 'checkInstitutionUsers', ->
|
|
|
it 'check all users Features', (done) ->
|
|
|
affiliations = [
|
|
|
@@ -54,11 +107,11 @@ describe "InstitutionsManager", ->
|
|
|
}
|
|
|
]
|
|
|
@getInstitutionAffiliations.yields(null, affiliations)
|
|
|
- @getUsersByAnyConfirmedEmail.yields(null, stubbedUsers)
|
|
|
+ @UserGetter.getUsersByAnyConfirmedEmail.yields(null, stubbedUsers)
|
|
|
@InstitutionsManager.checkInstitutionUsers @institutionId, (error, usersSummary) =>
|
|
|
should.not.exist(error)
|
|
|
usersSummary.totalConfirmedUsers.should.equal 3
|
|
|
usersSummary.totalConfirmedProUsers.should.equal 1
|
|
|
usersSummary.totalConfirmedNonProUsers.should.equal 2
|
|
|
expect(usersSummary.confirmedNonProUsers).to.deep.equal ['456def456def456def456def', '789def789def789def789def']
|
|
|
- done()
|
|
|
+ done()
|