overleaf/services/clsi/test/unit/js/OutputFileFinderTests.js
2021-07-13 12:04:48 +01:00

107 lines
3.2 KiB
JavaScript

/* eslint-disable
handle-callback-err,
no-return-assign,
no-unused-vars,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const SandboxedModule = require('sandboxed-module')
const sinon = require('sinon')
const modulePath = require('path').join(
__dirname,
'../../../app/js/OutputFileFinder'
)
const path = require('path')
const { expect } = require('chai')
const { EventEmitter } = require('events')
describe('OutputFileFinder', function () {
beforeEach(function () {
this.OutputFileFinder = SandboxedModule.require(modulePath, {
requires: {
fs: (this.fs = {}),
child_process: { spawn: (this.spawn = sinon.stub()) },
},
globals: {
Math, // used by lodash
},
})
this.directory = '/test/dir'
return (this.callback = sinon.stub())
})
describe('findOutputFiles', function () {
beforeEach(function () {
this.resource_path = 'resource/path.tex'
this.output_paths = ['output.pdf', 'extra/file.tex']
this.all_paths = this.output_paths.concat([this.resource_path])
this.resources = [{ path: (this.resource_path = 'resource/path.tex') }]
this.OutputFileFinder._getAllFiles = sinon
.stub()
.callsArgWith(1, null, this.all_paths)
return this.OutputFileFinder.findOutputFiles(
this.resources,
this.directory,
(error, outputFiles) => {
this.outputFiles = outputFiles
}
)
})
return it('should only return the output files, not directories or resource paths', function () {
return expect(this.outputFiles).to.deep.equal([
{
path: 'output.pdf',
type: 'pdf',
},
{
path: 'extra/file.tex',
type: 'tex',
},
])
})
})
return describe('_getAllFiles', function () {
beforeEach(function () {
this.proc = new EventEmitter()
this.proc.stdout = new EventEmitter()
this.proc.stdout.setEncoding = sinon.stub().returns(this.proc.stdout)
this.spawn.returns(this.proc)
this.directory = '/base/dir'
return this.OutputFileFinder._getAllFiles(this.directory, this.callback)
})
describe('successfully', function () {
beforeEach(function () {
this.proc.stdout.emit(
'data',
['/base/dir/main.tex', '/base/dir/chapters/chapter1.tex'].join('\n') +
'\n'
)
return this.proc.emit('close', 0)
})
return it('should call the callback with the relative file paths', function () {
return this.callback
.calledWith(null, ['main.tex', 'chapters/chapter1.tex'])
.should.equal(true)
})
})
return describe("when the directory doesn't exist", function () {
beforeEach(function () {
return this.proc.emit('close', 1)
})
return it('should call the callback with a blank array', function () {
return this.callback.calledWith(null, []).should.equal(true)
})
})
})
})