You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.3 KiB

const http = require('http')
, EE = require('events').EventEmitter
, xtend = require('xtend')
, jsonist = require('jsonist')
, _jsonistget = jsonist.get
, _jsonistpost = jsonist.post
function makeServer (data) {
var ee = new EE()
, i = 0
, server = http.createServer(function (req, res) {
ee.emit('request', req)
var _data = Array.isArray(data) ? data[i++] : data
if (_data && _data.headers && _data.headers.link)
res.setHeader('link', _data.headers.link)
res.end(JSON.stringify(_data && _data.response || _data))
if (!Array.isArray(data) || i == data.length)
server.close()
})
.listen(0, function (err) {
if (err)
return ee.emit('error', err)
jsonist.get = function (url, opts, callback) {
ee.emit('get', url, opts)
return _jsonistget('http://localhost:' + server.address().port, opts, callback)
}
jsonist.post = function (url, data, opts, callback) {
ee.emit('post', url, data, opts)
return _jsonistpost('http://localhost:' + server.address().port, data, opts, callback)
}
ee.emit('ready')
})
.on('close', ee.emit.bind(ee, 'close'))
return ee
}
function toAuth (auth) {
return 'Basic ' + (new Buffer(auth.user + ':' + auth.token).toString('base64'))
}
function verifyRequest (t, auth) {
return function (req) {
t.ok(true, 'got request')
t.equal(req.headers['authorization'], toAuth(auth), 'got auth header')
}
}
function verifyUrl (t, urls) {
var i = 0
return function (_url) {
if (i == urls.length)
return t.fail('too many urls/requests')
t.equal(_url, urls[i++], 'correct url')
}
}
function verifyClose (t) {
return function () {
t.ok(true, 'got close')
}
}
function verifyData (t, data) {
return function (err, _data) {
t.notOk(err, 'no error')
t.ok((data === '' && _data === '') || _data, 'got data')
t.deepEqual(_data, data, 'got expected data')
}
}
module.exports.makeServer = makeServer
module.exports.toAuth = toAuth
module.exports.verifyRequest = verifyRequest
module.exports.verifyUrl = verifyUrl
module.exports.verifyClose = verifyClose
module.exports.verifyData = verifyData