From 49e19cad6414206287d1439fc5bfb68ee5f9af52 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 20 Nov 2018 11:48:21 +0100 Subject: [PATCH] Merge pull request #1162 from sharelatex/ja-show-group-management Add group and institution membership and management info to subscription dashboard GitOrigin-RevId: 1aba5d5a20cd00ff5090811d0f66dc9c4944dd60 --- .../Institutions/InstitutionsGetter.coffee | 5 + .../SubscriptionController.coffee | 35 +++-- .../Subscription/SubscriptionLocator.coffee | 23 +-- .../SubscriptionViewModelBuilder.coffee | 33 ++++- .../UserMembershipHandler.coffee | 10 ++ .../web/app/coffee/models/Institution.coffee | 9 +- .../web/app/views/subscriptions/dashboard.pug | 16 ++- .../dashboard/_group_memberships.pug | 10 +- .../dashboard/_institution_memberships.pug | 12 ++ .../dashboard/_managed_groups.pug | 13 ++ .../dashboard/_managed_institutions.pug | 9 ++ .../dashboard/_personal_subscription.pug | 7 - .../dashboard/_team_name_mixin.pug | 9 ++ .../test/acceptance/coffee/ProxyUrls.coffee | 4 +- .../coffee/SubscriptionTests.coffee | 131 ++++++++++++++++-- .../coffee/helpers/MockV1Api.coffee | 5 +- .../InstitutionsGetterTests.coffee | 2 + .../SubscriptionControllerTests.coffee | 4 +- 18 files changed, 288 insertions(+), 49 deletions(-) create mode 100644 services/web/app/views/subscriptions/dashboard/_institution_memberships.pug create mode 100644 services/web/app/views/subscriptions/dashboard/_managed_groups.pug create mode 100644 services/web/app/views/subscriptions/dashboard/_managed_institutions.pug create mode 100644 services/web/app/views/subscriptions/dashboard/_team_name_mixin.pug diff --git a/services/web/app/coffee/Features/Institutions/InstitutionsGetter.coffee b/services/web/app/coffee/Features/Institutions/InstitutionsGetter.coffee index 98ffcec533..f68ccd6ed7 100644 --- a/services/web/app/coffee/Features/Institutions/InstitutionsGetter.coffee +++ b/services/web/app/coffee/Features/Institutions/InstitutionsGetter.coffee @@ -1,4 +1,6 @@ UserGetter = require '../User/UserGetter' +UserMembershipHandler = require "../UserMembership/UserMembershipHandler" +UserMembershipEntityConfigs = require "../UserMembership/UserMembershipEntityConfigs" logger = require 'logger-sharelatex' module.exports = InstitutionsGetter = @@ -12,3 +14,6 @@ module.exports = InstitutionsGetter = emailData.affiliation?.institution callback(null, confirmedInstitutions) + + getManagedInstitutions: (user_id, callback = (error, managedInstitutions) ->) -> + UserMembershipHandler.getEntitiesByUser UserMembershipEntityConfigs.institution, user_id, callback diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee index 17447ba2e4..3a4280e4ec 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee @@ -91,16 +91,35 @@ module.exports = SubscriptionController = user = AuthenticationController.getSessionUser(req) SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel user, (error, results) -> return next(error) if error? - { personalSubscription, groupSubscriptions, v1Subscriptions } = results - logger.log {user, personalSubscription, groupSubscriptions, v1Subscriptions}, "showing subscription dashboard" + { + personalSubscription, + memberGroupSubscriptions, + managedGroupSubscriptions, + confirmedMemberInstitutions, + managedInstitutions, + v1Subscriptions + } = results + logger.log { + user, + personalSubscription, + memberGroupSubscriptions, + managedGroupSubscriptions, + confirmedMemberInstitutions, + managedInstitutions, + v1Subscriptions + }, "showing subscription dashboard" plans = SubscriptionViewModelBuilder.buildViewModel() - data = + data = { title: "your_subscription" - plans: plans - user: user - personalSubscription: personalSubscription - groupSubscriptions: groupSubscriptions - v1Subscriptions: v1Subscriptions + plans, + user, + personalSubscription, + memberGroupSubscriptions, + managedGroupSubscriptions, + confirmedMemberInstitutions, + managedInstitutions, + v1Subscriptions + } res.render "subscriptions/dashboard", data createSubscription: (req, res, next)-> diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionLocator.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionLocator.coffee index 3a8d29673b..62064b602c 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionLocator.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionLocator.coffee @@ -5,10 +5,7 @@ ObjectId = require('mongoose').Types.ObjectId module.exports = SubscriptionLocator = getUsersSubscription: (user_or_id, callback)-> - if user_or_id? and user_or_id._id? - user_id = user_or_id._id - else if user_or_id? - user_id = user_or_id + user_id = @_getUserId(user_or_id) logger.log user_id:user_id, "getting users subscription" Subscription.findOne admin_id:user_id, (err, subscription)-> logger.log user_id:user_id, "got users subscription" @@ -18,11 +15,15 @@ module.exports = SubscriptionLocator = logger.log managerId: managerId, "finding managed subscription" Subscription.findOne manager_ids: managerId, callback + getManagedGroupSubscriptions: (user_or_id, callback = (error, managedSubscriptions) ->) -> + user_id = @_getUserId(user_or_id) + Subscription.find({ + manager_ids: user_or_id, + groupPlan: true + }).populate("admin_id").exec callback + getMemberSubscriptions: (user_or_id, callback) -> - if user_or_id? and user_or_id._id? - user_id = user_or_id._id - else if user_or_id? - user_id = user_or_id + user_id = @_getUserId(user_or_id) logger.log user_id: user_id, "getting users group subscriptions" Subscription.find(member_ids: user_id).populate("admin_id").exec callback @@ -40,3 +41,9 @@ module.exports = SubscriptionLocator = getGroupWithV1Id: (v1TeamId, callback) -> Subscription.findOne { "overleaf.id": v1TeamId }, callback + + _getUserId: (user_or_id) -> + if user_or_id? and user_or_id._id? + return user_or_id._id + else if user_or_id? + return user_or_id diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee index 2293e5c057..deebb04aa5 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee @@ -5,6 +5,7 @@ SubscriptionFormatters = require("./SubscriptionFormatters") LimitationsManager = require("./LimitationsManager") SubscriptionLocator = require("./SubscriptionLocator") V1SubscriptionManager = require("./V1SubscriptionManager") +InstitutionsGetter = require("../Institutions/InstitutionsGetter") logger = require('logger-sharelatex') _ = require("underscore") async = require('async') @@ -37,8 +38,14 @@ module.exports = return cb(new Error("No plan found for planCode '#{personalSubscription.planCode}'")) if !plan? cb(null, plan) ] - groupSubscriptions: (cb) -> + memberGroupSubscriptions: (cb) -> SubscriptionLocator.getMemberSubscriptions user, cb + managedGroupSubscriptions: (cb) -> + SubscriptionLocator.getManagedGroupSubscriptions user, cb + confirmedMemberInstitutions: (cb) -> + InstitutionsGetter.getConfirmedInstitutions user._id, cb + managedInstitutions: (cb) -> + InstitutionsGetter.getManagedInstitutions user._id, cb v1Subscriptions: (cb) -> V1SubscriptionManager.getSubscriptionsFromV1 user._id, (error, subscriptions, v1Id) -> return cb(error) if error? @@ -46,10 +53,23 @@ module.exports = cb(null, subscriptions) }, (err, results) -> return callback(err) if err? - {personalSubscription, groupSubscriptions, v1Subscriptions, recurlySubscription, plan} = results - groupSubscriptions ?= [] + { + personalSubscription, + memberGroupSubscriptions, + managedGroupSubscriptions, + confirmedMemberInstitutions, + managedInstitutions, + v1Subscriptions, + recurlySubscription, + plan + } = results + memberGroupSubscriptions ?= [] + managedGroupSubscriptions ?= [] + confirmedMemberInstitutions ?= [] + managedInstitutions ?= [] v1Subscriptions ?= {} + if personalSubscription?.toObject? # Downgrade from Mongoose object, so we can add a recurly and plan attribute personalSubscription = personalSubscription.toObject() @@ -72,7 +92,12 @@ module.exports = } callback null, { - personalSubscription, groupSubscriptions, v1Subscriptions + personalSubscription, + managedGroupSubscriptions, + memberGroupSubscriptions, + confirmedMemberInstitutions, + managedInstitutions, + v1Subscriptions } buildViewModel : -> diff --git a/services/web/app/coffee/Features/UserMembership/UserMembershipHandler.coffee b/services/web/app/coffee/Features/UserMembership/UserMembershipHandler.coffee index 3dab0c5771..b3f99e8966 100644 --- a/services/web/app/coffee/Features/UserMembership/UserMembershipHandler.coffee +++ b/services/web/app/coffee/Features/UserMembership/UserMembershipHandler.coffee @@ -7,6 +7,7 @@ EntityModels = UserMembershipViewModel = require('./UserMembershipViewModel') UserGetter = require('../User/UserGetter') logger = require('logger-sharelatex') +UserMembershipEntityConfigs = require "./UserMembershipEntityConfigs" module.exports = getEntity: (entityId, entityConfig, loggedInUser, callback = (error, entity) ->) -> @@ -39,6 +40,15 @@ module.exports = return callback(isAdmin: true) removeUserFromEntity entity, attribute, userId, callback + getEntitiesByUser: (entityConfig, userId, callback = (error, entities) ->) -> + query = Object.assign({}, entityConfig.baseQuery) + query[entityConfig.fields.access] = userId + EntityModels[entityConfig.modelName].find query, (error, entities = []) -> + return callback(error) if error? + async.mapSeries entities, + (entity, cb) -> entity.fetchV1Data(cb), + callback + getPopulatedListOfMembers = (entity, attributes, callback = (error, users)->)-> userObjects = [] diff --git a/services/web/app/coffee/models/Institution.coffee b/services/web/app/coffee/models/Institution.coffee index 1fa97a98e1..1cc1cc2fc3 100644 --- a/services/web/app/coffee/models/Institution.coffee +++ b/services/web/app/coffee/models/Institution.coffee @@ -19,6 +19,11 @@ InstitutionSchema.method 'fetchV1Data', (callback = (error, institution)->) -> this.portalSlug = parsedBody?.portal_slug callback(null, this) -mongoose.model 'Institution', InstitutionSchema -exports.Institution = mongoose.model 'Institution' +conn = mongoose.createConnection(settings.mongo.url, { + server: {poolSize: settings.mongo.poolSize || 10}, + config: {autoIndex: false} +}) + +Institution = conn.model 'Institution', InstitutionSchema +exports.Institution = Institution exports.InstitutionSchema = InstitutionSchema diff --git a/services/web/app/views/subscriptions/dashboard.pug b/services/web/app/views/subscriptions/dashboard.pug index 07981e5de0..3becea865a 100644 --- a/services/web/app/views/subscriptions/dashboard.pug +++ b/services/web/app/views/subscriptions/dashboard.pug @@ -1,5 +1,7 @@ extends ../layout +include ./dashboard/_team_name_mixin + block content .content.content-alt(ng-cloak) .container @@ -14,10 +16,22 @@ block content -hasAnySubscription = true include ./dashboard/_personal_subscription - -if (groupSubscriptions && groupSubscriptions.length > 0) + -if (managedGroupSubscriptions && managedGroupSubscriptions.length > 0) + -hasAnySubscription = true + include ./dashboard/_managed_groups + + -if (managedInstitutions && managedInstitutions.length > 0) + -hasAnySubscription = true + include ./dashboard/_managed_institutions + + -if (memberGroupSubscriptions && memberGroupSubscriptions.length > 0) -hasAnySubscription = true include ./dashboard/_group_memberships + -if (confirmedMemberInstitutions && confirmedMemberInstitutions.length > 0) + -hasAnySubscription = true + include ./dashboard/_institution_memberships + -if (settings.overleaf && v1Subscriptions) include ./dashboard/_v1_subscriptions diff --git a/services/web/app/views/subscriptions/dashboard/_group_memberships.pug b/services/web/app/views/subscriptions/dashboard/_group_memberships.pug index 0410de0751..d8d468c79a 100644 --- a/services/web/app/views/subscriptions/dashboard/_group_memberships.pug +++ b/services/web/app/views/subscriptions/dashboard/_group_memberships.pug @@ -1,8 +1,14 @@ div(ng-controller="GroupMembershipController") - each groupSubscription in groupSubscriptions + each groupSubscription in memberGroupSubscriptions - if (user._id+'' != groupSubscription.admin_id._id+'') div - p !{translate("member_of_group_subscription", {admin_email: "" + groupSubscription.admin_id.email + ""})} + p + | You are a member of + | + +teamName(groupSubscription) + - if (groupSubscription.teamNotice && groupSubscription.teamNotice != '') + p + em= groupSubscription.teamNotice span button.btn.btn-danger.text-capitalise(ng-click="removeSelfFromGroup('"+groupSubscription.admin_id._id+"')") #{translate("leave_group")} hr diff --git a/services/web/app/views/subscriptions/dashboard/_institution_memberships.pug b/services/web/app/views/subscriptions/dashboard/_institution_memberships.pug new file mode 100644 index 0000000000..ac5c1cc258 --- /dev/null +++ b/services/web/app/views/subscriptions/dashboard/_institution_memberships.pug @@ -0,0 +1,12 @@ +each institution in confirmedMemberInstitutions + if (institution.licence != 'free') + p + | You have a + | + strong Professional + | + | #{settings.appName} account as a confirmed member of + | + strong= institution.name + hr + diff --git a/services/web/app/views/subscriptions/dashboard/_managed_groups.pug b/services/web/app/views/subscriptions/dashboard/_managed_groups.pug new file mode 100644 index 0000000000..ce1fda22e8 --- /dev/null +++ b/services/web/app/views/subscriptions/dashboard/_managed_groups.pug @@ -0,0 +1,13 @@ +each managedGroupSubscription in managedGroupSubscriptions + p + | You are a manager of + | + +teamName(managedGroupSubscription) + p + a.btn.btn-primary(href="/manage/groups/" + managedGroupSubscription._id + "/members") + | Manage members + |   + a.btn.btn-primary(href="/manage/groups/" + managedGroupSubscription._id + "/managers") + | Manage group managers + + hr diff --git a/services/web/app/views/subscriptions/dashboard/_managed_institutions.pug b/services/web/app/views/subscriptions/dashboard/_managed_institutions.pug new file mode 100644 index 0000000000..31b3e4d225 --- /dev/null +++ b/services/web/app/views/subscriptions/dashboard/_managed_institutions.pug @@ -0,0 +1,9 @@ +each institution in managedInstitutions + p + | You are a manager of + | + strong= institution.name + p + a.btn.btn-primary(href="/manage/institutions/" + institution.v1Id + "/managers") + | Manage institution managers + hr diff --git a/services/web/app/views/subscriptions/dashboard/_personal_subscription.pug b/services/web/app/views/subscriptions/dashboard/_personal_subscription.pug index 6c9fa58fdc..487e3184a9 100644 --- a/services/web/app/views/subscriptions/dashboard/_personal_subscription.pug +++ b/services/web/app/views/subscriptions/dashboard/_personal_subscription.pug @@ -3,11 +3,4 @@ if (personalSubscription.recurly) else include ./_personal_subscription_custom -if(personalSubscription.groupPlan) - hr - p - | You are the manager of a group subscription - p - a(href="/subscription/group").btn.btn-success !{translate("manage_group")} - hr \ No newline at end of file diff --git a/services/web/app/views/subscriptions/dashboard/_team_name_mixin.pug b/services/web/app/views/subscriptions/dashboard/_team_name_mixin.pug new file mode 100644 index 0000000000..5b24f351b7 --- /dev/null +++ b/services/web/app/views/subscriptions/dashboard/_team_name_mixin.pug @@ -0,0 +1,9 @@ +mixin teamName(subscription) + - if (subscription.teamName && subscription.teamName != '') + strong= subscription.teamName + - else if (subscription.admin_id._id == user._id) + | a group account + - else + | the group account owned by + | + strong= subscription.admin_id.email \ No newline at end of file diff --git a/services/web/test/acceptance/coffee/ProxyUrls.coffee b/services/web/test/acceptance/coffee/ProxyUrls.coffee index 5767d42bef..c7fac25b1e 100644 --- a/services/web/test/acceptance/coffee/ProxyUrls.coffee +++ b/services/web/test/acceptance/coffee/ProxyUrls.coffee @@ -24,8 +24,8 @@ describe "ProxyUrls", -> it 'proxy dynamic URLs', (done) -> async.series [ - (cb) -> assertResponse '/institutions/list/123', 200, { id: 123 }, cb - (cb) -> assertResponse '/institutions/list/456', 200, { id: 456 }, cb + (cb) -> assertResponse '/institutions/list/123', 200, { id: 123, name: "Institution 123" }, cb + (cb) -> assertResponse '/institutions/list/456', 200, { id: 456, name: "Institution 456" }, cb ], done diff --git a/services/web/test/acceptance/coffee/SubscriptionTests.coffee b/services/web/test/acceptance/coffee/SubscriptionTests.coffee index 5b95edef6e..bb19c3c779 100644 --- a/services/web/test/acceptance/coffee/SubscriptionTests.coffee +++ b/services/web/test/acceptance/coffee/SubscriptionTests.coffee @@ -2,6 +2,7 @@ expect = require('chai').expect async = require("async") User = require "./helpers/User" {Subscription} = require "../../../app/js/models/Subscription" +{Institution} = require "../../../app/js/models/Institution" SubscriptionViewModelBuilder = require "../../../app/js/Features/Subscription/SubscriptionViewModelBuilder" MockRecurlyApi = require "./helpers/MockRecurlyApi" @@ -22,8 +23,8 @@ describe 'Subscriptions', -> it 'should return no personalSubscription', -> expect(@data.personalSubscription).to.equal null - it 'should return no groupSubscriptions', -> - expect(@data.groupSubscriptions).to.deep.equal [] + it 'should return no memberGroupSubscriptions', -> + expect(@data.memberGroupSubscriptions).to.deep.equal [] it 'should return no v1Subscriptions', -> expect(@data.v1Subscriptions).to.deep.equal {} @@ -81,8 +82,8 @@ describe 'Subscriptions', -> "trialEndsAtFormatted": "7th July 2018" } - it 'should return no groupSubscriptions', -> - expect(@data.groupSubscriptions).to.deep.equal [] + it 'should return no memberGroupSubscriptions', -> + expect(@data.memberGroupSubscriptions).to.deep.equal [] describe 'when the user has a subscription without recurly', -> before (done) -> @@ -109,8 +110,8 @@ describe 'Subscriptions', -> expect(subscription.planCode).to.equal 'collaborator' expect(subscription.recurly).to.not.exist - it 'should return no groupSubscriptions', -> - expect(@data.groupSubscriptions).to.deep.equal [] + it 'should return no memberGroupSubscriptions', -> + expect(@data.memberGroupSubscriptions).to.deep.equal [] describe 'when the user is a member of a group subscription', -> before (done) -> @@ -153,16 +154,122 @@ describe 'Subscriptions', -> it 'should return no personalSubscription', -> expect(@data.personalSubscription).to.equal null - it 'should return the two groupSubscriptions', -> - expect(@data.groupSubscriptions.length).to.equal 2 + it 'should return the two memberGroupSubscriptions', -> + expect(@data.memberGroupSubscriptions.length).to.equal 2 expect( # Mongoose populates the admin_id with the user - @data.groupSubscriptions[0].admin_id._id.toString() + @data.memberGroupSubscriptions[0].admin_id._id.toString() ).to.equal @owner1._id expect( - @data.groupSubscriptions[1].admin_id._id.toString() + @data.memberGroupSubscriptions[1].admin_id._id.toString() ).to.equal @owner2._id + describe 'when the user is a manager of a group subscription', -> + before (done) -> + @owner1 = new User() + @owner2 = new User() + async.series [ + (cb) => @owner1.ensureUserExists cb + (cb) => @owner2.ensureUserExists cb + (cb) => Subscription.create { + admin_id: @owner1._id, + manager_ids: [@owner1._id, @user._id], + planCode: 'collaborator', + groupPlan: true + }, cb + ], (error) => + return done(error) if error? + SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel @user, (error, @data) => + return done(error) if error? + done() + return + + after (done) -> + Subscription.remove { + admin_id: @owner1._id + }, done + return + + it 'should return no personalSubscription', -> + expect(@data.personalSubscription).to.equal null + + it 'should return the managedGroupSubscriptions', -> + expect(@data.managedGroupSubscriptions.length).to.equal 1 + subscription = @data.managedGroupSubscriptions[0] + expect( + # Mongoose populates the admin_id with the user + subscription.admin_id._id.toString() + ).to.equal @owner1._id + expect(subscription.groupPlan).to.equal true + + describe 'when the user is a manager of an institution', -> + before (done) -> + @v1Id = MockV1Api.nextV1Id() + async.series [ + (cb) => + Institution.create({ + v1Id: @v1Id, + managerIds: [@user._id] + }, cb) + ], (error) => + return done(error) if error? + SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel @user, (error, @data) => + return done(error) if error? + done() + return + + after (done) -> + Institution.remove { + v1Id: @v1Id + }, done + return + + it 'should return the managedInstitutions', -> + expect(@data.managedInstitutions.length).to.equal 1 + institution = @data.managedInstitutions[0] + expect(institution.v1Id).to.equal @v1Id + expect(institution.name).to.equal "Institution #{@v1Id}" + + describe 'when the user is a member of an affiliation', -> + before (done) -> + v1Id = MockV1Api.nextV1Id() + MockV1Api.setUser v1Id, { + subscription: {} + } + MockV1Api.setAffiliations [{ + email: 'confirmed-affiliation-email@stanford.example.edu' + institution: { name: 'Stanford', licence: 'pro_plus', confirmed: true } + }, { + email: 'unconfirmed-affiliation-email@harvard.example.edu' + institution: { name: 'Harvard', licence: 'pro_plus', confirmed: true } + }, { + email: 'confirmed-affiliation-email@mit.example.edu' + institution: { name: 'MIT', licence: 'pro_plus', confirmed: false } + }] + async.series [ + (cb) => + @user.setV1Id v1Id, cb + (cb) => + @user.addEmail 'unconfirmed-affiliation-email@harvard.example.edu', cb + (cb) => + @user.addEmail 'confirmed-affiliation-email@stanford.example.edu', cb + (cb) => + @user.confirmEmail 'confirmed-affiliation-email@stanford.example.edu', cb + (cb) => + @user.addEmail 'confirmed-affiliation-email@mit.example.edu', cb + (cb) => + @user.confirmEmail 'confirmed-affiliation-email@mit.example.edu', cb + ], (error) => + return done(error) if error? + SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel @user, (error, @data) => + return done(error) if error? + done() + + it 'should return only the affilations with confirmed institutions, and confirmed emails', -> + expect(@data.confirmedMemberInstitutions).to.deep.equal [ + { name: 'Stanford', licence: 'pro_plus', confirmed: true } + ] + describe 'when the user has a v1 subscription', -> before (done) -> MockV1Api.setUser v1Id = MockV1Api.nextV1Id(), { @@ -184,8 +291,8 @@ describe 'Subscriptions', -> it 'should return no personalSubscription', -> expect(@data.personalSubscription).to.equal null - it 'should return no groupSubscriptions', -> - expect(@data.groupSubscriptions).to.deep.equal [] + it 'should return no memberGroupSubscriptions', -> + expect(@data.memberGroupSubscriptions).to.deep.equal [] it 'should return a v1Subscriptions', -> expect(@data.v1Subscriptions).to.deep.equal @subscription \ No newline at end of file diff --git a/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee b/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee index f44c516267..dffebdc929 100644 --- a/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee +++ b/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee @@ -75,7 +75,10 @@ module.exports = MockV1Api = res.json [] app.get '/universities/list/:id', (req, res, next) -> - res.json id: parseInt(req.params.id) + res.json { + id: parseInt(req.params.id) + name: "Institution #{req.params.id}" + } app.get '/university/domains', (req, res, next) -> res.json [] diff --git a/services/web/test/unit/coffee/Institutions/InstitutionsGetterTests.coffee b/services/web/test/unit/coffee/Institutions/InstitutionsGetterTests.coffee index d194cd8575..800ae949bd 100644 --- a/services/web/test/unit/coffee/Institutions/InstitutionsGetterTests.coffee +++ b/services/web/test/unit/coffee/Institutions/InstitutionsGetterTests.coffee @@ -9,6 +9,8 @@ describe 'InstitutionsGetter', -> @UserGetter = getUserFullEmails: sinon.stub() @InstitutionsGetter = SandboxedModule.require modulePath, requires: '../User/UserGetter': @UserGetter + "../UserMembership/UserMembershipHandler": @UserMembershipHandler = {} + "../UserMembership/UserMembershipEntityConfigs": @UserMembershipEntityConfigs = {} 'logger-sharelatex': log:-> console.log(arguments) err:-> diff --git a/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee b/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee index 9fc6b842f3..7fbb1df361 100644 --- a/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee +++ b/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee @@ -230,7 +230,7 @@ describe "SubscriptionController", -> beforeEach (done) -> @SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel.callsArgWith(1, null, { personalSubscription: @personalSubscription = { 'personal-subscription': 'mock' } - groupSubscriptions: @groupSubscriptions = { 'personal-subscriptions': 'mock' } + memberGroupSubscriptions: @memberGroupSubscriptions = { 'group-subscriptions': 'mock' } v1Subscriptions: @v1Subscriptions = { 'v1-subscriptions': 'mock' } }) @SubscriptionViewModelBuilder.buildViewModel.returns(@plans = {'plans': 'mock'}) @@ -241,7 +241,7 @@ describe "SubscriptionController", -> it "should load the personal, groups and v1 subscriptions", -> expect(@data.personalSubscription).to.deep.equal @personalSubscription - expect(@data.groupSubscriptions).to.deep.equal @groupSubscriptions + expect(@data.memberGroupSubscriptions).to.deep.equal @memberGroupSubscriptions expect(@data.v1Subscriptions).to.deep.equal @v1Subscriptions it "should load the user", ->