From e36740bb278d0bfcac82bd0a17565003eab5e2e3 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Wed, 12 Feb 2025 15:23:05 +0000 Subject: [PATCH] [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 --- .../acceptance/src/ProjectFeaturesTests.mjs | 2 +- .../acceptance/src/ProjectInviteTests.mjs | 11 ++------- .../web/test/acceptance/src/helpers/User.mjs | 23 ++++++++++++++++++- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/services/web/test/acceptance/src/ProjectFeaturesTests.mjs b/services/web/test/acceptance/src/ProjectFeaturesTests.mjs index c7bd2a0a38..30304fd98a 100644 --- a/services/web/test/acceptance/src/ProjectFeaturesTests.mjs +++ b/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) diff --git a/services/web/test/acceptance/src/ProjectInviteTests.mjs b/services/web/test/acceptance/src/ProjectInviteTests.mjs index 48473687a1..319d8f9ed1 100644 --- a/services/web/test/acceptance/src/ProjectInviteTests.mjs +++ b/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 ) diff --git a/services/web/test/acceptance/src/helpers/User.mjs b/services/web/test/acceptance/src/helpers/User.mjs index b2200756c4..51a6fc5721 100644 --- a/services/web/test/acceptance/src/helpers/User.mjs +++ b/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,