Merge pull request #17553 from overleaf/mj-admin-history-ranges-enable

[web] Add button for adding history ranges support in admin panel

GitOrigin-RevId: fa85b25719fff753f0d0806ccb02ad2f9db2ee82
This commit is contained in:
Mathias Jakobsen 2024-03-27 09:17:26 +00:00 committed by Copybot
parent 919a83c193
commit 44d0b947ce
2 changed files with 42 additions and 0 deletions

View file

@ -1,6 +1,7 @@
const { Project } = require('../../models/Project') const { Project } = require('../../models/Project')
const settings = require('@overleaf/settings') const settings = require('@overleaf/settings')
const { callbackify } = require('util') const { callbackify } = require('util')
const { db, ObjectId } = require('../../infrastructure/mongodb')
const safeCompilers = ['xelatex', 'pdflatex', 'latex', 'lualatex'] const safeCompilers = ['xelatex', 'pdflatex', 'latex', 'lualatex']
const ProjectOptionsHandler = { const ProjectOptionsHandler = {
@ -62,6 +63,14 @@ const ProjectOptionsHandler = {
const update = { $unset: { brandVariationId: 1 } } const update = { $unset: { brandVariationId: 1 } }
return Project.updateOne(conditions, update, {}) return Project.updateOne(conditions, update, {})
}, },
async enableHistoryRangesSupport(projectId) {
const conditions = { _id: new ObjectId(projectId) }
const update = { $set: { 'overleaf.history.rangesSupportEnabled': true } }
// NOTE: Updating the Mongoose model with the same query doesn't work. Maybe
// because rangesSupportEnabled is not part of the schema?
return db.projects.updateOne(conditions, update)
},
} }
module.exports = { module.exports = {
@ -74,5 +83,8 @@ module.exports = {
unsetBrandVariationId: callbackify( unsetBrandVariationId: callbackify(
ProjectOptionsHandler.unsetBrandVariationId ProjectOptionsHandler.unsetBrandVariationId
), ),
enableHistoryRangesSupport: callbackify(
ProjectOptionsHandler.enableHistoryRangesSupport
),
promises: ProjectOptionsHandler, promises: ProjectOptionsHandler,
} }

View file

@ -17,6 +17,7 @@ const { expect } = require('chai')
const modulePath = const modulePath =
'../../../../app/src/Features/Project/ProjectOptionsHandler.js' '../../../../app/src/Features/Project/ProjectOptionsHandler.js'
const SandboxedModule = require('sandboxed-module') const SandboxedModule = require('sandboxed-module')
const { ObjectId } = require('mongodb')
describe('ProjectOptionsHandler', function () { describe('ProjectOptionsHandler', function () {
const projectId = '4eecaffcbffa66588e000008' const projectId = '4eecaffcbffa66588e000008'
@ -28,6 +29,12 @@ describe('ProjectOptionsHandler', function () {
} }
this.projectModel.updateOne = sinon.stub().resolves() this.projectModel.updateOne = sinon.stub().resolves()
this.db = {
projects: {
updateOne: sinon.stub().resolves(),
},
}
this.handler = SandboxedModule.require(modulePath, { this.handler = SandboxedModule.require(modulePath, {
requires: { requires: {
'../../models/Project': { Project: this.projectModel }, '../../models/Project': { Project: this.projectModel },
@ -42,6 +49,7 @@ describe('ProjectOptionsHandler', function () {
{ imageName: 'texlive-1234.5', imageDesc: 'test image 1' }, { imageName: 'texlive-1234.5', imageDesc: 'test image 1' },
], ],
}, },
'../../infrastructure/mongodb': { db: this.db, ObjectId },
}, },
}) })
}) })
@ -181,6 +189,28 @@ describe('ProjectOptionsHandler', function () {
}) })
}) })
describe('setting the rangesSupportEnabled', function () {
it('should perform and update on mongo', async function () {
await this.handler.promises.enableHistoryRangesSupport(projectId)
sinon.assert.calledWith(
this.db.projects.updateOne,
{ _id: new ObjectId(projectId) },
{ $set: { 'overleaf.history.rangesSupportEnabled': true } }
)
})
describe('when mongo update error occurs', function () {
beforeEach(function () {
this.db.projects.updateOne = sinon.stub().yields('error')
})
it('should be rejected', async function () {
expect(this.handler.promises.enableHistoryRangesSupport(projectId)).to
.be.rejected
})
})
})
describe('unsetting the brandVariationId', function () { describe('unsetting the brandVariationId', function () {
it('should perform and update on mongo', async function () { it('should perform and update on mongo', async function () {
await this.handler.promises.unsetBrandVariationId(projectId) await this.handler.promises.unsetBrandVariationId(projectId)