server-router
Version:
150 lines (122 loc) • 3.78 kB
JavaScript
var getPort = require('get-server-port')
var tape = require('tape')
var http = require('http')
var serverRouter = require('./')
tape('server-router', function (t) {
t.test('should assert input types', function (t) {
t.plan(1)
t.throws(serverRouter.bind(null, 1235), /object/)
})
t.test('should register a single callback on GET', function (t) {
t.plan(2)
var a = false
var b = false
var router = serverRouter()
router.route('GET', '/', function (req, res, ctx) {
t.pass('/ called')
res.end()
if (b) server.close()
else a = true
})
router.route('GET', '/foo', function (req, res, ctx) {
t.pass('/foo called')
res.end()
if (a) server.close()
else b = true
})
var server = http.createServer(handler).listen()
http.get(`http://localhost:${getPort(server)}/foo`)
http.get(`http://localhost:${getPort(server)}/`)
function handler (req, res) {
router.match(req, res)
}
})
t.test('should register a default path', function (t) {
t.plan(1)
var router = serverRouter({ default: '/foo' })
router.route('', '/foo', function (req, res, ctx) {
t.pass('/foo called')
res.end()
server.close()
})
var server = http.createServer(handler).listen()
http.get(`http://localhost:${getPort(server)}/bar`)
function handler (req, res) {
router.match(req, res)
}
})
t.test('should create params', function (t) {
t.plan(1)
var router = serverRouter({ default: '/foo' })
router.route('GET', '/foo/:bar', function (req, res, params) {
t.equal(params.bar, 'hi-there')
res.end()
server.close()
})
var server = http.createServer(handler).listen()
http.get(`http://localhost:${getPort(server)}/foo/hi-there`)
function handler (req, res) {
router.match(req, res)
}
})
t.test('should handle encoded characters', function (t) {
t.plan(1)
var router = serverRouter({ default: '/foo' })
router.route('GET', '/foo bar', function (req, res, ctx) {
t.pass('called')
res.end()
server.close()
})
var server = http.createServer(handler).listen()
http.get(`http://localhost:${getPort(server)}/foo%20bar`)
function handler (req, res) {
router.match(req, res)
}
})
t.test('should handle routes when calling start', function (t) {
t.plan(1)
var router = serverRouter()
router.route('GET', '/hello', function (req, res, ctx) {
t.pass('/hello called')
res.end()
server.close()
})
var server = http.createServer(router.start()).listen()
http.get(`http://localhost:${getPort(server)}/hello`)
})
t.test('should handle an array of methods', function (t) {
t.plan(5)
var router = serverRouter()
router.route(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'], '/foo', function (req, res, ctx) {
t.pass(req.method + ' called')
res.end()
})
var server = http.createServer(handler).listen()
makeRequest('GET', '/foo', function () {
makeRequest('POST', '/foo', function () {
makeRequest('PUT', '/foo', function () {
makeRequest('DELETE', '/foo', function () {
makeRequest('PATCH', '/foo')
})
})
})
})
function makeRequest (method, route, cb) {
var req = http.request({ port: getPort(server), method: method, path: route }, function (res) {
res.on('error', function (err) {
t.error(err)
})
})
req.on('error', function (err) {
t.error(err)
})
req.end(function () {
if (cb) cb()
else server.close()
})
}
function handler (req, res) {
router.match(req, res)
}
})
})