From 9d28e4ab91fe0e1abc58dde97a875350282fc94c Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Fri, 19 Sep 2025 08:57:32 +0100 Subject: [PATCH] Merge pull request #28567 from overleaf/bg-fix-project-locator-root-folder respect elementType when matching rootFolder in findElement GitOrigin-RevId: f4e20ee6441fc16915297b2ac24737ed63398027 --- .../src/Features/Project/ProjectLocator.js | 5 +++- .../unit/src/Project/ProjectLocatorTests.js | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/services/web/app/src/Features/Project/ProjectLocator.js b/services/web/app/src/Features/Project/ProjectLocator.js index 2feaa0cebf..32d7d2bc00 100644 --- a/services/web/app/src/Features/Project/ProjectLocator.js +++ b/services/web/app/src/Features/Project/ProjectLocator.js @@ -95,7 +95,10 @@ function findElement(options, _callback) { const path = { fileSystem: '', mongo: 'rootFolder.0' } const startSearch = project => { - if (elementId + '' === project.rootFolder[0]._id + '') { + if ( + elementId + '' === project.rootFolder[0]._id + '' && + elementType === 'folders' + ) { callback(null, project.rootFolder[0], path, null) } else { search(project.rootFolder[0], path) diff --git a/services/web/test/unit/src/Project/ProjectLocatorTests.js b/services/web/test/unit/src/Project/ProjectLocatorTests.js index 14de550401..6cea98a024 100644 --- a/services/web/test/unit/src/Project/ProjectLocatorTests.js +++ b/services/web/test/unit/src/Project/ProjectLocatorTests.js @@ -112,6 +112,30 @@ describe('ProjectLocator', function () { foundElement._id.should.equal(rootFolder._id) }) + it('should not return root folder when searching for docs', async function () { + await expect( + this.locator.promises.findElement({ + project_id: project._id, + element_id: rootFolder._id, + type: 'docs', + }) + ) + .to.eventually.be.rejectedWith(Errors.NotFoundError) + .and.eventually.have.property('message', 'entity not found') + }) + + it('should not return root folder when searching for files', async function () { + await expect( + this.locator.promises.findElement({ + project_id: project._id, + element_id: rootFolder._id, + type: 'files', + }) + ) + .to.eventually.be.rejectedWith(Errors.NotFoundError) + .and.eventually.have.property('message', 'entity not found') + }) + it('when at root', async function () { const { element: foundElement,