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

Add info to NotFoundError (#33440)

* Add info to errors in ProjectLocator

* Update ProjectLocator.test.mjs

* Add info to errors in SSOConfigManager

* Update SSOConfigManager.test.mjs

GitOrigin-RevId: 5a13350af1808f3a16a4bc8a9946cbe8f15e6b3a
Alf Eaton 3 месяцев назад
Родитель
Сommit
b906de86db

+ 4 - 2
services/web/app/src/Features/Project/ProjectLocator.mjs

@@ -167,7 +167,9 @@ async function _findElementByPathWithProject(
       }
     }
     if (!found) {
-      throw new Errors.NotFoundError('parent folder not found in project', {
+      throw new Errors.NotFoundError(
+        'parent folder not found in project'
+      ).withInfo({
         projectId: project._id,
         needlePath,
         needleFolderName,
@@ -204,7 +206,7 @@ async function _findElementByPathWithProject(
     if (result != null) {
       return { element: result, type, folder }
     }
-    throw new Errors.NotFoundError('element not found in project', {
+    throw new Errors.NotFoundError('element not found in project').withInfo({
       projectId: project._id,
       needlePath,
       entityName,

+ 27 - 8
services/web/test/unit/src/Project/ProjectLocator.test.mjs

@@ -1,5 +1,6 @@
 import { vi, expect } from 'vitest'
 import sinon from 'sinon'
+import OError from '@overleaf/o-error'
 import Errors from '../../../../app/src/Features/Errors/Errors.js'
 
 const modulePath = '../../../../app/src/Features/Project/ProjectLocator'
@@ -412,18 +413,36 @@ describe('ProjectLocator', function () {
 
     it('should return an error if the file can not be found inside know folder', async function (ctx) {
       const path = `${subFolder.name}/${secondSubFolder.name}/exist.txt`
-      await expect(ctx.locator.promises.findElementByPath({ project, path })).to
-        .eventually.be.rejected
+      let error
+      try {
+        await ctx.locator.promises.findElementByPath({ project, path })
+      } catch (err) {
+        error = err
+      }
+      expect(error).to.be.instanceOf(Errors.NotFoundError)
+      expect(error.message).to.equal('element not found in project')
+      expect(OError.getFullInfo(error)).to.eql({
+        projectId: project._id,
+        needlePath: path,
+        entityName: 'exist.txt',
+      })
     })
 
     it('should return an error if the file can not be found inside unknown folder', async function (ctx) {
       const path = 'this/does/not/exist.txt'
-      await expect(
-        ctx.locator.promises.findElementByPath({
-          project,
-          path,
-        })
-      ).to.eventually.be.rejected
+      let error
+      try {
+        await ctx.locator.promises.findElementByPath({ project, path })
+      } catch (err) {
+        error = err
+      }
+      expect(error).to.be.instanceOf(Errors.NotFoundError)
+      expect(error.message).to.equal('parent folder not found in project')
+      expect(OError.getFullInfo(error)).to.eql({
+        projectId: project._id,
+        needlePath: path,
+        needleFolderName: 'this',
+      })
     })
 
     describe('where duplicate folder exists', function () {