130 lines
3.0 KiB
JavaScript
130 lines
3.0 KiB
JavaScript
|
var logfmt = require('../logfmt'),
|
||
|
through = require('through'),
|
||
|
stream = require('stream'),
|
||
|
assert = require('assert');
|
||
|
|
||
|
//avoid test bleeding
|
||
|
var logfmt = new logfmt;
|
||
|
|
||
|
suite('logfmt.bodyParserStream', function() {
|
||
|
|
||
|
test("skips parsing when req._body is true", function(){
|
||
|
|
||
|
var mockReq = new stream.Readable;
|
||
|
mockReq.header = function(){
|
||
|
return 'application/logplex-1';
|
||
|
}
|
||
|
mockReq._read = function(){};
|
||
|
mockReq.push('hello=kitty');
|
||
|
mockReq.push(null);
|
||
|
|
||
|
mockReq._body = true;
|
||
|
|
||
|
var next = function(err){
|
||
|
assert.equal(mockReq.body, undefined)
|
||
|
};
|
||
|
|
||
|
var parser = logfmt.bodyParserStream();
|
||
|
parser(mockReq, null, next)
|
||
|
})
|
||
|
|
||
|
test("skips parsing when contentType does not match", function(){
|
||
|
var mockReq = new stream.Readable;
|
||
|
mockReq.header = function(){
|
||
|
return 'application/foo';
|
||
|
}
|
||
|
mockReq._read = function(){};
|
||
|
mockReq.push('hello=kitty');
|
||
|
mockReq.push(null);
|
||
|
|
||
|
var next = function(err){
|
||
|
assert.equal(mockReq.body, undefined)
|
||
|
};
|
||
|
|
||
|
var parser = logfmt.bodyParserStream();
|
||
|
parser(mockReq, null, next)
|
||
|
|
||
|
})
|
||
|
|
||
|
test("converts body lines to object read stream", function(done){
|
||
|
var mockReq = new stream.Readable;
|
||
|
var data;
|
||
|
|
||
|
mockReq.header = function(){
|
||
|
return 'application/logplex-1';
|
||
|
}
|
||
|
mockReq._read = function(){};
|
||
|
mockReq.push('hello=kitty');
|
||
|
mockReq.push(null);
|
||
|
var next = function(){};
|
||
|
|
||
|
var parser = logfmt.bodyParserStream();
|
||
|
parser(mockReq, null, next)
|
||
|
|
||
|
mockReq.body.on('readable', function(){
|
||
|
var chunk = mockReq.body.read();
|
||
|
if (chunk !== null) {
|
||
|
data = chunk;
|
||
|
}
|
||
|
})
|
||
|
|
||
|
mockReq.body.on('end', function() {
|
||
|
assert.deepEqual(data, { hello: 'kitty' });
|
||
|
done();
|
||
|
});
|
||
|
})
|
||
|
|
||
|
|
||
|
test("accepts contentType option", function(done){
|
||
|
var mockReq = new stream.Readable;
|
||
|
var data;
|
||
|
mockReq.header = function(){
|
||
|
return 'foo';
|
||
|
}
|
||
|
mockReq._read = function(){};
|
||
|
mockReq.push('hello=kitty');
|
||
|
mockReq.push(null);
|
||
|
var next = function(){};
|
||
|
|
||
|
var parser = logfmt.bodyParserStream({contentType: 'foo'});
|
||
|
parser(mockReq, null, next)
|
||
|
|
||
|
mockReq.body.on('readable', function(){
|
||
|
var chunk = mockReq.body.read();
|
||
|
if (chunk !== null) {
|
||
|
data = chunk;
|
||
|
}
|
||
|
})
|
||
|
|
||
|
mockReq.body.on('end', function() {
|
||
|
assert.deepEqual(data, { hello: 'kitty' })
|
||
|
done();
|
||
|
});
|
||
|
})
|
||
|
|
||
|
test("parses all the lines", function(done){
|
||
|
var mockReq = new stream.Readable;
|
||
|
mockReq.header = function(){
|
||
|
return 'application/logplex-1';
|
||
|
}
|
||
|
mockReq._read = function(){};
|
||
|
mockReq.push('hello=kitty\n');
|
||
|
mockReq.push('foo=bar\n');
|
||
|
mockReq.push('path=/\n');
|
||
|
mockReq.push(null);
|
||
|
var next = function(){};
|
||
|
|
||
|
var parser = logfmt.bodyParserStream();
|
||
|
parser(mockReq, null, next)
|
||
|
|
||
|
var matches = [{path: '/'}, {foo: 'bar'}, {hello: 'kitty'}];
|
||
|
|
||
|
mockReq.body.pipe(through(function(data){
|
||
|
assert.deepEqual(data, matches.pop())
|
||
|
},function(){
|
||
|
done()
|
||
|
}))
|
||
|
})
|
||
|
|
||
|
})
|