'use strict';
const fs = require('fs');
const assert = require('assert');
const response = require('../helpers/context').response;
describe('res.body=', function () {
describe('when Content-Type is set', function () {
it('should not override', function () {
const res = response();
res.type = 'png';
res.body = new Buffer('something');
assert(res.header['content-type'] === 'image/png');
});
describe('when body is an object', function () {
it('should override as json', function () {
const res = response();
res.body = 'hey';
assert(res.header['content-type'] === 'text/html; charset=utf-8');
res.body = {
foo: 'bar'
};
assert(res.header['content-type'] === 'application/json; charset=utf-8');
});
});
it('should override length', function () {
const res = response();
res.type = 'html';
res.body = 'something';
res.length.should.equal(9);
});
});
describe('when a string is given', function () {
it('should default to text', function () {
const res = response();
res.body = 'Tobi';
assert(res.header['content-type'] === 'text/plain; charset=utf-8');
});
it('should set length', function () {
const res = response();
res.body = 'Tobi';
assert(res.header['content-length'] === '4');
});
describe('and contains a non-leading <', function () {
it('should default to text', function () {
const res = response();
res.body = 'aklsdjf < klajsdlfjasd';
assert(res.header['content-type'] === 'text/plain; charset=utf-8');
});
});
});
describe('when an html string is given', function () {
it('should default to html', function () {
const res = response();
res.body = '
Tobi
';
assert(res.header['content-type'] === 'text/html; charset=utf-8');
});
it('should set length', function () {
const string = 'Tobi
';
const res = response();
res.body = string;
assert.equal(res.length, Buffer.byteLength(string));
});
it('should set length when body is overridden', function () {
const string = 'Tobi
';
const res = response();
res.body = string;
res.body = string + string;
assert.equal(res.length, 2 * Buffer.byteLength(string));
});
describe('when it contains leading whitespace', function () {
it('should default to html', function () {
const res = response();
res.body = ' Tobi
';
assert(res.header['content-type'] === 'text/html; charset=utf-8');
});
});
});
describe('when an xml string is given', function () {
it('should default to html', function () {
const res = response();
res.body = '\n<俄语>данные俄语>';
assert(res.header['content-type'] === 'text/html; charset=utf-8');
});
});
describe('when a stream is given', function () {
it('should default to an octet stream', function () {
const res = response();
res.body = fs.createReadStream('LICENSE');
assert(res.header['content-type'] === 'application/octet-stream');
});
});
describe('when a buffer is given', function () {
it('should default to an octet stream', function () {
const res = response();
res.body = new Buffer('hey');
assert(res.header['content-type'] === 'application/octet-stream');
});
it('should set length', function () {
const res = response();
res.body = new Buffer('Tobi');
assert(res.header['content-length'] === '4');
});
});
describe('when an object is given', function () {
it('should default to json', function () {
const res = response();
res.body = {
foo: 'bar'
};
assert(res.header['content-type'] === 'application/json; charset=utf-8');
});
});
});