[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.
This commit is contained in:
Jakob Ackermann 2020-12-28 13:16:31 +00:00
parent b03812bf06
commit 49b764a308
2 changed files with 42 additions and 5 deletions

View file

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

View file

@ -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 () {
beforeEach(function () {
this.CompileManager.doCompileWithLock = sinon