2020-02-19 06:15:08 -05:00
|
|
|
/*
|
|
|
|
* 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');
|
|
|
|
require('chai').should();
|
|
|
|
const modulePath = require('path').join(__dirname, '../../../app/js/OutputFileFinder');
|
|
|
|
const path = require("path");
|
|
|
|
const { expect } = require("chai");
|
|
|
|
const { EventEmitter } = require("events");
|
2014-02-12 12:27:43 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
describe("OutputFileFinder", function() {
|
|
|
|
beforeEach(function() {
|
|
|
|
this.OutputFileFinder = SandboxedModule.require(modulePath, { requires: {
|
|
|
|
"fs": (this.fs = {}),
|
|
|
|
"child_process": { spawn: (this.spawn = sinon.stub())
|
|
|
|
},
|
2014-12-09 06:25:23 -05:00
|
|
|
"logger-sharelatex": { log: sinon.stub(), warn: sinon.stub() }
|
2020-02-19 06:15:08 -05:00
|
|
|
}
|
|
|
|
});
|
|
|
|
this.directory = "/test/dir";
|
|
|
|
return this.callback = sinon.stub();
|
|
|
|
});
|
2014-02-12 12:27:43 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
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;
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
2014-02-12 12:27:43 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
return it("should only return the output files, not directories or resource paths", function() {
|
|
|
|
return expect(this.outputFiles).to.deep.equal([{
|
|
|
|
path: "output.pdf",
|
2014-02-12 12:27:43 -05:00
|
|
|
type: "pdf"
|
|
|
|
}, {
|
|
|
|
path: "extra/file.tex",
|
|
|
|
type: "tex"
|
2020-02-19 06:15:08 -05:00
|
|
|
}]);
|
|
|
|
});
|
|
|
|
});
|
2014-12-09 06:07:58 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
return describe("_getAllFiles", function() {
|
|
|
|
beforeEach(function() {
|
|
|
|
this.proc = new EventEmitter();
|
|
|
|
this.proc.stdout = new EventEmitter();
|
|
|
|
this.spawn.returns(this.proc);
|
|
|
|
this.directory = "/base/dir";
|
|
|
|
return this.OutputFileFinder._getAllFiles(this.directory, this.callback);
|
|
|
|
});
|
2014-12-09 06:07:58 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
describe("successfully", function() {
|
|
|
|
beforeEach(function() {
|
|
|
|
this.proc.stdout.emit(
|
2014-12-09 06:25:23 -05:00
|
|
|
"data",
|
|
|
|
["/base/dir/main.tex", "/base/dir/chapters/chapter1.tex"].join("\n") + "\n"
|
2020-02-19 06:15:08 -05:00
|
|
|
);
|
|
|
|
return this.proc.emit("close", 0);
|
|
|
|
});
|
2014-12-09 06:25:23 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
return it("should call the callback with the relative file paths", function() {
|
|
|
|
return this.callback.calledWith(
|
2014-12-09 06:25:23 -05:00
|
|
|
null,
|
|
|
|
["main.tex", "chapters/chapter1.tex"]
|
2020-02-19 06:15:08 -05:00
|
|
|
).should.equal(true);
|
|
|
|
});
|
|
|
|
});
|
2014-12-09 06:25:23 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
return describe("when the directory doesn't exist", function() {
|
|
|
|
beforeEach(function() {
|
|
|
|
return this.proc.emit("close", 1);
|
|
|
|
});
|
2014-12-09 06:25:23 -05:00
|
|
|
|
2020-02-19 06:15:08 -05:00
|
|
|
return it("should call the callback with a blank array", function() {
|
|
|
|
return this.callback.calledWith(
|
2014-12-09 06:25:23 -05:00
|
|
|
null,
|
|
|
|
[]
|
2020-02-19 06:15:08 -05:00
|
|
|
).should.equal(true);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|