From b58ba2299a42dd067f44685a8288ef0049fac98b Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Wed, 29 Sep 2021 11:05:21 +0200 Subject: [PATCH] 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 --- .../Features/LinkedFiles/ProjectFileAgent.js | 2 +- .../test/acceptance/src/LinkedFilesTests.js | 38 ++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/services/web/app/src/Features/LinkedFiles/ProjectFileAgent.js b/services/web/app/src/Features/LinkedFiles/ProjectFileAgent.js index 0941cbda6a..80cf49db25 100644 --- a/services/web/app/src/Features/LinkedFiles/ProjectFileAgent.js +++ b/services/web/app/src/Features/LinkedFiles/ProjectFileAgent.js @@ -197,7 +197,7 @@ module.exports = ProjectFileAgent = { }, function (err, entity, type) { if (err != null) { - if (/^not found.*/.test(err.toString())) { + if (/^not found.*/.test(err.message)) { err = new SourceFileNotFoundError() } return callback(err) diff --git a/services/web/test/acceptance/src/LinkedFilesTests.js b/services/web/test/acceptance/src/LinkedFilesTests.js index c2873e44cf..afcbee7a22 100644 --- a/services/web/test/acceptance/src/LinkedFilesTests.js +++ b/services/web/test/acceptance/src/LinkedFilesTests.js @@ -22,6 +22,7 @@ describe('LinkedFiles', function () { let projectOne, projectOneId, projectOneRootFolderId let projectTwo, projectTwoId, projectTwoRootFolderId const sourceDocName = 'test.txt' + let sourceDocId let owner before(function (done) { @@ -48,7 +49,7 @@ describe('LinkedFiles', function () { projectTwo = await owner.getProject(projectTwoId) projectTwoRootFolderId = projectTwo.rootFolder[0]._id.toString() - await owner.createDocInProject( + sourceDocId = await owner.createDocInProject( projectTwoId, projectTwoRootFolderId, sourceDocName @@ -154,6 +155,41 @@ describe('LinkedFiles', function () { expect(response.statusCode).to.equal(403) 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 () {