var logfmt = require('../logfmt'), stream = require('stream'), assert = require('assert'); suite('logfmt.bodyParser', 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.bodyParser(); 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.bodyParser(); parser(mockReq, null, next) }) test("accepts contentType option", function(){ var mockReq = new stream.Readable; mockReq.header = function(){ return 'foo'; } mockReq._read = function(){}; mockReq.push('hello=kitty'); mockReq.push(null); var next = function(err){ assert.deepEqual(mockReq.body[0], {hello: 'kitty'}) }; var parser = logfmt.bodyParser({contentType: 'foo'}); parser(mockReq, null, next) }) test("converts body lines to objects", function(){ var mockReq = new stream.Readable; mockReq.header = function(){ return 'application/logplex-1'; } mockReq._read = function(){}; mockReq.push('hello=kitty'); mockReq.push(null); var next = function(err){ assert.deepEqual(mockReq.body[0], {hello: 'kitty'}) }; var parser = logfmt.bodyParser(); parser(mockReq, null, next) }) test("parses all the lines", function(){ var mockReq = new stream.Readable; mockReq.header = function(){ return 'application/logplex-1'; } mockReq._read = function(){}; mockReq.push('hello=kitty\n'); mockReq.push('foo=bar'); mockReq.push(null); var next = function(err){ assert.deepEqual(mockReq.body[0], {hello: 'kitty'}) assert.deepEqual(mockReq.body[1], {foo: 'bar'}) assert.equal(mockReq.body[2], undefined) }; var parser = logfmt.bodyParser(); parser(mockReq, null, next) }) test("ignores trailing newline", function(){ var mockReq = new stream.Readable; mockReq.header = function(){ return 'application/logplex-1'; } mockReq._read = function(){}; mockReq.push('hello=kitty\n'); mockReq.push(null); var next = function(err){ assert.deepEqual(mockReq.body[0], {hello: 'kitty'}) assert.equal(mockReq.body[1], undefined) }; var parser = logfmt.bodyParser(); parser(mockReq, null, next) }) })