const expect = require("expect");
const callApp = require("../../utils/callApp");
const createMapper = require("../mapper");
describe("middleware/mapper", function () {
function showInfo(conn) {
return {
status: 200,
headers: {
Basename: conn.basename,
Pathname: conn.pathname
}
};
}
let app;
beforeEach(function () {
app = createMapper({
"/one": showInfo,
"http://example.org/two": showInfo,
"http://example.net/three": showInfo
});
});
describe("when the request does not match a mapping", function () {
it("passes the request through to the default app", function () {
return callApp(app, "/three").then(function (conn) {
expect(conn.status).toEqual(404);
});
});
});
describe("when a request matches a mapping by path", function () {
describe("and the mapping has a different host", function () {
it("passes the request through to the default app", function () {
return callApp(app, "http://example.com/two").then(function (conn) {
expect(conn.status).toEqual(404);
});
});
});
describe("and the mapping has no host", function () {
it("passes the request through to the mapping", function () {
return callApp(app, "/one/messages").then(function (conn) {
expect(conn.status).toEqual(200);
expect(conn.response.headers.Basename).toEqual("/one");
expect(conn.response.headers.Pathname).toEqual("/messages");
});
});
});
describe("and the mapping has a matching host", function () {
it("passes the request through to the mapping", function () {
return callApp(app, "http://example.org/two/messages").then(function (conn) {
expect(conn.status).toEqual(200);
expect(conn.response.headers.Basename).toEqual("/two");
expect(conn.response.headers.Pathname).toEqual("/messages");
});
});
describe("and the request is on a different port", function () {
it("passes the request through to the mapping", function () {
return callApp(app, "http://example.org:5000/two/messages").then(function (conn) {
expect(conn.status).toEqual(200);
expect(conn.response.headers.Basename).toEqual("/two");
expect(conn.response.headers.Pathname).toEqual("/messages");
});
});
});
describe("that was specified with a custom port", function () {
it("passes the request through to the mapping", function () {
return callApp(app, "http://example.net/three/messages").then(function (conn) {
expect(conn.status).toEqual(200);
expect(conn.response.headers.Basename).toEqual("/three");
expect(conn.response.headers.Pathname).toEqual("/messages");
});
});
});
});
describe("and there is no remaining path", function () {
it("passes the request through to the mapping", function () {
return callApp(app, "/one").then(function (conn) {
expect(conn.status).toEqual(200);
expect(conn.response.headers.Basename).toEqual("/one");
expect(conn.response.headers.Pathname).toEqual("/");
});
});
});
});
});
|