Kaynağa Gözat

[web] make user feature changes in tests more reliable (#23557)

* [web] tests: rename User.upgradeFeatures to User.upgradeSomeFeatures

The upgrades features do not match with any plan.

* [web] make user feature changes in tests more reliable

* [web] fix schema for featuresOverride in tests

* [web] log in after upgrading features

GitOrigin-RevId: ac5b19c798712926c118b221c553540b413802cd
Jakob Ackermann 1 yıl önce
ebeveyn
işleme
b928e865b7

+ 1 - 1
services/web/test/acceptance/src/ProjectFeaturesTests.mjs

@@ -52,7 +52,7 @@ describe('ProjectFeatures', function () {
 
     describe('with an upgraded account', function () {
       beforeEach(function (done) {
-        return this.owner.upgradeFeatures(done)
+        return this.owner.upgradeSomeFeatures(done)
       })
       after(function (done) {
         return this.owner.defaultFeatures(done)

+ 2 - 9
services/web/test/acceptance/src/ProjectInviteTests.mjs

@@ -327,8 +327,9 @@ describe('ProjectInviteTests', function () {
 
     Async.series(
       [
+        cb => this.sendingUser.ensureUserExists(cb),
+        cb => this.sendingUser.upgradeFeatures({ collaborators: 10 }, cb),
         cb => this.sendingUser.login(cb),
-        cb => this.sendingUser.setFeatures({ collaborators: 10 }, cb),
         cb =>
           this.sendingUser.mongoUpdate(
             {
@@ -336,14 +337,6 @@ describe('ProjectInviteTests', function () {
             },
             cb
           ),
-        cb =>
-          this.sendingUser.setFeaturesOverride(
-            {
-              note: 'ProjectInviteTests acceptance tests',
-              features: { collaborators: 10 },
-            },
-            cb
-          ),
       ],
       done
     )

+ 22 - 1
services/web/test/acceptance/src/helpers/User.mjs

@@ -437,6 +437,23 @@ class User {
     )
   }
 
+  // Update and persist feature upgrade. Downgrades will be flaky!
+  upgradeFeatures(features, callback) {
+    this.setFeatures(features, err => {
+      if (err) return callback(err)
+      // Persist the feature update, otherwise the next feature refresh will reset them.
+      this.setFeaturesOverride(
+        {
+          createdAt: new Date(),
+          note: 'Some note',
+          features,
+        },
+        callback
+      )
+    })
+  }
+
+  // Low-level. Temporary feature change. A feature refresh might reset them, e.g. "some time" after logging in.
   setFeatures(features, callback) {
     const update = {}
     for (const key in features) {
@@ -448,7 +465,11 @@ class User {
       .catch(callback)
   }
 
+  // Low-level. Permanent feature change. Feature overrides are not applied right away. A feature refresh might populate them "some time" after login/changing subscriptions.
   setFeaturesOverride(featuresOverride, callback) {
+    if (!featuresOverride?.features) {
+      throw new Error('bad featuresOverride schema')
+    }
     const update = { $push: { featuresOverrides: featuresOverride } }
     UserModel.updateOne({ _id: this.id }, update)
       .then((...args) => callback(null, ...args))
@@ -542,7 +563,7 @@ class User {
     this.mongoUpdate(update, callback)
   }
 
-  upgradeFeatures(callback) {
+  upgradeSomeFeatures(callback) {
     const features = {
       collaborators: -1, // Infinite
       versioning: true,