Files
desktop-app/node_modules/needle/test/parsing_spec.js
2015-09-24 13:31:53 +08:00

185 lines
4.2 KiB
JavaScript

var should = require('should'),
needle = require('./../'),
http = require('http'),
port = 11111,
server;
describe('parsing', function(){
var get_catch = function(url, opts, cb) {
var done = function(e) {
cb(e);
}
try {
needle.get(url, opts, function() {
done();
});
} catch(e) {
done(e);
}
}
describe('when response is an JSON string', function(){
var json_string = '{"foo":"bar"}';
before(function(done){
server = http.createServer(function(req, res) {
res.setHeader('Content-Type', 'application/json');
res.end(json_string);
}).listen(port, done);
});
after(function(done){
server.close(done);
})
describe('and parse option is not passed', function() {
it('should return object', function(done){
needle.get('localhost:' + port, function(err, response, body){
should.ifError(err);
body.should.have.property('foo', 'bar');
done();
})
})
})
describe('and parse option is true', function() {
describe('and JSON is valid', function() {
it('should return object', function(done){
needle.get('localhost:' + port, { parse: true }, function(err, response, body){
should.not.exist(err);
body.should.have.property('foo', 'bar')
done();
})
})
});
describe('and response is empty', function() {
var old_json_string;
before(function() {
old_json_string = json_string;
json_string = "";
});
after(function() {
json_string = old_json_string;
});
it('should return an empty string', function(done) {
needle.get('localhost:' + port, { parse: true }, function(err, resp) {
should.not.exist(err);
resp.body.should.equal('');
done();
})
})
})
describe('and JSON is invalid', function() {
var old_json_string;
before(function() {
old_json_string = json_string;
json_string = "this is not going to work";
});
after(function() {
json_string = old_json_string;
});
it('does not throw', function(done) {
(function(){
needle.get('localhost:' + port, { parse: true }, done);
}).should.not.throw();
});
it('does NOT return object', function(done) {
needle.get('localhost:' + port, { parse: true }, function(err, response, body) {
should.not.exist(err);
body.should.be.a.String;
body.toString().should.eql('this is not going to work');
done();
})
})
});
})
describe('and parse option is false', function() {
it('does NOT return object', function(done){
needle.get('localhost:' + port, { parse: false }, function(err, response, body) {
should.not.exist(err);
body.should.be.an.instanceof(Buffer)
body.toString().should.eql('{"foo":"bar"}');
done();
})
})
})
});
describe('when response is an XML string', function(){
before(function(done){
server = http.createServer(function(req, res) {
res.writeHeader(200, {'Content-Type': 'application/xml'})
res.end("<post><body>hello there</body></post>")
}).listen(port, done);
});
after(function(done){
server.close(done);
})
describe('and xml2js library is present', function(){
require.bind(null, 'xml2js').should.not.throw();
describe('and parse_response is true', function(){
it('should return valid object', function(done){
needle.get('localhost:' + port, function(err, response, body){
should.not.exist(err);
body.post.should.have.property('body', 'hello there');
done();
})
})
})
describe('and parse response is not true', function(){
it('should return xml string', function(){
})
})
})
describe('and xml2js is not found', function(){
it('should return xml string', function(){
})
})
})
})