'use strict'; var express = require('express'); var request = require('supertest'); var proxy = require('../'); var startProxyTarget = require('./support/proxyTarget'); var expect = require('chai').expect; describe('uses remote path', function () { this.timeout(10000); var app = express(); var proxyRoutes = ['/somePath/', '/somePath/longer/path', '/somePath/long/path/with/many/tokens']; var proxyKeyPath = '/somePath'; var server; afterEach(function () { server.close(); }); proxyRoutes.forEach(function (path) { it('uses path component from inbound request', function (done) { var modifiedPath = path.replace(new RegExp(proxyKeyPath), ''); var proxyRouteFn = { method: 'get', path: modifiedPath, fn: function (req, res) { res.json({ path: path, modifiedPath: modifiedPath }); } }; server = startProxyTarget(8309, 1000, [proxyRouteFn]); app.use('/somePath/', proxy('http://localhost:8309')); request(app) .get(path) .expect(200) .end(function (err, response) { if (err) { return done(err); } expect(response.path === path); expect(response.modifiedPath === path); done(); }); }); }); }); describe('host can be a dynamic function', function () { this.timeout(10000); var app = express(); var firstProxyApp = express(); var secondProxyApp = express(); var firstPort = 10031; var secondPort = 10032; app.use('/proxy/:port', proxy(function (req) { return 'localhost:' + req.params.port; }, { memoizeHost: false })); firstProxyApp.use('/', function (req, res) { res.sendStatus(204); }); firstProxyApp.listen(firstPort); secondProxyApp.use('/', function (req, res) { res.sendStatus(200); }); secondProxyApp.listen(secondPort); it('can proxy with session value', function (done) { request(app) .get('/proxy/' + firstPort) .expect(204) .end(function (err) { if (err) { return done(err); } request(app) .get('/proxy/' + secondPort) .expect(200, done); }); }); });