UNPKG

twiliojs-api

Version:

Module to invoke twilio.com services

327 lines (237 loc) 9.45 kB
var assert = require("assert"); var Util = require("../lib/util.js"); var nock = require('nock'); var settings = null; describe("lib.util", function ( ) { beforeEach ( function ( done ) { settings = { accountSid: "abc", accountToken: "def", apiEndpoint: "https://api.twilio.com" }; nock.cleanAll(); done(); }) describe("hook", function ( ) { it("Should throw if no target argument", function ( done ) { try { var util = new Util({}); util.hook(); throw new Error ("Had to be thrown") } catch ( e ) { assert.ok(e); assert.ok(e instanceof Error); assert.ok(e.message.indexOf("'target'") > -1); done(); } } ); it("Should throw if no methods argument", function ( done ) { try { var util = new Util({}); util.hook({}); throw new Error ("Had to be thrown"); } catch ( e ) { assert.ok(e); assert.ok(e instanceof Error); assert.ok(e.message.indexOf("'methods") > -1); done(); } }); it ("Should add all methods", function ( done ) { var target = {}, methods = { group: { foo: { path: "/" }, bar: { path: "/" } } }; var util = new Util({}); util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); assert.ok(typeof target["bar"] === 'function'); done(); }); it("Should set GET as default HTTP method", function ( done ) { settings.apiEndpoint = "http://contoso"; var server = nock("http://contoso") .get("/guid.json") .reply(200, true); var target = {}; var methods = { group: { foo: { path: "/guid" } } }; var util = new Util(settings) util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]({ auth: 'xyz' }, function(err, result) { assert.ok(!err); assert.ok(result); done(); }) }); it ("Should set the HTTP method", function ( done ) { settings.apiEndpoint = "http://contoso"; var server = nock("http://contoso") .post("/guid.json") .reply(200, true); var target = {}; var methods = { group: { foo: { method: "POST", path: "/guid" } } }; var util = new Util(settings) util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]({ auth: 'xyz' }, function(err, result){ assert.ok(!err); assert.ok(result); done(); }) }); it ("Should set the path", function ( done ) { settings.apiEndpoint = "http://contoso"; var server = nock("http://contoso") .get("/alfa/beta.json") .reply(200, true); var target = {}; var methods = { group: { foo: { path: "/alfa/beta" } } }; var util = new Util(settings) util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]({ auth: 'xyz' }, function(err, result){ assert.ok(!err); assert.ok(result); done(); }); }); }); describe("invoking methods", function ( ) { var methods = { group: { foo: { path: "/" } } }; beforeEach (function (done) { settings.apiEndpoint = "http://api.contoso"; done(); }); it ("Should fail on missing required argument", function ( done ) { var target = {}; var methods = { group: { foo: { path: "/{requiredArg}" } } }; var util = new Util(settings); util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]({auth:1}, function(err, result){ assert.ok(err); assert.ok(err instanceof Error); assert.ok(err.message.indexOf("requiredArg") > -1); done(); }) }); it ("Should process required argument", function ( done ) { var server = nock("http://api.contoso") .get("/bar.json") .reply(200, true); var target = {}; var methods = { group: { foo: { path: "/{requiredArg}" } } }; var util = new Util(settings); util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]({ requiredArg: "bar"}, function(err, result){ assert.ok(!err); assert.ok(result); done(); }) }); it ("Should send body", function ( done ) { var server = nock("http://api.contoso") .get("/guid.json", {bar:1}) .reply(200, ""); var target = {}; var methods = { group: { foo: { path: "/guid" } } }; var util = new Util(settings); util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]( { bar: 1 }, function(err, result){ assert.ok(!err); assert.ok(result); done(); }) }); it.skip("Should send optional params as querystring", function ( done ) { var server = nock("http://api.contoso") .get("/guid.json?bar=1&baz=2") .reply(200, true); var target = {}; var methods = { group: { foo: { path: "/guid" } } }; var util = new Util(settings); util.hook(target, methods); assert.ok(typeof target["foo"] === 'function'); target["foo"]({ params: { bar: 1, baz: 2 } }, function(err, result){ assert.ok(!err); assert.ok(result); done(); }) }); } ); describe("validateParams", function () { it ("Should throw if no data argument", function ( done ) { try { var util = new Util(settings); util.validateParams(); throw new Error ("Had to be thrown") } catch ( e ) { assert.ok(e); assert.ok(e instanceof Error); assert.ok(e.message.indexOf("'data'") > -1); done(); } } ); it ("Should throw if no params argument.", function ( done ) { try { var util = new Util(settings); util.validateParams({}); throw new Error ("Had to be thrown") } catch ( e ) { assert.ok(e); assert.ok(e instanceof Error); assert.ok(e.message.indexOf("'params'") > -1); done(); } } ); it ("Should not fail on empty array of params.", function ( done ) { var util = new Util(settings); var err = util.validateParams({}, []); assert.ok(!err); done(); }); it ("Should not return an error if all params are present.", function ( done ) { var util = new Util(settings); var err = util.validateParams({ x:1, y: 1, z: 1}, [ "x", "z"]); assert.ok(!err); done(); }); it ("Should return an error on first param that is not present.", function ( done ) { var util = new Util(settings); var err = util.validateParams({ x:1, z: 1}, [ "x", "y", "z"]); assert.ok ( err ); assert.ok ( err instanceof Error ); assert.ok ( err.message.indexOf ( "'y'" ) > -1 ); done(); }); } ); describe("buildResponse", function () { it ("Should include status code.", function ( done ) { var util = new Util(settings); var res = util.buildResponse({ statusCode: 200 }); assert.ok(res); assert.equal(200, res.statusCode); done(); } ); it ("Should include headers", function ( done ) { var util = new Util(settings); var res = util.buildResponse({ headers: {foo: "bar" } }); assert.ok(res); assert.ok(res.headers); assert.equal('bar', res.headers.foo); done(); } ); it ("Should include parsed body", function ( done ) { var util = new Util(settings); var res = util.buildResponse( { body : '{ "foo": "bar"}' }); assert.ok(res); assert.ok(res.body); assert.equal('bar', res.body.foo); done(); }); }); });