135 lines
3.3 KiB
JavaScript
135 lines
3.3 KiB
JavaScript
var Host = require('../../src/lib/host');
|
|
var _ = require('lodash');
|
|
var url = require('url');
|
|
|
|
describe('Host class', function () {
|
|
describe('construction', function () {
|
|
it('properly sets the defaults', function () {
|
|
var host = new Host();
|
|
host.should.eql({
|
|
protocol: 'http',
|
|
host: 'localhost',
|
|
port: 9200,
|
|
path: '/',
|
|
auth: null,
|
|
query: {}
|
|
});
|
|
});
|
|
|
|
it('accepts a string for query', function () {
|
|
var host = new Host({ query: 'beep=boop'});
|
|
|
|
host.query.should.eql({
|
|
beep: 'boop'
|
|
});
|
|
});
|
|
|
|
it('accepts other generic params', function () {
|
|
var headers = { 'X-Special-Routing-Header': 'pie' };
|
|
var host = new Host({ headers: headers });
|
|
|
|
host.headers.should.be.exactly(headers);
|
|
});
|
|
|
|
it('accepts a string for the entire url', function () {
|
|
var host = new Host('john:dude@pizza.com:420/pizza/cheese?shrooms=true');
|
|
|
|
host.should.eql({
|
|
protocol: 'http',
|
|
host: 'pizza.com',
|
|
port: 420,
|
|
path: '/pizza/cheese',
|
|
auth: 'john:dude',
|
|
query: {
|
|
shrooms: 'true'
|
|
}
|
|
});
|
|
});
|
|
|
|
describe('based on the output from url.parse', function () {
|
|
it('might cause weird things to happen', function () {
|
|
var parsedUrl = url.parse('pizza.com:888');
|
|
|
|
// I imagine most people don't expect
|
|
parsedUrl.should.include({
|
|
protocol: 'pizza.com:',
|
|
host: '888',
|
|
});
|
|
|
|
var host = new Host(parsedUrl);
|
|
host.protocol.should.eql('pizza.com');
|
|
host.host.should.eql('888');
|
|
});
|
|
|
|
it('will cause extra properties', function () {
|
|
var host = new Host(url.parse('https://joe:diner@pizza.com:888/path?query=yes'));
|
|
host.should.include({
|
|
protocol: 'https',
|
|
host: 'pizza.com',
|
|
port: 888,
|
|
path: '/path',
|
|
auth: 'joe:diner',
|
|
query: {
|
|
query: 'yes'
|
|
}
|
|
});
|
|
|
|
_.keys(host).should.include('slashes', 'hash', 'href', 'search');
|
|
});
|
|
});
|
|
|
|
it('ignores anything that\'s not a string or object-y', function () {
|
|
var host = new Host(1234);
|
|
|
|
host.should.eql({
|
|
protocol: 'http',
|
|
host: 'localhost',
|
|
port: 9200,
|
|
path: '/',
|
|
auth: null,
|
|
query: {}
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#makeUrl', function () {
|
|
it('merges parameters', function () {
|
|
var host = new Host({
|
|
path: '/prefix',
|
|
query: {
|
|
user_id: 123
|
|
}
|
|
});
|
|
|
|
host.makeUrl({
|
|
path: '/this and that',
|
|
query: {
|
|
param: 1
|
|
}
|
|
}).should.eql('http://localhost:9200/prefix/this and that?param=1&user_id=123');
|
|
});
|
|
|
|
it('ensures that path starts with a forward-slash', function () {
|
|
var host = new Host();
|
|
host.path = 'prefix';
|
|
|
|
host.makeUrl({ path: '/this and that'})
|
|
.should.eql('http://localhost:9200/prefix/this and that');
|
|
});
|
|
|
|
it('does not try to prevent double forward-slashes', function () {
|
|
var host = new Host({ path: 'prefix/' });
|
|
|
|
host.makeUrl({ path: '/this and that'})
|
|
.should.eql('http://localhost:9200/prefix//this and that');
|
|
});
|
|
});
|
|
|
|
describe('#toString', function () {
|
|
it('just calls makeUrl with no parameters', function () {
|
|
|
|
});
|
|
});
|
|
|
|
});
|