
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'use strict';
var assert = require('assert');
var ScopeContainer = require('../lib/scopeContainer');
var resolveProxyReqPath = require('../app/steps/resolveProxyReqPath');
var expect = require('chai').expect;
var express = require('express');
var request = require('supertest');
var proxy = require('../');
describe('resolveProxyReqPath', function () {
var container;
beforeEach(function () {
container = new ScopeContainer();
});
var tests = [
{
resolverType: 'undefined',
resolverFn: undefined,
data: [
{ url: 'http://localhost:12345', parsed: '/' },
{ url: 'http://g.com/123?45=67', parsed: '/123?45=67' }
]
},
{
resolverType: 'a syncronous function',
resolverFn: function () { return 'the craziest thing'; },
data: [
{ url: 'http://localhost:12345', parsed: 'the craziest thing' },
{ url: 'http://g.com/123?45=67', parsed: 'the craziest thing' }
]
},
{
resolverType: 'a Promise',
resolverFn: function () {
return new Promise(function (resolve) {
resolve('the craziest think');
});
},
data: [
{ url: 'http://localhost:12345', parsed: 'the craziest think' },
{ url: 'http://g.com/123?45=67', parsed: 'the craziest think' }
]
}
];
describe('when proxyReqPathResolver', function () {
tests.forEach(function (test) {
describe('is ' + test.resolverType, function () {
describe('it returns a promise which resolves a container with expected url', function () {
test.data.forEach(function (data) {
it(data.url, function (done) {
container.user.req = { url: data.url };
container.options.proxyReqPathResolver = test.resolverFn;
var r = resolveProxyReqPath(container);
assert(r instanceof Promise, 'Expect resolver to return a thennable');
r.then(function (container) {
var response;
try {
response = container.proxy.reqBuilder.path;
if (!response) {
throw new Error('reqBuilder.url is undefined');
}
} catch (e) {
done(e);
}
expect(response).to.equal(data.parsed);
done();
});
});
});
});
});
});
});
describe('testing example code in docs', function () {
it('works as advertised', function (done) {
var proxyTarget = require('../test/support/proxyTarget');
var proxyRouteFn = [{
method: 'get',
path: '/tent',
fn: function (req, res) {
res.send(req.url);
}
}];
var proxyServer = proxyTarget(12345, 100, proxyRouteFn);
var app = express();
app.use(proxy('localhost:12345', {
proxyReqPathResolver: function (req) {
var parts = req.url.split('?');
var queryString = parts[1];
var updatedPath = parts[0].replace(/test/, 'tent');
return updatedPath + (queryString ? '?' + queryString : '');
}
}));
request(app)
.get('/test?a=1&b=2&c=3')
.end(function (err, res) {
assert.equal(res.text, '/tent?a=1&b=2&c=3');
proxyServer.close();
done(err);
});
});
});
});