jive-sdk
Version:
Node.js SDK for Jive Software to assist with the development of add-ons
330 lines (272 loc) • 11.5 kB
JavaScript
var assert = require('assert');
describe('jive', function () {
describe('#util.buildRequest()', function () {
it('test rejectUnauthorized option is added in development mode', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
jive.context['config']['development'] = true;
mockery.registerMock('request', function (options, cb) {
if ( options['rejectUnauthorized'] ) {
assert.fail( options['rejectUnauthorized'], false );
}
done();
});
jive.util.buildRequest( 'http://www.yahoo.com', 'GET');
});
it('test rejectUnauthorized option is added with strictSSL', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
jive.context['config']['development'] = false;
jive.context['config']['strictSSL'] = false;
mockery.registerMock('request', function (options, cb) {
if ( options['rejectUnauthorized'] ) {
assert.fail( options['rejectUnauthorized'], false );
}
done();
});
jive.util.buildRequest( 'http://www.yahoo.com', 'GET');
});
it('test port - non standard', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
mockery.registerMock('request', function (options, cb) {
if ( options['port'] != 8091) {
assert.fail( options['port'], 8091);
}
done();
});
jive.util.buildRequest( 'http://xyz.com:8091/mypath?foo=bar', 'GET');
});
it('test port - 80', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
mockery.registerMock('request', function (options, cb) {
if ( options['port'] ) {
assert.fail( options['port'], undefined );
}
done();
});
jive.util.buildRequest( 'http://xyz.com/mypath?foo=bar', 'GET');
});
it('test port - 443', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
mockery.registerMock('request', function (options, cb) {
if ( options['port'] ) {
assert.fail( options['port'], undefined );
}
done();
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'GET');
});
it('test POST object by default', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = {'my':'object'};
mockery.registerMock('request', function (options, cb) {
var headers = options['headers'];
if ( headers['Content-Type'] !== 'application/json' ) {
assert.fail( headers['Content-Type'], 'application/json' );
}
if ( headers['Content-Length'] != JSON.stringify(postObj).length ) {
assert.fail( headers['Content-Length'], JSON.stringify(postObj).length );
}
done();
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj );
});
it('test POST object by default (string)', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = JSON.stringify( {'my':'object'} );
mockery.registerMock('request', function (options, cb) {
var headers = options['headers'];
if ( headers['Content-Type'] !== 'application/json' ) {
assert.fail( headers['Content-Type'], 'application/json' );
}
done();
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj );
});
it('test POST object, explicit JSON type', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = JSON.stringify( {'my':'object'} );
mockery.registerMock('request', function (options, cb) {
var headers = options['headers'];
if ( headers['Content-Type'] !== 'application/json' ) {
assert.fail( headers['Content-Type'], 'application/json' );
}
done();
});
var headers = { 'Content-Type': 'application/json' };
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj, headers );
});
it('test POST stringified object, explicit JSON type', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = JSON.stringify( {'my':'object'} );
mockery.registerMock('request', function (options, cb) {
var headers = options['headers'];
if ( headers['Content-Type'] !== 'application/json' ) {
assert.fail( headers['Content-Type'], 'application/json' );
}
done();
});
var headers = { 'Content-Type': 'application/json' };
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj, headers );
});
it('test exception on POST of nonobject, explicit JSON type', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = function(){};
mockery.registerMock('request', function (options, cb) {
var headers = options['headers'];
if ( headers['Content-Type'] !== 'application/json' ) {
assert.fail( headers['Content-Type'], 'application/json' );
}
cb(undefined, {});
});
var headers = { 'Content-Type': 'application/json' };
try {
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj, headers);
assert.fail();
} catch (e) {
done();
}
});
it('test POST object as application/x-www-form-urlencoded', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = {
"my" : "object"
};
mockery.registerMock('request', function (options, cb) {
if ( options['body'] !== 'my=object' ) {
assert.fail( options['body'], 'my=object' );
}
done();
});
var headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj, headers);
});
it('test POST stringified object as application/x-www-form-urlencoded', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var postObj = JSON.stringify( {
"my" : "object"
} );
mockery.registerMock('request', function (options, cb) {
if ( options['body'] !== 'my=object' ) {
assert.fail( options['body'], 'my=object' );
}
done();
});
var headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar', 'POST', postObj, headers);
});
it('test error callback on exception', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
mockery.registerMock('request', function (options, cb) {
cb(new Error("Ouch!"));
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar').then(
// success
function() {
assert.fail('Expected an error');
},
// error
function(e) {
if ( e ) {
done();
} else {
assert.fail('Expected an error');
}
}
);
});
it('test error callback on error response code', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var response = {
'headers' : {'content-type': 'application/json'},
'statusCode' : 400
};
var body = JSON.stringify( {
'not' : 'allowed'
} );
mockery.registerMock('request', function (options, cb) {
cb(undefined, response, body);
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar').then(
// success
function() {
assert.fail('Expected an error');
},
// error
function(e) {
if ( e['statusCode'] != 400 ) {
assert.fail( e['statusCode'] , 400 );
}
if ( JSON.stringify(e['entity']) !== body ) {
assert.fail( e['body'] , body, 'expected entity response' );
}
done();
}
);
});
it('test successful call', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var response = {
'headers' : {},
'statusCode' : 200
};
var body = JSON.stringify( {
'a' : 'ok'
} );
mockery.registerMock('request', function (options, cb) {
cb(undefined, response, body);
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar').then(
// success
function() {
done();
},
// error
function(e) {
assert.fail();
}
);
});
it('test successful call, non json response', function (done) {
var jive = this['jive'];
var mockery = this['mockery'];
var response = {
'headers' : {},
'statusCode' : 200
};
var body = 'why u no give me json';
mockery.registerMock('request', function (options, cb) {
cb(undefined, response, body);
});
jive.util.buildRequest( 'https://xyz.com/mypath?foo=bar').then(
// success
function(response) {
if ( !response ) {
assert.fail();
}
if ( response['entity']['body'] !== body ) {
assert.fail();
}
done();
},
// error
function(e) {
assert.fail();
}
);
});
});
});