From 9a0dd31d8c71c2ed37741dd2dd0256a44676d210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Alby?= Date: Tue, 29 Jan 2019 11:52:58 +0000 Subject: [PATCH] Merge pull request #1061 from sharelatex/ja-remove-domain-license-code Remove deprecated domain license code GitOrigin-RevId: c9eebe1a657b07b69d618cdb5e73b64782109714 --- .../Notifications/NotificationsBuilder.coffee | 13 ----- .../DomainLicenceController.coffee | 47 ---------------- .../SubscriptionController.coffee | 1 - .../SubscriptionDomainHandler.coffee | 30 ---------- .../Subscription/SubscriptionRouter.coffee | 12 ---- .../Subscription/TeamInvitesHandler.coffee | 12 ---- .../coffee/Features/User/UserHandler.coffee | 25 +-------- .../app/views/project/list/notifications.pug | 10 ---- .../app/views/subscriptions/domain/join.pug | 39 ------------- services/web/public/src/main.js | 1 - .../domain-subscription-join-controller.js | 55 ------------------ .../SubscriptionControllerTests.coffee | 3 - .../SubscriptionDomainHandlerTests.coffee | 56 ------------------- .../TeamInvitesHandlerTests.coffee | 50 ----------------- .../unit/coffee/User/UserHandlerTests.coffee | 52 ----------------- 15 files changed, 1 insertion(+), 405 deletions(-) delete mode 100644 services/web/app/coffee/Features/Subscription/DomainLicenceController.coffee delete mode 100644 services/web/app/coffee/Features/Subscription/SubscriptionDomainHandler.coffee delete mode 100644 services/web/app/views/subscriptions/domain/join.pug delete mode 100644 services/web/public/src/main/subscription/domain-subscription-join-controller.js delete mode 100644 services/web/test/unit/coffee/Subscription/SubscriptionDomainHandlerTests.coffee diff --git a/services/web/app/coffee/Features/Notifications/NotificationsBuilder.coffee b/services/web/app/coffee/Features/Notifications/NotificationsBuilder.coffee index c0280450ab..14751a54e3 100644 --- a/services/web/app/coffee/Features/Notifications/NotificationsBuilder.coffee +++ b/services/web/app/coffee/Features/Notifications/NotificationsBuilder.coffee @@ -6,19 +6,6 @@ settings = require "settings-sharelatex" module.exports = # Note: notification keys should be url-safe - - groupPlan: (user, licence)-> - key : "join-sub-#{licence.subscription_id}" - create: (callback = ->)-> - messageOpts = - groupName: licence.name - subscription_id: licence.subscription_id - logger.log user_id:user._id, key:@key, "creating notification key for user" - NotificationsHandler.createNotification user._id, @key, "notification_group_invite", messageOpts, null, callback - - read: (callback = ->)-> - NotificationsHandler.markAsReadWithKey user._id, @key, callback - projectInvite: (invite, project, sendingUser, user) -> key: "project-invite-#{invite._id}" create: (callback=()->) -> diff --git a/services/web/app/coffee/Features/Subscription/DomainLicenceController.coffee b/services/web/app/coffee/Features/Subscription/DomainLicenceController.coffee deleted file mode 100644 index f131b0118e..0000000000 --- a/services/web/app/coffee/Features/Subscription/DomainLicenceController.coffee +++ /dev/null @@ -1,47 +0,0 @@ -SubscriptionGroupHandler = require("./SubscriptionGroupHandler") -logger = require("logger-sharelatex") -SubscriptionLocator = require("./SubscriptionLocator") -ErrorsController = require("../Errors/ErrorController") -SubscriptionDomainHandler = require("./SubscriptionDomainHandler") -AuthenticationController = require('../Authentication/AuthenticationController') -TeamInvitesHandler = require('./TeamInvitesHandler') - -async = require("async") - -module.exports = - join: (req, res)-> - user = AuthenticationController.getSessionUser(req) - licence = SubscriptionDomainHandler.getLicenceUserCanJoin(user) - - if !licence? - return ErrorsController.notFound(req, res) - - jobs = - partOfGroup: (cb)-> - SubscriptionGroupHandler.isUserPartOfGroup user._id, licence.group_subscription_id, cb - subscription: (cb)-> - SubscriptionLocator.getUsersSubscription user._id, cb - - async.series jobs, (err, results)-> - { partOfGroup, subscription } = results - if partOfGroup - return res.redirect("/user/subscription/custom_account") - else - res.render "subscriptions/domain/join", - title: "Group Invitation" - group_subscription_id: licence.group_subscription_id - licenceName: licence.name - has_personal_subscription: subscription? - - createInvite: (req, res, next)-> - user = AuthenticationController.getSessionUser(req) - licence = SubscriptionDomainHandler.getLicenceUserCanJoin(user) - - if !licence? - return ErrorsController.notFound(req, res) - - TeamInvitesHandler.createDomainInvite user, licence, (err) -> - if err? - next(err) - else - res.sendStatus 200 diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee index 0f359f80bd..ae1a36d085 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee @@ -7,7 +7,6 @@ RecurlyWrapper = require './RecurlyWrapper' Settings = require 'settings-sharelatex' logger = require('logger-sharelatex') GeoIpLookup = require("../../infrastructure/GeoIpLookup") -SubscriptionDomainHandler = require("./SubscriptionDomainHandler") UserGetter = require "../User/UserGetter" FeaturesUpdater = require './FeaturesUpdater' planFeatures = require './planFeatures' diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionDomainHandler.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionDomainHandler.coffee deleted file mode 100644 index d32fd591d2..0000000000 --- a/services/web/app/coffee/Features/Subscription/SubscriptionDomainHandler.coffee +++ /dev/null @@ -1,30 +0,0 @@ -async = require("async") -_ = require("underscore") -settings = require("settings-sharelatex") - -module.exports = SubscriptionDomainHandler = - - - getLicenceUserCanJoin: (user)-> - licence = SubscriptionDomainHandler._findDomainLicence(user.email) - return licence - - getDomainLicencePage: (user)-> - licence = SubscriptionDomainHandler._findDomainLicence(user.email) - if licence?.verifyEmail - return "/user/subscription/domain/join" - else - return undefined - - _findDomainLicence: (email)-> - licence = _.find settings.domainLicences, (licence)-> - _.find licence.domains, (domain)-> - regex = "[@\.]#{domain}" - return email.match(regex) - - return licence - - findDomainLicenceBySubscriptionId: (subscription_id)-> - licence = _.find settings.domainLicences, (licence)-> - licence?.subscription_id == subscription_id - return licence diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee index ff641189e5..173b2eb33f 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee @@ -1,7 +1,6 @@ AuthenticationController = require('../Authentication/AuthenticationController') SubscriptionController = require('./SubscriptionController') SubscriptionGroupController = require './SubscriptionGroupController' -DomainLicenceController = require './DomainLicenceController' TeamInvitesController = require './TeamInvitesController' RateLimiterMiddlewear = require('../Security/RateLimiterMiddlewear') Settings = require "settings-sharelatex" @@ -34,17 +33,6 @@ module.exports = }), TeamInvitesController.acceptInvite - # Routes to join a domain licence team - webRouter.get '/user/subscription/domain/join', AuthenticationController.requireLogin(), DomainLicenceController.join - webRouter.post '/user/subscription/domain/join', - AuthenticationController.requireLogin(), - RateLimiterMiddlewear.rateLimit({ - endpointName: 'join-domain-subscription', - maxRequests: 10 - timeInterval: 60 - }), - DomainLicenceController.createInvite - #recurly callback publicApiRouter.post '/user/subscription/callback', SubscriptionController.recurlyNotificationParser, SubscriptionController.recurlyCallback diff --git a/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee b/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee index 2051a9282f..43223ebd5c 100644 --- a/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee +++ b/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee @@ -43,18 +43,6 @@ module.exports = TeamInvitesHandler = return callback(error) if error? createInvite(subscription, email, inviterName, callback) - createDomainInvite: (user, licence, callback) -> - email = EmailHelper.parseEmail(user.email) - return callback(new Error('invalid email')) if !email? - logger.log {licence, email: email}, "Creating domain team invite" - # If name == 'Uni of X License', make the email read only - # 'Uni of X has invited you...' - inviterName = licence.name.replace(/\s+(site\s+)?licence$/i, '') - - SubscriptionLocator.getSubscription licence.subscription_id, (error, subscription) -> - return callback(error) if error? - createInvite(subscription, email, inviterName, callback) - importInvite: (subscription, inviterName, email, token, sentAt, callback) -> checkIfInviteIsPossible subscription, email, (error, possible, reason) -> return callback(error) if error? diff --git a/services/web/app/coffee/Features/User/UserHandler.coffee b/services/web/app/coffee/Features/User/UserHandler.coffee index 96aee5a246..b3e62f79a0 100644 --- a/services/web/app/coffee/Features/User/UserHandler.coffee +++ b/services/web/app/coffee/Features/User/UserHandler.coffee @@ -1,31 +1,8 @@ -SubscriptionDomainHandler = require("../Subscription/SubscriptionDomainHandler") -NotificationsBuilder = require("../Notifications/NotificationsBuilder") -SubscriptionGroupHandler = require("../Subscription/SubscriptionGroupHandler") TeamInvitesHandler = require("../Subscription/TeamInvitesHandler") -logger = require("logger-sharelatex") - module.exports = UserHandler = - populateTeamInvites: (user, callback) -> - UserHandler.notifyDomainLicence user, (err) -> - return callback(err) if err? - TeamInvitesHandler.createTeamInvitesForLegacyInvitedEmail(user.email, callback) - - notifyDomainLicence: (user, callback = ->)-> - logger.log user_id:user._id, "notiying user about a potential domain licence" - licence = SubscriptionDomainHandler.getLicenceUserCanJoin user - if !licence? - return callback() - - SubscriptionGroupHandler.isUserPartOfGroup user._id, licence.subscription_id, (err, alreadyPartOfGroup)-> - if err? - return callback(err) - else if alreadyPartOfGroup - logger.log user_id:user._id, "user already part of team, not creating notifcation for them" - return callback() - else - NotificationsBuilder.groupPlan(user, licence).create(callback) + TeamInvitesHandler.createTeamInvitesForLegacyInvitedEmail(user.email, callback) setupLoginData: (user, callback = ->)-> @populateTeamInvites user, callback diff --git a/services/web/app/views/project/list/notifications.pug b/services/web/app/views/project/list/notifications.pug index 702c178417..ac503da9ab 100644 --- a/services/web/app/views/project/list/notifications.pug +++ b/services/web/app/views/project/list/notifications.pug @@ -26,16 +26,6 @@ span(ng-controller="NotificationsController").userNotifications button(ng-click="dismiss(notification)").close.pull-right span(aria-hidden="true") × span.sr-only #{translate("close")} - .alert.alert-info(ng-switch-when="notification_group_invite") - div.notification_inner - .notification_body - | #{translate("invited_to_join_team")}: {{ notification.messageOpts.groupName }} - a.pull-right.btn.btn-sm.btn-info(href="/user/subscription/domain/join") - | #{translate("join_team")} - span().notification_close - button(ng-click="dismiss(notification)").close.pull-right - span(aria-hidden="true") × - span.sr-only #{translate("close")} .alert.alert-info(ng-switch-when="notification_ip_matched_affiliation") div.notification_inner .notification_body diff --git a/services/web/app/views/subscriptions/domain/join.pug b/services/web/app/views/subscriptions/domain/join.pug deleted file mode 100644 index 8c7c54234e..0000000000 --- a/services/web/app/views/subscriptions/domain/join.pug +++ /dev/null @@ -1,39 +0,0 @@ -extends ../../layout - -block scripts - script(type='text/javascript'). - window.group_subscription_id = '#{group_subscription_id}' - window.has_personal_subscription = #{has_personal_subscription} - -block content - .content.content-alt - .container - .row - .col-md-8.col-md-offset-2 - -if (query.expired) - .alert.alert-warning #{translate("email_link_expired")} - - .row.row-spaced - .col-md-8.col-md-offset-2.text-center(ng-cloak) - .card(ng-controller="DomainSubscriptionJoinController") - .page-header - h1.text-centered #{translate("you_are_invited_to_group", {groupName:licenceName})} - - div(ng-show="view =='personalSubscription'") - p #{translate("cancel_personal_subscription_first")} - p - a.btn.btn.btn-default(ng-click="keepPersonalSubscription()", ng-disabled="inflight") #{translate("not_now")} - |   - a.btn.btn.btn-primary(ng-click="cancelSubscription()", ng-disabled="inflight") #{translate("cancel_your_subscription")} - - div(ng-show="view =='domainSubscriptionJoin'") - p #{translate("group_provides_you_with_premium_account", {groupName:licenceName})} - p - a.btn.btn-default(href="/project") #{translate("not_now")} - |   - a.btn.btn.btn-primary(ng-click="joinGroup()", ng-disabled="inflight") #{translate("verify_email_address")} - - div(ng-show="view =='requestSent'") - p #{translate("check_email_to_complete_the_upgrade")} - p - a.btn.btn.btn-primary(href="/project") #{translate("done")} diff --git a/services/web/public/src/main.js b/services/web/public/src/main.js index c528d9ebe1..4f7e17ab33 100644 --- a/services/web/public/src/main.js +++ b/services/web/public/src/main.js @@ -27,7 +27,6 @@ define([ 'main/annual-upgrade', 'main/announcements', 'main/register-users', - 'main/subscription/domain-subscription-join-controller', 'main/subscription/team-invite-controller', 'main/contact-us', 'main/learn', diff --git a/services/web/public/src/main/subscription/domain-subscription-join-controller.js b/services/web/public/src/main/subscription/domain-subscription-join-controller.js deleted file mode 100644 index 8c884c0fef..0000000000 --- a/services/web/public/src/main/subscription/domain-subscription-join-controller.js +++ /dev/null @@ -1,55 +0,0 @@ -/* eslint-disable - camelcase, - max-len, - no-return-assign, - no-undef, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ -define(['base'], App => - App.controller('DomainSubscriptionJoinController', function($scope, $http) { - $scope.inflight = false - - if (has_personal_subscription) { - $scope.view = 'personalSubscription' - } else { - $scope.view = 'domainSubscriptionJoin' - } - - $scope.keepPersonalSubscription = () => - ($scope.view = 'domainSubscriptionJoin') - - $scope.cancelSubscription = function() { - $scope.inflight = true - const request = $http.post('/user/subscription/cancel', { - _csrf: window.csrfToken - }) - request.then(function() { - $scope.inflight = false - return ($scope.view = 'domainSubscriptionJoin') - }) - return request.catch(() => console.log('the request failed')) - } - - return ($scope.joinGroup = function() { - $scope.view = 'requestSent' - $scope.inflight = true - const request = $http.post('/user/subscription/domain/join', { - _csrf: window.csrfToken - }) - request.then(function(response) { - const { status } = response - $scope.inflight = false - if (status !== 200) { - // assume request worked - return ($scope.requestSent = false) - } - }) - return request.catch(() => console.log('the request failed')) - }) - })) diff --git a/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee b/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee index b3e5ed1db0..fcfa86f029 100644 --- a/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee +++ b/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee @@ -59,8 +59,6 @@ describe "SubscriptionController", -> gaExperiments:{} @GeoIpLookup = getCurrencyCode:sinon.stub() - @SubscriptionDomainHandler = - getDomainLicencePage:sinon.stub() @UserGetter = getUser: sinon.stub().callsArgWith(2, null, @user) @SubscriptionController = SandboxedModule.require modulePath, requires: @@ -74,7 +72,6 @@ describe "SubscriptionController", -> log:-> warn:-> "settings-sharelatex": @settings - "./SubscriptionDomainHandler":@SubscriptionDomainHandler "../User/UserGetter": @UserGetter "./RecurlyWrapper": @RecurlyWrapper = {} "./FeaturesUpdater": @FeaturesUpdater = {} diff --git a/services/web/test/unit/coffee/Subscription/SubscriptionDomainHandlerTests.coffee b/services/web/test/unit/coffee/Subscription/SubscriptionDomainHandlerTests.coffee deleted file mode 100644 index 56509a031a..0000000000 --- a/services/web/test/unit/coffee/Subscription/SubscriptionDomainHandlerTests.coffee +++ /dev/null @@ -1,56 +0,0 @@ -should = require('chai').should() -SandboxedModule = require('sandboxed-module') -assert = require('assert') -path = require('path') -sinon = require('sinon') -modulePath = path.join __dirname, "../../../../app/js/Features/Subscription/SubscriptionDomainHandler" -expect = require("chai").expect - -describe "SubscriptionDomainHandler", -> - - beforeEach -> - - @adminUser_id = 12345 - @otherAdminUser_id = 32131231234 - @ThirdOtherAdminUser_id = 33424324 - @settings = - domainLicences: [ - {domains:["uni.edu", "student.uni.edu"], adminUser_id:@adminUser_id} - {domains:["student.myuni.com", "teacher.myuni.com"], adminUser_id:@otherAdminUser_id} - {domains:["highcools.site"], adminUser_id:@ThirdOtherAdminUser_id} - - ] - @SubscriptionGroupHandler = - addUserToGroup: sinon.stub().callsArg(2) - @SubscriptionDomainHandler = SandboxedModule.require modulePath, requires: - "settings-sharelatex":@settings - "logger-sharelatex": log:-> - "./SubscriptionGroupHandler": @SubscriptionGroupHandler - - describe "_findDomainLicence", -> - - it "should find the domain", (done)-> - licence = @SubscriptionDomainHandler._findDomainLicence "bob@uni.edu" - licence.adminUser_id.should.equal @adminUser_id - done() - - it "should find the if email is subdomain", (done)-> - licence = @SubscriptionDomainHandler._findDomainLicence "bob@somewherelse.highcools.site" - licence.adminUser_id.should.equal @ThirdOtherAdminUser_id - done() - - it "should find one of the other emails in the domain list", (done)-> - licence = @SubscriptionDomainHandler._findDomainLicence "sally@teacher.myuni.com" - licence.adminUser_id.should.equal @otherAdminUser_id - done() - - it "should return undefined if no licence matches even if end of email is same", (done)-> - licence = @SubscriptionDomainHandler._findDomainLicence "bob@someotherhighcools.site" - expect(licence).to.not.exist - done(licence) - - it "should return undefined if no licence matches", (done)-> - licence = @SubscriptionDomainHandler._findDomainLicence "bob@other.edu" - expect(licence).to.not.exist - done(licence) - diff --git a/services/web/test/unit/coffee/Subscription/TeamInvitesHandlerTests.coffee b/services/web/test/unit/coffee/Subscription/TeamInvitesHandlerTests.coffee index 102340af39..785b03630f 100644 --- a/services/web/test/unit/coffee/Subscription/TeamInvitesHandlerTests.coffee +++ b/services/web/test/unit/coffee/Subscription/TeamInvitesHandlerTests.coffee @@ -147,56 +147,6 @@ describe "TeamInvitesHandler", -> ).should.eq true done() - describe "createDomainInvite", -> - beforeEach -> - @licence = - subscription_id: @subscription.id - name: "Team Daenerys" - - @user = - email: "John.Snow@example.com" - - it "adds the team invite to the subscription", (done) -> - @TeamInvitesHandler.createDomainInvite @user, @licence, (err, invite) => - expect(err).to.eq(null) - expect(invite.token).to.eq(@newToken) - expect(invite.email).to.eq("john.snow@example.com") - expect(invite.inviterName).to.eq("Team Daenerys") - expect(@subscription.teamInvites).to.deep.include(invite) - done() - - it "sends an email", (done) -> - @TeamInvitesHandler.createDomainInvite @user, @licence, (err, invite) => - @EmailHandler.sendEmail.calledWith("verifyEmailToJoinTeam", - sinon.match({ - to: "john.snow@example.com" - inviterName: "Team Daenerys" - acceptInviteUrl: "http://example.com/subscription/invites/#{@newToken}/" - }) - ).should.equal true - done() - - it "stripe licence from name", (done) -> - @licence.name = 'Foo Licence' - @TeamInvitesHandler.createDomainInvite @user, @licence, (err, invite) => - @EmailHandler.sendEmail.calledWith("verifyEmailToJoinTeam", - sinon.match({ - inviterName: 'Foo' - }) - ).should.equal true - done() - - - it "stripe site licence from name", (done) -> - @licence.name = 'Foo Site Licence' - @TeamInvitesHandler.createDomainInvite @user, @licence, (err, invite) => - @EmailHandler.sendEmail.calledWith("verifyEmailToJoinTeam", - sinon.match({ - inviterName: 'Foo' - }) - ).should.equal true - done() - describe "importInvite", -> beforeEach -> @sentAt = new Date() diff --git a/services/web/test/unit/coffee/User/UserHandlerTests.coffee b/services/web/test/unit/coffee/User/UserHandlerTests.coffee index 5c82fd7bd3..0a6207ed19 100644 --- a/services/web/test/unit/coffee/User/UserHandlerTests.coffee +++ b/services/web/test/unit/coffee/User/UserHandlerTests.coffee @@ -12,69 +12,17 @@ describe "UserHandler", -> 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}) - @TeamInvitesHandler = createTeamInvitesForLegacyInvitedEmail: sinon.stub().yields() @UserHandler = SandboxedModule.require modulePath, requires: - "logger-sharelatex": @logger = { log: sinon.stub() } - "../Notifications/NotificationsBuilder":@NotificationsBuilder - "../Subscription/SubscriptionDomainHandler":@SubscriptionDomainHandler - "../Subscription/SubscriptionGroupHandler":@SubscriptionGroupHandler "../Subscription/TeamInvitesHandler": @TeamInvitesHandler describe "populateTeamInvites", -> beforeEach (done)-> - @UserHandler.notifyDomainLicence = sinon.stub().yields() @UserHandler.populateTeamInvites @user, done - it "notifies the user about domain licences zzzzz", -> - @UserHandler.notifyDomainLicence.calledWith(@user).should.eq true - it "notifies the user about legacy team invites", -> @TeamInvitesHandler.createTeamInvitesForLegacyInvitedEmail .calledWith(@user.email).should.eq true - describe "notifyDomainLicence", -> - describe "no licence", -> - beforeEach (done)-> - @SubscriptionDomainHandler.getLicenceUserCanJoin.returns() - @UserHandler.populateTeamInvites @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.populateTeamInvites @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.populateTeamInvites @user, done - - it "should create notifcation", (done)-> - @NotificationsBuilder.groupPlan.called.should.equal false - done()