Преглед изворни кода

Merge pull request #2560 from overleaf/ta-group-admin-no-features

Don't Give Features To Group Admins

GitOrigin-RevId: 3588aff773bdc4cf18d18ce52f2c1b73462d806e
nate stemen пре 6 година
родитељ
комит
aa48d639a0

+ 1 - 1
services/web/app/src/Features/Subscription/FeaturesUpdater.js

@@ -94,7 +94,7 @@ const FeaturesUpdater = {
   },
 
   _getIndividualFeatures(userId, callback) {
-    SubscriptionLocator.getUsersSubscription(userId, (err, sub) =>
+    SubscriptionLocator.getUserIndividualSubscription(userId, (err, sub) =>
       callback(err, FeaturesUpdater._subscriptionToFeatures(sub))
     )
   },

+ 14 - 0
services/web/app/src/Features/Subscription/SubscriptionLocator.js

@@ -31,6 +31,17 @@ const SubscriptionLocator = {
     })
   },
 
+  getUserIndividualSubscription(user_or_id, callback) {
+    const user_id = SubscriptionLocator._getUserId(user_or_id)
+    return Subscription.findOne(
+      { admin_id: user_id, groupPlan: false },
+      function(err, subscription) {
+        logger.log({ user_id }, 'got users individual subscription')
+        return callback(err, subscription)
+      }
+    )
+  },
+
   findManagedSubscription(managerId, callback) {
     return Subscription.findOne({ manager_ids: managerId }, callback)
   },
@@ -107,6 +118,9 @@ const SubscriptionLocator = {
 
 SubscriptionLocator.promises = {
   getUsersSubscription: promisify(SubscriptionLocator.getUsersSubscription),
+  getUserIndividualSubscription: promisify(
+    SubscriptionLocator.getUserIndividualSubscription
+  ),
   findManagedSubscription: promisify(
     SubscriptionLocator.findManagedSubscription
   ),

+ 74 - 0
services/web/test/acceptance/src/SubscriptionFeaturesTests.js

@@ -0,0 +1,74 @@
+const { expect } = require('chai')
+const async = require('async')
+const User = require('./helpers/User')
+const Subscription = require('./helpers/Subscription')
+
+describe('Subscriptions', function() {
+  describe('features', function() {
+    describe('individual subscriptions', function() {
+      beforeEach(function(done) {
+        this.adminUser = new User()
+        async.series(
+          [
+            cb => this.adminUser.ensureUserExists(cb),
+            cb => {
+              this.subscription = new Subscription({
+                adminId: this.adminUser._id,
+                groupPlan: false,
+                planCode: 'professional'
+              })
+              this.subscription.ensureExists(cb)
+            },
+            cb => this.subscription.refreshUsersFeatures(cb)
+          ],
+          done
+        )
+      })
+
+      it('should give features to admin', function(done) {
+        this.adminUser.getFeatures((error, features) => {
+          expect(features.collaborators).to.equal(-1)
+          done(error)
+        })
+      })
+    })
+
+    describe('group subscriptions', function() {
+      beforeEach(function(done) {
+        this.adminUser = new User()
+        this.memberUser = new User()
+        async.series(
+          [
+            cb => this.adminUser.ensureUserExists(cb),
+            cb => this.memberUser.ensureUserExists(cb),
+            cb => {
+              this.subscription = new Subscription({
+                adminId: this.adminUser._id,
+                memberIds: [this.memberUser._id],
+                groupPlan: true,
+                planCode: 'professional'
+              })
+              this.subscription.ensureExists(cb)
+            },
+            cb => this.subscription.refreshUsersFeatures(cb)
+          ],
+          done
+        )
+      })
+
+      it('should give features to member', function(done) {
+        this.memberUser.getFeatures((error, features) => {
+          expect(features.collaborators).to.equal(-1)
+          done(error)
+        })
+      })
+
+      it('should not give features to admin', function(done) {
+        this.adminUser.getFeatures((error, features) => {
+          expect(features.collaborators).to.equal(1)
+          done(error)
+        })
+      })
+    })
+  })
+})