diff --git a/services/web/app/src/Features/Project/ProjectController.js b/services/web/app/src/Features/Project/ProjectController.js index 47cc292062..3f58582905 100644 --- a/services/web/app/src/Features/Project/ProjectController.js +++ b/services/web/app/src/Features/Project/ProjectController.js @@ -9,6 +9,7 @@ const { ObjectId } = require('mongodb') const ProjectDeleter = require('./ProjectDeleter') const ProjectDuplicator = require('./ProjectDuplicator') const ProjectCreationHandler = require('./ProjectCreationHandler') +const ProjectHistoryHandler = require('./ProjectHistoryHandler') const EditorController = require('../Editor/EditorController') const ProjectHelper = require('./ProjectHelper') const metrics = require('@overleaf/metrics') @@ -680,6 +681,24 @@ const ProjectController = { activate(cb) { InactiveProjectManager.reactivateProjectIfRequired(projectId, cb) }, + ensureHistoryExists(cb) { + // enable full project history in background for older projects + if (!Settings.apis.project_history || !Features.hasFeature('saas')) { + return cb() + } + ProjectHistoryHandler.ensureHistoryExistsForProject( + projectId, + err => { + if (err) { + logger.error( + { err, projectId }, + 'error ensuring history exists for project' + ) + } + cb() + } + ) + }, markAsOpened(cb) { // don't need to wait for this to complete ProjectUpdateHandler.markAsOpened(projectId, () => {}) diff --git a/services/web/test/unit/src/Project/ProjectControllerTests.js b/services/web/test/unit/src/Project/ProjectControllerTests.js index 3fec7ffbbb..56373accd4 100644 --- a/services/web/test/unit/src/Project/ProjectControllerTests.js +++ b/services/web/test/unit/src/Project/ProjectControllerTests.js @@ -54,6 +54,9 @@ describe('ProjectController', function () { .stub() .callsArgWith(2, null, { _id: this.project_id }), } + this.ProjectHistoryHandler = { + ensureHistoryExistsForProject: sinon.stub().callsArg(1), + } this.SubscriptionLocator = { getUsersSubscription: sinon.stub() } this.LimitationsManager = { hasPaidSubscription: sinon.stub() } this.TagsHandler = { getAllTags: sinon.stub() } @@ -140,6 +143,7 @@ describe('ProjectController', function () { './ProjectDeleter': this.ProjectDeleter, './ProjectDuplicator': this.ProjectDuplicator, './ProjectCreationHandler': this.ProjectCreationHandler, + './ProjectHistoryHandler': this.ProjectHistoryHandler, '../Editor/EditorController': this.EditorController, '../User/UserController': this.UserController, './ProjectHelper': this.ProjectHelper, @@ -1024,6 +1028,18 @@ describe('ProjectController', function () { this.ProjectController.loadEditor(this.req, this.res) }) + it('should ensureHistoryExistsForProject if saas and project_history enabled', function (done) { + this.Features.hasFeature.withArgs('saas').returns(true) + this.settings.apis.project_history = 'enabled' + this.res.render = (pageName, opts) => { + this.ProjectHistoryHandler.ensureHistoryExistsForProject + .calledWith(this.project_id) + .should.equal(true) + done() + } + this.ProjectController.loadEditor(this.req, this.res) + }) + it('should mark project as opened', function (done) { this.res.render = (pageName, opts) => { this.ProjectUpdateHandler.markAsOpened