Kaynağa Gözat

Merge pull request #19318 from overleaf/mj-revert-check-ranges-support

[web] Check that project has ranges support when reverting

GitOrigin-RevId: 761e435e9d640c08f27dd4ad2cef95934c0cc48b
Eric Mc Sween 2 yıl önce
ebeveyn
işleme
0be042e331

+ 9 - 0
services/web/app/src/Features/History/RestoreManager.js

@@ -14,6 +14,8 @@ const DocstoreManager = require('../Docstore/DocstoreManager')
 const logger = require('@overleaf/logger')
 const EditorRealTimeController = require('../Editor/EditorRealTimeController')
 const ChatManager = require('../Chat/ChatManager')
+const OError = require('@overleaf/o-error')
+const ProjectGetter = require('../Project/ProjectGetter')
 
 const RestoreManager = {
   async restoreFileFromV2(userId, projectId, version, pathname) {
@@ -48,6 +50,13 @@ const RestoreManager = {
   },
 
   async revertFile(userId, projectId, version, pathname) {
+    const project = await ProjectGetter.promises.getProject(projectId, {
+      overleaf: true,
+    })
+    if (!project?.overleaf?.history?.rangesSupportEnabled) {
+      throw new OError('project does not have ranges support', { projectId })
+    }
+
     const fsPath = await RestoreManager._writeFileVersionToDisk(
       projectId,
       version,

+ 24 - 0
services/web/test/unit/src/History/RestoreManagerTests.js

@@ -34,6 +34,7 @@ describe('RestoreManager', function () {
         '../Chat/ChatManager': (this.ChatManager = { promises: {} }),
         '../Editor/EditorRealTimeController': (this.EditorRealTimeController =
           {}),
+        '../Project/ProjectGetter': (this.ProjectGetter = { promises: {} }),
       },
     })
     this.user_id = 'mock-user-id'
@@ -211,6 +212,10 @@ describe('RestoreManager', function () {
 
   describe('revertFile', function () {
     beforeEach(function () {
+      this.ProjectGetter.promises.getProject = sinon.stub()
+      this.ProjectGetter.promises.getProject
+        .withArgs(this.project_id)
+        .resolves({ overleaf: { history: { rangesSupportEnabled: true } } })
       this.RestoreManager.promises._writeFileVersionToDisk = sinon
         .stub()
         .resolves((this.fsPath = '/tmp/path/on/disk'))
@@ -225,6 +230,25 @@ describe('RestoreManager', function () {
         .rejects()
     })
 
+    describe('reverting a project without ranges support', function () {
+      beforeEach(function () {
+        this.ProjectGetter.promises.getProject = sinon.stub().resolves({
+          overleaf: { history: { rangesSupportEnabled: false } },
+        })
+      })
+
+      it('should throw an error', async function () {
+        await expect(
+          this.RestoreManager.promises.revertFile(
+            this.user_id,
+            this.project_id,
+            this.version,
+            this.pathname
+          )
+        ).to.eventually.be.rejectedWith('project does not have ranges support')
+      })
+    })
+
     describe('reverting a document', function () {
       beforeEach(function () {
         this.pathname = 'foo.tex'