decaffeinate: rename test/unit/coffee to test/unit/js
This commit is contained in:
159
test/unit/js/UrlFetcherTests.js
Normal file
159
test/unit/js/UrlFetcherTests.js
Normal file
@@ -0,0 +1,159 @@
|
||||
/* eslint-disable
|
||||
no-return-assign,
|
||||
*/
|
||||
// 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');
|
||||
require('chai').should();
|
||||
const modulePath = require('path').join(__dirname, '../../../app/js/UrlFetcher');
|
||||
const { EventEmitter } = require("events");
|
||||
|
||||
describe("UrlFetcher", function() {
|
||||
beforeEach(function() {
|
||||
this.callback = sinon.stub();
|
||||
this.url = "https://www.example.com/file/here?query=string";
|
||||
return this.UrlFetcher = SandboxedModule.require(modulePath, { requires: {
|
||||
request: { defaults: (this.defaults = sinon.stub().returns(this.request = {}))
|
||||
},
|
||||
fs: (this.fs = {}),
|
||||
"logger-sharelatex": (this.logger = { log: sinon.stub(), error: sinon.stub() }),
|
||||
"settings-sharelatex": (this.settings = {})
|
||||
}
|
||||
});});
|
||||
|
||||
it("should turn off the cookie jar in request", function() {
|
||||
return this.defaults.calledWith({jar: false})
|
||||
.should.equal(true);
|
||||
});
|
||||
|
||||
describe("rewrite url domain if filestoreDomainOveride is set", function() {
|
||||
beforeEach(function() {
|
||||
this.path = "/path/to/file/on/disk";
|
||||
this.request.get = sinon.stub().returns(this.urlStream = new EventEmitter);
|
||||
this.urlStream.pipe = sinon.stub();
|
||||
this.urlStream.pause = sinon.stub();
|
||||
this.urlStream.resume = sinon.stub();
|
||||
this.fs.createWriteStream = sinon.stub().returns(this.fileStream = new EventEmitter);
|
||||
return this.fs.unlink = (file, callback) => callback();
|
||||
});
|
||||
|
||||
it("should use the normal domain when override not set", function(done){
|
||||
this.UrlFetcher.pipeUrlToFile(this.url, this.path, () => {
|
||||
this.request.get.args[0][0].url.should.equal(this.url);
|
||||
return done();
|
||||
});
|
||||
this.res = {statusCode: 200};
|
||||
this.urlStream.emit("response", this.res);
|
||||
this.urlStream.emit("end");
|
||||
return this.fileStream.emit("finish");
|
||||
});
|
||||
|
||||
|
||||
return it("should use override domain when filestoreDomainOveride is set", function(done){
|
||||
this.settings.filestoreDomainOveride = "192.11.11.11";
|
||||
this.UrlFetcher.pipeUrlToFile(this.url, this.path, () => {
|
||||
this.request.get.args[0][0].url.should.equal("192.11.11.11/file/here?query=string");
|
||||
return done();
|
||||
});
|
||||
this.res = {statusCode: 200};
|
||||
this.urlStream.emit("response", this.res);
|
||||
this.urlStream.emit("end");
|
||||
return this.fileStream.emit("finish");
|
||||
});
|
||||
});
|
||||
|
||||
return describe("pipeUrlToFile", function() {
|
||||
beforeEach(function(done){
|
||||
this.path = "/path/to/file/on/disk";
|
||||
this.request.get = sinon.stub().returns(this.urlStream = new EventEmitter);
|
||||
this.urlStream.pipe = sinon.stub();
|
||||
this.urlStream.pause = sinon.stub();
|
||||
this.urlStream.resume = sinon.stub();
|
||||
this.fs.createWriteStream = sinon.stub().returns(this.fileStream = new EventEmitter);
|
||||
this.fs.unlink = (file, callback) => callback();
|
||||
return done();
|
||||
});
|
||||
|
||||
describe("successfully", function() {
|
||||
beforeEach(function(done){
|
||||
this.UrlFetcher.pipeUrlToFile(this.url, this.path, () => {
|
||||
this.callback();
|
||||
return done();
|
||||
});
|
||||
this.res = {statusCode: 200};
|
||||
this.urlStream.emit("response", this.res);
|
||||
this.urlStream.emit("end");
|
||||
return this.fileStream.emit("finish");
|
||||
});
|
||||
|
||||
|
||||
it("should request the URL", function() {
|
||||
return this.request.get
|
||||
.calledWith(sinon.match({"url": this.url}))
|
||||
.should.equal(true);
|
||||
});
|
||||
|
||||
it("should open the file for writing", function() {
|
||||
return this.fs.createWriteStream
|
||||
.calledWith(this.path)
|
||||
.should.equal(true);
|
||||
});
|
||||
|
||||
it("should pipe the URL to the file", function() {
|
||||
return this.urlStream.pipe
|
||||
.calledWith(this.fileStream)
|
||||
.should.equal(true);
|
||||
});
|
||||
|
||||
return it("should call the callback", function() {
|
||||
return this.callback.called.should.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("with non success status code", function() {
|
||||
beforeEach(function(done){
|
||||
this.UrlFetcher.pipeUrlToFile(this.url, this.path, err=> {
|
||||
this.callback(err);
|
||||
return done();
|
||||
});
|
||||
this.res = {statusCode: 404};
|
||||
this.urlStream.emit("response", this.res);
|
||||
return this.urlStream.emit("end");
|
||||
});
|
||||
|
||||
return it("should call the callback with an error", function() {
|
||||
return this.callback
|
||||
.calledWith(new Error("URL returned non-success status code: 404"))
|
||||
.should.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
return describe("with error", function() {
|
||||
beforeEach(function(done){
|
||||
this.UrlFetcher.pipeUrlToFile(this.url, this.path, err=> {
|
||||
this.callback(err);
|
||||
return done();
|
||||
});
|
||||
return this.urlStream.emit("error", (this.error = new Error("something went wrong")));
|
||||
});
|
||||
|
||||
it("should call the callback with the error", function() {
|
||||
return this.callback
|
||||
.calledWith(this.error)
|
||||
.should.equal(true);
|
||||
});
|
||||
|
||||
return it("should only call the callback once, even if end is called", function() {
|
||||
this.urlStream.emit("end");
|
||||
return this.callback.calledOnce.should.equal(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user