webservices/node_modules/node-red-admin/test/lib/request_spec.js

247 lines
7.8 KiB
JavaScript

/**
* Copyright OpenJS Foundation and other contributors, https://openjsf.org/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
var should = require("should");
var sinon = require("sinon");
var fs = require("fs");
var request = require("axios");
var api = require("../../lib/request");
var config = require("../../lib/config");
describe("lib/request", function() {
"use strict";
before(function() {
sinon.stub(config,"target").returns("http://example.com/target");
sinon.stub(config,"tokens").returns(null);
});
after(function() {
config.target.restore();
config.tokens.restore();
});
it('uses config.target for base path', function(done) {
sinon.stub(request, 'get').returns(Promise.resolve({status: 200}));
api.request("/foo",{}).then(function(res) {
try {
request.get.args[0][0].should.eql("http://example.com/target/foo");
request.get.args[0][1].headers.should.not.have.a.property("Authorization");
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
}).catch(function(err) {
request.get.restore();
done(err);
});
});
it('returns the json response to a get', function(done) {
sinon.stub(request, 'get').returns(Promise.resolve({status:200, data: {a:"b"}}))
api.request("/foo",{}).then(function(res) {
try {
res.should.eql({a:"b"});
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
}).catch(function(err) {
request.get.restore();
done(err);
});
});
it('returns the json response to a put', function(done) {
sinon.stub(request, 'put').returns(Promise.resolve({status:200, data: {a:"b"}}))
api.request("/nodes/node",{method: "PUT"}).then(function(res) {
try {
res.should.eql({a:"b"});
done();
} catch(err) {
done(err);
} finally {
request.put.restore();
}
}).catch(function(err) {
request.put.restore();
done(err);
});
});
it('returns the json response to a post', function(done) {
sinon.stub(request, 'post').returns(Promise.resolve({status:200, data: {a:"b"}}))
api.request("/nodes",{method: "POST"}).then(function(res) {
try {
res.should.eql({a:"b"});
done();
} catch(err) {
done(err);
} finally {
request.post.restore();
}
}).catch(function(err) {
request.post.restore();
done(err);
});
});
it('returns to a delete', function(done) {
sinon.stub(request, 'delete').returns(Promise.resolve({status:200, data: {a:"b"}}))
api.request("/nodes/plugin",{method: "DELETE"}).then(function() {
request.delete.restore();
done();
}).catch(function(err) {
request.delete.restore();
done(err);
});
});
it('rejects unauthorised', function(done) {
var rejection = Promise.reject({status:401});
rejection.catch(()=>{});
sinon.stub(request, 'get').returns(rejection)
api.request("/nodes/plugin",{}).then(function() {
request.get.restore();
done(new Error("Unauthorised response not rejected"));
}).catch(function(err) {
try {
err.status.should.eql(401);
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
});
});
it('rejects error', function(done) {
var rejection = Promise.reject({status:400,data:{message:"test error"}});
rejection.catch(()=>{});
sinon.stub(request, 'get').returns(rejection)
api.request("/nodes/plugin",{}).then(function() {
request.get.restore();
done(new Error("Unauthorised response not rejected"));
}).catch(function(err) {
try {
err.status.should.eql(400);
err.data.message.should.eql("test error")
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
});
});
it('returns unexpected status', function(done) {
sinon.stub(request, 'get').returns(Promise.resolve({status:101, data: "response"}))
api.request("/nodes/plugin",{}).then(function() {
request.get.restore();
done(new Error("Unexpected status not logged"));
}).catch(function(err) {
try {
err.message.should.eql("101: response");
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
});
});
it('returns server message', function(done) {
sinon.stub(request, 'get').returns(Promise.resolve({status:101, data: {"message":"server response"}}))
api.request("/nodes/plugin",{}).then(function() {
request.get.restore();
done(new Error("Unexpected status not logged"));
}).catch(function(err) {
try {
err.message.should.eql("101: server response");
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
});
});
it('attaches authorization header if token available', function(done) {
sinon.stub(request, 'get').returns(Promise.resolve({status: 200,data:{a:"b"}}));
config.tokens.restore();
sinon.stub(config,"tokens").returns({access_token:"123456"});
api.request("/foo",{}).then(function(res) {
try {
res.should.eql({a:"b"});
request.get.args[0][1].headers.should.have.a.property("Authorization","Bearer 123456");
done();
} catch(err) {
done(err);
} finally {
request.get.restore();
}
}).catch(function(err) {
request.get.restore();
done(err);
});
});
it('logs output if NR_TRACE is set', function(done) {
sinon.stub(request, 'get').returns(Promise.resolve({status: 200,data:{a:"b"}}));
sinon.stub(console, 'log');
process.env.NR_TRACE = true;
api.request("/foo",{}).then(function(res) {
try{
var wasCalled = console.log.called;
console.log.restore();
wasCalled.should.be.true;
done();
} catch(err) {
console.log.restore();
done(err);
} finally {
delete process.env.NR_TRACE;
request.get.restore();
}
}).catch(function(err) {
delete process.env.NR_TRACE;
console.log.restore();
request.get.restore();
done(err);
});
});
});