Просмотр исходного кода

Merge pull request #3354 from overleaf/jpa-fix-clone-invalid-root-doc

[ProjectDuplicator] silently ignore an invalid rootDoc when duplicating

GitOrigin-RevId: 93b4d4193fab25484525f8ab2c692e047cf0da30
Jakob Ackermann 6 лет назад
Родитель
Сommit
67b8719bf2

+ 5 - 1
services/web/app/src/Features/Project/ProjectDuplicator.js

@@ -60,7 +60,11 @@ async function duplicate(owner, originalProjectId, newProjectName) {
       docEntries,
       fileEntries
     )
-    if (rootDocPath) {
+    // Silently ignore the rootDoc in case it's not valid per the new limits.
+    if (
+      rootDocPath &&
+      ProjectEntityUpdateHandler.isPathValidForRootDoc(rootDocPath.fileSystem)
+    ) {
       await _setRootDoc(newProject._id, rootDocPath.fileSystem)
     }
     await _notifyDocumentUpdater(newProject, owner._id, {

+ 17 - 0
services/web/test/unit/src/Project/ProjectDuplicatorTests.js

@@ -159,6 +159,7 @@ describe('ProjectDuplicator', function() {
       }
     }
     this.ProjectEntityUpdateHandler = {
+      isPathValidForRootDoc: sinon.stub().returns(true),
       promises: {
         setRootDoc: sinon.stub().resolves()
       }
@@ -340,6 +341,22 @@ describe('ProjectDuplicator', function() {
     })
   })
 
+  describe('with an invalid root doc', function() {
+    beforeEach(async function() {
+      this.ProjectEntityUpdateHandler.isPathValidForRootDoc.returns(false)
+      this.newProject = await this.ProjectDuplicator.promises.duplicate(
+        this.owner,
+        this.project._id,
+        'Copy of project'
+      )
+    })
+
+    it('should not set the root doc on the copy', function() {
+      this.ProjectEntityUpdateHandler.promises.setRootDoc.should.not.have.been
+        .called
+    })
+  })
+
   describe('when there is an error', function() {
     beforeEach(async function() {
       this.ProjectEntityMongoUpdateHandler.promises.createNewFolderStructure.rejects()