Sfoglia il codice sorgente

[misc] CompileController: exact match for output.pdf

The previous regex could mistake user provided pdf files, like
 `fake_output.pdf`, as the final output file.
The frontend expects to find a `output.pdf` file on success.
Jakob Ackermann 5 anni fa
parent
commit
49b764a308

+ 1 - 5
services/clsi/app/js/CompileController.js

@@ -80,11 +80,7 @@ module.exports = CompileController = {
               let file
               let file
               status = 'failure'
               status = 'failure'
               for (file of Array.from(outputFiles)) {
               for (file of Array.from(outputFiles)) {
-                if (
-                  file.path != null
-                    ? file.path.match(/output\.pdf$/)
-                    : undefined
-                ) {
+                if (file.path === 'output.pdf') {
                   status = 'success'
                   status = 'success'
                 }
                 }
               }
               }

+ 41 - 0
services/clsi/test/unit/js/CompileControllerTests.js

@@ -129,6 +129,47 @@ describe('CompileController', function () {
       })
       })
     })
     })
 
 
+    describe('with user provided fake_output.pdf', function () {
+      beforeEach(function () {
+        this.output_files = [
+          {
+            path: 'fake_output.pdf',
+            type: 'pdf',
+            build: 1234
+          },
+          {
+            path: 'output.log',
+            type: 'log',
+            build: 1234
+          }
+        ]
+        this.CompileManager.doCompileWithLock = sinon
+          .stub()
+          .callsArgWith(1, null, this.output_files)
+        this.CompileController.compile(this.req, this.res)
+      })
+
+      it('should return the JSON response with status failure', function () {
+        this.res.status.calledWith(200).should.equal(true)
+        this.res.send
+          .calledWith({
+            compile: {
+              status: 'failure',
+              error: null,
+              outputFiles: this.output_files.map((file) => {
+                return {
+                  url: `${this.Settings.apis.clsi.url}/project/${this.project_id}/build/${file.build}/output/${file.path}`,
+                  path: file.path,
+                  type: file.type,
+                  build: file.build
+                }
+              })
+            }
+          })
+          .should.equal(true)
+      })
+    })
+
     describe('with an error', function () {
     describe('with an error', function () {
       beforeEach(function () {
       beforeEach(function () {
         this.CompileManager.doCompileWithLock = sinon
         this.CompileManager.doCompileWithLock = sinon