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,