Преглед изворни кода

Merge pull request #5277 from overleaf/jpa-handle-missing-file-during-refresh

[web] fix handling of missing source file when refreshing a linked file

GitOrigin-RevId: 775bf08a37adb20e71a1492d27bce9a41b959d27
Jakob Ackermann пре 5 година
родитељ
комит
b58ba2299a

+ 1 - 1
services/web/app/src/Features/LinkedFiles/ProjectFileAgent.js

@@ -197,7 +197,7 @@ module.exports = ProjectFileAgent = {
             },
             },
             function (err, entity, type) {
             function (err, entity, type) {
               if (err != null) {
               if (err != null) {
-                if (/^not found.*/.test(err.toString())) {
+                if (/^not found.*/.test(err.message)) {
                   err = new SourceFileNotFoundError()
                   err = new SourceFileNotFoundError()
                 }
                 }
                 return callback(err)
                 return callback(err)

+ 37 - 1
services/web/test/acceptance/src/LinkedFilesTests.js

@@ -22,6 +22,7 @@ describe('LinkedFiles', function () {
   let projectOne, projectOneId, projectOneRootFolderId
   let projectOne, projectOneId, projectOneRootFolderId
   let projectTwo, projectTwoId, projectTwoRootFolderId
   let projectTwo, projectTwoId, projectTwoRootFolderId
   const sourceDocName = 'test.txt'
   const sourceDocName = 'test.txt'
+  let sourceDocId
   let owner
   let owner
 
 
   before(function (done) {
   before(function (done) {
@@ -48,7 +49,7 @@ describe('LinkedFiles', function () {
       projectTwo = await owner.getProject(projectTwoId)
       projectTwo = await owner.getProject(projectTwoId)
       projectTwoRootFolderId = projectTwo.rootFolder[0]._id.toString()
       projectTwoRootFolderId = projectTwo.rootFolder[0]._id.toString()
 
 
-      await owner.createDocInProject(
+      sourceDocId = await owner.createDocInProject(
         projectTwoId,
         projectTwoId,
         projectTwoRootFolderId,
         projectTwoRootFolderId,
         sourceDocName
         sourceDocName
@@ -154,6 +155,41 @@ describe('LinkedFiles', function () {
       expect(response.statusCode).to.equal(403)
       expect(response.statusCode).to.equal(403)
       expect(body).to.equal('You do not have access to this project')
       expect(body).to.equal('You do not have access to this project')
     })
     })
+
+    it('should generate a proper error message when the source file has been deleted', async function () {
+      // import the file from the source project
+      let { response, body } = await owner.doRequest('post', {
+        url: `/project/${projectOneId}/linked_file`,
+        json: {
+          name: 'test-link.txt',
+          parent_folder_id: projectOneRootFolderId,
+          provider: 'project_file',
+          data: {
+            source_project_id: projectTwoId,
+            source_entity_path: `/${sourceDocName}`,
+          },
+        },
+      })
+      expect(response.statusCode).to.equal(200)
+      const existingFileId = body.new_file_id
+      expect(existingFileId).to.exist
+
+      // rename the source file
+      await owner.renameItemInProject(
+        projectTwoId,
+        'doc',
+        sourceDocId,
+        'renamed-doc.txt'
+      )
+
+      // refresh the file
+      ;({ response, body } = await owner.doRequest('post', {
+        url: `/project/${projectOneId}/linked_file/${existingFileId}/refresh`,
+        json: true,
+      }))
+      expect(response.statusCode).to.equal(404)
+      expect(body).to.equal('Source file not found')
+    })
   })
   })
 
 
   describe('with a linked project_file from a v1 project that has not been imported', function () {
   describe('with a linked project_file from a v1 project that has not been imported', function () {