Comparing version 3.0.0 to 3.0.1
@@ -0,4 +1,6 @@ | ||
'use strict'; | ||
module.exports = { | ||
Request: require('./lib/request'), | ||
Response: require('./lib/response') | ||
}; | ||
}; |
@@ -0,1 +1,3 @@ | ||
'use strict'; | ||
var Cookies = require('cookies'); | ||
@@ -6,3 +8,2 @@ var url = require('url'); | ||
var PassThrough = require('readable-stream').PassThrough; | ||
var _ = require('lodash'); | ||
@@ -36,7 +37,8 @@ // Some versions of node populate _headers while others | ||
var self = this; | ||
_.each(options.headers, function (v, k) { | ||
if (v !== undefined) { | ||
self.setHeader(k, v); | ||
for(var k in options.headers) { | ||
if (options.headers[k] !== undefined) { | ||
self.setHeader(k, options.headers[k]); | ||
} | ||
}); | ||
} | ||
@@ -52,5 +54,5 @@ this.setHeader('transfer-encoding', 'chunked'); | ||
_.forEach(_.keys(options.cookies), function (key) { | ||
cookieBuffer.push(key + '=' + options.cookies[key]); | ||
}); | ||
for(var k in options.cookies) { | ||
cookieBuffer.push(k + '=' + options.cookies[k]); | ||
} | ||
@@ -63,15 +65,19 @@ this.setHeader('cookie', cookieBuffer.join(';')); | ||
MockRequest.prototype.setHeader = function (name, value, clobber) { | ||
if (http.ClientRequest) { | ||
var ret = http.ClientRequest.prototype.setHeader.call(this, name, value, clobber); | ||
if (http.ClientRequest.prototype.getHeaders) { | ||
this.headers = http.ClientRequest.prototype.getHeaders.call(this); | ||
} else { | ||
} | ||
else { | ||
this.headers = this[outHeadersKey]; | ||
} | ||
return ret; | ||
} else if (clobber || !this.headers.hasOwnProperty(name)) { | ||
} | ||
else if (clobber || !this.headers.hasOwnProperty(name)) { | ||
this.headers[name.toLowerCase()] = value; | ||
} else { | ||
} | ||
else { | ||
this.headers[name.toLowerCase()] += ',' + value; | ||
@@ -84,3 +90,4 @@ } | ||
return http.ClientRequest.prototype.getHeader.call(this, name); | ||
} else { | ||
} | ||
else { | ||
return this.headers[name]; | ||
@@ -90,11 +97,14 @@ } | ||
function readOutHeadersKey() { | ||
function readOutHeadersKey () { | ||
if (http.ClientRequest && Object.getOwnPropertySymbols) { | ||
var x = {}; | ||
try { | ||
http.ClientRequest.apply(x); | ||
} catch (e) { | ||
} | ||
catch (e) { | ||
// This will invariably throw | ||
} | ||
var symbols = Object.getOwnPropertySymbols(x); | ||
for (var i = 0; i < symbols.length; i++) { | ||
@@ -106,2 +116,3 @@ if (symbols[i].toString() == 'Symbol(outHeadersKey)') { | ||
} | ||
return '_headers'; | ||
@@ -108,0 +119,0 @@ } |
@@ -0,1 +1,3 @@ | ||
'use strict'; | ||
var events = require('events'); | ||
@@ -5,2 +7,3 @@ var util = require('util'); | ||
var Buffer = require('buffer').Buffer; | ||
var Writable = require('readable-stream').Writable; | ||
@@ -19,5 +22,7 @@ // Some versions of node populate _headers while others | ||
events.EventEmitter.call(this); | ||
Writable.call(this, { | ||
decodeStrings: false | ||
}); | ||
this.buffer = []; | ||
this._buffer = []; | ||
this.statusCode = 200; | ||
@@ -44,6 +49,7 @@ this[outHeadersKey] = null; | ||
util.inherits(MockResponse, events.EventEmitter); | ||
util.inherits(MockResponse, Writable); | ||
MockResponse.prototype.write = function (str) { | ||
this.buffer.push(str); | ||
MockResponse.prototype._write = function (chunk, enc, cb) { | ||
this._buffer.push(chunk); | ||
cb(null); | ||
}; | ||
@@ -86,3 +92,3 @@ MockResponse.prototype.writeHead = function (statusCode, headers) { | ||
if (str) { | ||
this.buffer.push(str); | ||
this._buffer.push(str); | ||
} | ||
@@ -112,18 +118,15 @@ | ||
this.finished = true | ||
// Cleanup any listeners that are 'hanging' around. | ||
this.removeAllListeners(); | ||
}; | ||
MockResponse.prototype._buildBody = function _buildBody() { | ||
if (this.buffer.length === 0) { | ||
if (this._buffer.length === 0) { | ||
return ''; | ||
} | ||
if (this.buffer.length === 1) { | ||
return this.buffer[0]; | ||
if (this._buffer.length === 1) { | ||
return this._buffer[0]; | ||
} | ||
var isBuffers = true; | ||
for (var i = 0; i < this.buffer.length; i++) { | ||
if (!Buffer.isBuffer(this.buffer[i])) { | ||
for (var i = 0; i < this._buffer.length; i++) { | ||
if (!Buffer.isBuffer(this._buffer[i])) { | ||
isBuffers = false; | ||
@@ -134,6 +137,6 @@ } | ||
if (!isBuffers) { | ||
return this.buffer.join(''); | ||
return this._buffer.join(''); | ||
} | ||
return Buffer.concat(this.buffer); | ||
return Buffer.concat(this._buffer); | ||
}; | ||
@@ -140,0 +143,0 @@ |
{ | ||
"name": "hammock", | ||
"version": "3.0.0", | ||
"version": "3.0.1", | ||
"description": "Node.js mock / polyfill http object library for http req / res", | ||
@@ -22,8 +22,9 @@ "main": "index.js", | ||
"dependencies": { | ||
"cookies": "^0.7.1", | ||
"lodash": "^4.17.4", | ||
"readable-stream": "^2.3.3" | ||
"cookies": "0.7.3", | ||
"readable-stream": "2.3.3" | ||
}, | ||
"devDependencies": { | ||
"tape": "^4.8.0" | ||
"nock": "8.2.2", | ||
"request": "2.88.0", | ||
"tape": "4.8.0" | ||
}, | ||
@@ -30,0 +31,0 @@ "author": "Tommy Messbauer", |
@@ -1,2 +0,2 @@ | ||
# hammock | ||
# hammock. [](https://travis-ci.org/doanythingfordethklok/hammock) | ||
@@ -3,0 +3,0 @@ Node.js mock / polyfill http object library for http req / res. |
@@ -0,1 +1,3 @@ | ||
'use strict'; | ||
module.exports = require("./lib/request"); |
@@ -0,1 +1,3 @@ | ||
'use strict'; | ||
module.exports = require("./lib/response"); |
@@ -0,7 +1,8 @@ | ||
'use strict'; | ||
var test = require('tape'); | ||
var MockRequest = require('../index.js').Request; | ||
var MockResponse = require('../index.js').Response; | ||
var Cookies = require('cookies'); | ||
test('Create post request', function(t) { | ||
test('Create post request', function (t) { | ||
var req = new MockRequest({ | ||
@@ -18,7 +19,6 @@ method: 'POST', | ||
}); | ||
var res = new MockResponse(); | ||
t.ok(req, 'Request was created'); | ||
var cookies = new Cookies(req, res); | ||
var cookies = new Cookies(req); | ||
var foo = cookies.get('foo'); | ||
@@ -30,10 +30,11 @@ var bar = cookies.get('bar'); | ||
var _body = '' | ||
req.on('data', function(body) { | ||
_body += body | ||
}) | ||
var _body = ''; | ||
req.on('data', function (body) { | ||
_body += body; | ||
}); | ||
req.once('end', function () { | ||
t.equals(_body.toString(), 'foobar', 'Body should have been pushed from mock req.'); | ||
t.end(); | ||
}) | ||
}); | ||
@@ -40,0 +41,0 @@ req.write('foo'); |
115
tests/req.js
@@ -0,8 +1,11 @@ | ||
'use strict'; | ||
var test = require('tape'); | ||
var MockRequest = require('../index.js').Request; | ||
var MockResponse = require('../index.js').Response; | ||
var Cookies = require('cookies'); | ||
var PassThrough = require('stream').PassThrough; | ||
var PassThrough = require('readable-stream').PassThrough; | ||
test('Create request with cookie', function(t) { | ||
test('MockRequest: Create request with cookie', function (t) { | ||
t.plan(3); | ||
var req = new MockRequest({ | ||
@@ -15,7 +18,6 @@ url: '/hello', | ||
}); | ||
var res = new MockResponse(); | ||
t.ok(req, 'Request was created'); | ||
var cookies = new Cookies(req, res); | ||
var cookies = new Cookies(req); | ||
var foo = cookies.get('foo'); | ||
@@ -27,6 +29,7 @@ var bar = cookies.get('bar'); | ||
t.end(); | ||
}); | ||
test('can create with cookie header', function (t) { | ||
test('MockRequest: can create with cookie header', function (t) { | ||
t.plan(2); | ||
var req = new MockRequest({ | ||
@@ -44,87 +47,25 @@ headers: { | ||
test('can write to response', function t(assert) { | ||
var res = new MockResponse(onResponse); | ||
test('MockRequest: pipe to another stream', function (t) { | ||
t.plan(1); | ||
res.write('foo'); | ||
res.write('bar'); | ||
res.end(); | ||
var test_string = 'qweqwe'; | ||
var p = new PassThrough(); | ||
function onResponse(err, resp) { | ||
assert.equal(resp.body, 'foobar'); | ||
assert.end(); | ||
} | ||
}); | ||
p.on('data', function accumulate (d) { | ||
t.equal(d.toString(), test_string); | ||
}); | ||
p.on('end', function assertTest () { | ||
t.end(); | ||
}); | ||
test('can write buffers to response', function t(assert) { | ||
var res = new MockResponse(onResponse); | ||
var req = new MockRequest({ | ||
headers: { | ||
cookie: 's=foo' | ||
} | ||
}); | ||
res.write('foo'); | ||
res.write(new Buffer('bar')); | ||
res.end(); | ||
req.pipe(p); | ||
function onResponse(err, resp) { | ||
assert.equal(resp.body, 'foobar'); | ||
assert.end(); | ||
} | ||
req.write(test_string); | ||
req.end(); | ||
}); | ||
test('can write buffer to end()', function t(assert) { | ||
var res = new MockResponse(onResponse); | ||
res.end(new Buffer('foobar')); | ||
function onResponse(err, resp) { | ||
assert.equal( | ||
resp.body.toString('hex'), new Buffer('foobar').toString('hex') | ||
); | ||
assert.end(); | ||
} | ||
}) | ||
test('can write only buffers to response', function t(assert) { | ||
var res = new MockResponse(onResponse); | ||
res.write(new Buffer('foo')); | ||
res.write(new Buffer('bar')); | ||
res.end(); | ||
function onResponse(err, resp) { | ||
assert.equal( | ||
resp.body.toString('hex'), new Buffer('foobar').toString('hex') | ||
); | ||
assert.end(); | ||
} | ||
}); | ||
test('can write only buffers to response with pipe', function t(assert) { | ||
var res = new MockResponse(onResponse); | ||
var stream = new PassThrough(); | ||
stream.write(new Buffer('foo')); | ||
stream.write(new Buffer('bar')); | ||
stream.pipe(res); | ||
stream.end(); | ||
function onResponse(err, resp) { | ||
assert.equal( | ||
resp.body.toString('hex'), new Buffer('foobar').toString('hex') | ||
); | ||
assert.end(); | ||
} | ||
}); | ||
test('can handle empty responses', function t(assert) { | ||
var res = new MockResponse(onResponse); | ||
var stream = new PassThrough(); | ||
stream.pipe(res); | ||
stream.end(); | ||
function onResponse(err, resp) { | ||
assert.deepEqual(resp.body, ''); | ||
assert.end(); | ||
} | ||
}); | ||
16738
2
12
480
3
+ Addedprocess-nextick-args@1.0.7(transitive)
+ Addedreadable-stream@2.3.3(transitive)
+ Addedstring_decoder@1.0.3(transitive)
- Removedlodash@^4.17.4
- Removedlodash@4.17.21(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedreadable-stream@2.3.8(transitive)
- Removedstring_decoder@1.1.1(transitive)
Updatedcookies@0.7.3
Updatedreadable-stream@2.3.3