Merge pull request #14383 from overleaf/jpa-server-pro-feature-refresh-migration

[web] add migration for Server Pro/CE to refresh features once

GitOrigin-RevId: 799e6aef2ad9ad6806ec369911d56f7a40945098
This commit is contained in:
Jakob Ackermann
2023-08-18 09:57:58 +02:00
committed by Copybot
parent 94a4659672
commit c5bb18045e
3 changed files with 208 additions and 0 deletions

View File

@@ -1,3 +1,4 @@
const Settings = require('@overleaf/settings')
const { execSync } = require('child_process')
const { expect } = require('chai')
const { db } = require('../../../../../app/src/infrastructure/mongodb')
@@ -230,4 +231,140 @@ describe('ServerCEScripts', function () {
})
})
})
describe('upgrade-user-features', function () {
let userLatest, userSP1, userCustomTimeoutLower, userCustomTimeoutHigher
beforeEach('create users', async function () {
userLatest = new User()
userSP1 = new User()
userCustomTimeoutLower = new User()
userCustomTimeoutHigher = new User()
await Promise.all([
userLatest.ensureUserExists(),
userSP1.ensureUserExists(),
userCustomTimeoutLower.ensureUserExists(),
userCustomTimeoutHigher.ensureUserExists(),
])
})
const serverPro1Features = {
collaborators: -1,
dropbox: true,
versioning: true,
compileTimeout: 180,
compileGroup: 'standard',
references: true,
templates: true,
trackChanges: true,
}
beforeEach('downgrade userSP1', async function () {
await userSP1.mongoUpdate({ $set: { features: serverPro1Features } })
})
beforeEach('downgrade userCustomTimeoutLower', async function () {
run(
`node modules/server-ce-scripts/scripts/change-compile-timeout --user-id=${userCustomTimeoutLower.id} --compile-timeout=42`
)
})
beforeEach('upgrade userCustomTimeoutHigher', async function () {
run(
`node modules/server-ce-scripts/scripts/change-compile-timeout --user-id=${userCustomTimeoutHigher.id} --compile-timeout=360`
)
})
async function getFeatures() {
return [
await userLatest.getFeatures(),
await userSP1.getFeatures(),
await userCustomTimeoutLower.getFeatures(),
await userCustomTimeoutHigher.getFeatures(),
]
}
let initialFeatures
beforeEach('collect initial features', async function () {
initialFeatures = await getFeatures()
})
it('should have prepared the right features', async function () {
expect(initialFeatures).to.deep.equal([
Settings.defaultFeatures,
serverPro1Features,
Object.assign({}, Settings.defaultFeatures, {
compileTimeout: 42,
}),
Object.assign({}, Settings.defaultFeatures, {
compileTimeout: 360,
}),
])
})
describe('dry-run', function () {
let output
beforeEach('run script', function () {
output = run(
`node modules/server-ce-scripts/scripts/upgrade-user-features`
)
})
it('should update SP1 features', function () {
expect(output).to.include(userSP1.id)
})
it('should update lowerTimeout features', function () {
expect(output).to.include(userCustomTimeoutLower.id)
})
it('should not update latest features', function () {
expect(output).to.not.include(userLatest.id)
})
it('should not update higherTimeout features', function () {
expect(output).to.not.include(userCustomTimeoutHigher.id)
})
it('should not change any features in the db', async function () {
expect(await getFeatures()).to.deep.equal(initialFeatures)
})
})
describe('live run', function () {
let output
beforeEach('run script', function () {
output = run(
`node modules/server-ce-scripts/scripts/upgrade-user-features --dry-run=false`
)
})
it('should update SP1 features', function () {
expect(output).to.include(userSP1.id)
})
it('should update lowerTimeout features', function () {
expect(output).to.include(userCustomTimeoutLower.id)
})
it('should not update latest features', function () {
expect(output).to.not.include(userLatest.id)
})
it('should not update higherTimeout features', function () {
expect(output).to.not.include(userCustomTimeoutHigher.id)
})
it('should update features in the db', async function () {
expect(await getFeatures()).to.deep.equal([
Settings.defaultFeatures,
Settings.defaultFeatures,
Settings.defaultFeatures,
Object.assign({}, Settings.defaultFeatures, {
compileTimeout: 360,
}),
])
})
})
})
})