Procházet zdrojové kódy

Merge pull request #30890 from overleaf/ar/code-coverage-e2e

[monorepo] code coverage e2e

GitOrigin-RevId: cfdef9e6b485831bd34847f7b7af13d39c18c3e6
Andrew Rumble před 5 měsíci
rodič
revize
16cc4026a0

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1037 - 3
package-lock.json


+ 7 - 0
services/clsi/.nycrc

@@ -0,0 +1,7 @@
+{
+  "extension": [".js", ".cjs", ".ts"],
+  "cwd": "../../",
+  "produce-source-map": true,
+  "source-map": true,
+  "temp-dir": "/tmp/.nyc_output"
+}

+ 13 - 0
services/clsi/app.js

@@ -122,6 +122,19 @@ app.get(
   OutputController.createOutputZip
 )
 
+if (process.env.NODE_ENV === 'development' && global.__coverage__) {
+  app.get('/coverage', (req, res) => {
+    const coverage = {}
+    for (const [key, value] of Object.entries(global.__coverage__)) {
+      coverage[key] = {
+        ...value,
+        path: value.path.replace('/overleaf/', '/workspace/'),
+      }
+    }
+    res.json({ coverage })
+  })
+}
+
 app.get('/status', (req, res, next) => res.send('CLSI is alive\n'))
 
 Settings.processTooOld = false

+ 2 - 0
services/clsi/package.json

@@ -37,6 +37,7 @@
     "workerpool": "^6.1.5"
   },
   "devDependencies": {
+    "@istanbuljs/esm-loader-hook": "^0.3.0",
     "chai": "^4.3.6",
     "chai-as-promised": "^7.1.1",
     "mocha": "^11.1.0",
@@ -44,6 +45,7 @@
     "mocha-multi-reporters": "^1.5.1",
     "mock-fs": "^5.1.2",
     "node-fetch": "^2.7.0",
+    "nyc": "^17.1.0",
     "sinon": "~9.0.1",
     "sinon-chai": "^3.7.0",
     "timekeeper": "2.2.0",

+ 7 - 0
services/web/.nycrc

@@ -0,0 +1,7 @@
+{
+  "extension": [".js", ".cjs", ".mjs", ".ts"],
+  "cwd": "../../",
+  "produce-source-map": true,
+  "source-map": true,
+  "temp-dir": "/tmp/.nyc_output"
+}

+ 15 - 0
services/web/app/src/router.mjs

@@ -205,6 +205,21 @@ async function initialize(webRouter, privateApiRouter, publicApiRouter) {
   webRouter.get('*', AnalyticsRegistrationSourceMiddleware.setInbound())
   webRouter.get('*', AnalyticsUTMTrackingMiddleware.recordUTMTags())
 
+  if (process.env.NODE_ENV === 'development' && global.__coverage__) {
+    // Expose code coverage via an endpoint when running with code coverage enabled
+    webRouter.get('/coverage', (req, res) => {
+      const coverage = {}
+      for (const [key, value] of Object.entries(global.__coverage__)) {
+        coverage[key] = {
+          ...value,
+          // Transform for Jenkins sourcemap
+          path: value.path.replace('/overleaf/', '/workspace/'),
+        }
+      }
+      res.json({ coverage })
+    })
+  }
+
   // Mount onto /login in order to get the deviceHistory cookie.
   webRouter.post(
     '/login/can-skip-captcha',

+ 2 - 0
services/web/package.json

@@ -210,6 +210,7 @@
     "@codemirror/state": "6.5.4",
     "@codemirror/view": "6.38.6",
     "@floating-ui/react": "^0.27.5",
+    "@istanbuljs/esm-loader-hook": "^0.3.0",
     "@juggle/resize-observer": "^3.3.1",
     "@lezer/common": "1.5.0",
     "@lezer/generator": "1.8.0",
@@ -358,6 +359,7 @@
     "mock-fs": "^5.1.2",
     "nock": "^13.5.6",
     "nvd3": "^1.8.6",
+    "nyc": "^17.1.0",
     "p-reflect": "^3.1.0",
     "path-browserify": "^1.0.1",
     "pdfjs-dist": "5.1.91",

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů