[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
This commit is contained in:
Jakob Ackermann
2025-02-12 15:23:05 +00:00
committed by Copybot
parent f8dcb8fe95
commit e36740bb27
3 changed files with 25 additions and 11 deletions

View File

@@ -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)

View File

@@ -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
)

View File

@@ -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,