Skip to content

Commit

Permalink
external-calls
Browse files Browse the repository at this point in the history
  • Loading branch information
TakenPilot committed Dec 3, 2015
1 parent 24b3904 commit 8525ee5
Show file tree
Hide file tree
Showing 16 changed files with 187 additions and 168 deletions.
1 change: 0 additions & 1 deletion lib/control.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ function setReadOnly(obj) {
if (isFreezable(obj)) {
_.forOwn(obj, function (value) {
if (typeof value === 'object' && value !== null) {
//console.log('setReadOnly', value);
setReadOnly(value);
}
});
Expand Down
2 changes: 1 addition & 1 deletion lib/media.test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

var _ = require('lodash'),
const _ = require('lodash'),
filename = __filename.split('/').pop().split('.').shift(),
lib = require('./' + filename),
expect = require('chai').expect,
Expand Down
18 changes: 18 additions & 0 deletions lib/rest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

const nodeFetch = require('node-fetch'),
jsonHeaders = {'Content-type':'application/json'};

function getObject(url, options) {
return exports.fetch(url, options).then(function (response) {
return response.json();
});
}

function putObject(url, data) {
return exports.fetch(url, {method: 'PUT', body: JSON.stringify(data), headers: jsonHeaders});
}

module.exports.fetch = nodeFetch;
module.exports.getObject = getObject;
module.exports.putObject = putObject;
40 changes: 40 additions & 0 deletions lib/rest.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use strict';

var _ = require('lodash'),
bluebird = require('bluebird'),
filename = __filename.split('/').pop().split('.').shift(),
lib = require('./' + filename),
sinon = require('sinon');

describe(_.startCase(filename), function () {
var sandbox;

beforeEach(function () {
sandbox = sinon.sandbox.create();
sandbox.stub(lib, 'fetch');
});

afterEach(function () {
sandbox.restore();
});

describe('getObject', function () {
const fn = lib[this.title];

it('gets', function () {
lib.fetch.returns(bluebird.resolve({json: _.constant({})}));

return fn('some-url');
});
});

describe('putObject', function () {
const fn = lib[this.title];

it('gets', function () {
lib.fetch.returns(bluebird.resolve());

return fn('some-url');
});
});
});
2 changes: 1 addition & 1 deletion lib/services/components.js
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ function del(uri, locals) {
* @returns {Promise}
*/
function post(uri, data, locals) {
uri += '/' + uid();
uri += '/' + uid.get();
return cascadingPut(uri, data, locals).then(function (result) {
result._ref = uri;
return result;
Expand Down
18 changes: 10 additions & 8 deletions lib/services/notifications.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
'use strict';

const _ = require('lodash'),
bluebird = require('bluebird'),
contentType = 'Content-type',
log = require('../log'),
restler = require('restler'),
contentType = 'Content-type';
rest = require('../rest');

/**
* @param {string} event
* @param {string} url
* @param {object} data
* @returns {Promise}
*/
function callWebhook(event, url, data) {
const headers = {
Expand All @@ -27,24 +29,24 @@ function callWebhook(event, url, data) {
options.body = data;
}

restler.request(url, options).on('complete', function (result, response) {
log.info('called webhook', _.pick(response, ['status', 'statusText']), result);
return rest.fetch(url, options).then(function (response) {
log.info('called webhook', _.pick(response, ['status', 'statusText']));
});
}

/**
* @param {object} site
* @param {string} eventName
* @param {*} [data]
* @returns {function}
* @returns {Promise}
*/
function notify(site, eventName, data) {
const events = _.get(site, 'notify.webhooks');

if (events && _.isArray(events[eventName])) {
_.each(events[eventName], function (url) {
callWebhook(eventName, url, data);
});
return bluebird.all(_.map(events[eventName], function (url) { return callWebhook(eventName, url, data); }));
} else {
return bluebird.resolve();
}
}

Expand Down
71 changes: 34 additions & 37 deletions lib/services/notifications.test.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict';
var _ = require('lodash'),
bluebird = require('bluebird'),
expect = require('chai').expect,
filename = __filename.split('/').pop().split('.').shift(),
lib = require('./' + filename),
log = require('../log'),
mockRestler = require('../../test/fixtures/mocks/restler'),
restler = require('restler'),
rest = require('../rest'),
sinon = require('sinon');


Expand All @@ -14,7 +14,7 @@ describe(_.startCase(filename), function () {

beforeEach(function () {
sandbox = sinon.sandbox.create();
sandbox.stub(restler);
sandbox.stub(rest);
sandbox.stub(log);
});

Expand Down Expand Up @@ -48,11 +48,11 @@ describe(_.startCase(filename), function () {
site = {notify: {webhooks: {someEvent: [hookUrl]}}},
eventName = 'someEvent';

restler.request.returns(mockRestler.createRequest());
rest.fetch.returns(bluebird.resolve());

fn(site, eventName);

sinon.assert.calledWith(restler.request, hookUrl, { headers: { 'X-Event': 'someEvent' }, method: 'POST' });
return fn(site, eventName).then(function () {
sinon.assert.calledWith(rest.fetch, hookUrl, { headers: { 'X-Event': 'someEvent' }, method: 'POST' });
});
});

it('notifies with string value', function () {
Expand All @@ -61,17 +61,17 @@ describe(_.startCase(filename), function () {
data = 'some-string',
eventName = 'someEvent';

restler.request.returns(mockRestler.createRequest());

fn(site, eventName, data);

sinon.assert.calledWith(restler.request, hookUrl, {
body: data,
headers: {
'Content-type': 'text/plain',
'X-Event': eventName
},
method: 'POST'
rest.fetch.returns(bluebird.resolve());

return fn(site, eventName, data).then(function () {
sinon.assert.calledWith(rest.fetch, hookUrl, {
body: data,
headers: {
'Content-type': 'text/plain',
'X-Event': eventName
},
method: 'POST'
});
});
});

Expand All @@ -81,33 +81,30 @@ describe(_.startCase(filename), function () {
data = {a:'b'},
eventName = 'someEvent';

restler.request.returns(mockRestler.createRequest());

fn(site, eventName, data);

sinon.assert.calledWith(restler.request, hookUrl, {
body: JSON.stringify(data),
headers: {
'Content-type': 'application/json',
'X-Event': eventName
},
method: 'POST'
rest.fetch.returns(bluebird.resolve());

return fn(site, eventName, data).then(function () {
sinon.assert.calledWith(rest.fetch, hookUrl, {
body: JSON.stringify(data),
headers: {
'Content-type': 'application/json',
'X-Event': eventName
},
method: 'POST'
});
});
});

it('logs', function () {
const hookUrl = 'some_url',
site = {notify: {webhooks: {someEvent: [hookUrl]}}},
eventName = 'someEvent',
request = mockRestler.createRequest();

sinon.stub(request, 'on');
request.on.yields();
restler.request.returns(request);
eventName = 'someEvent';

fn(site, eventName);
rest.fetch.returns(bluebird.resolve());

sinon.assert.calledWith(restler.request, hookUrl, { headers: { 'X-Event': 'someEvent' }, method: 'POST' });
return fn(site, eventName).then(function () {
sinon.assert.calledWith(rest.fetch, hookUrl, { headers: { 'X-Event': 'someEvent' }, method: 'POST' });
});
});
});
});
4 changes: 2 additions & 2 deletions lib/services/pages.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function getPrefix(uri) {
function renameReferenceUniquely(uri) {
const prefix = uri.substr(0, uri.indexOf('/components/'));

return prefix + '/components/' + components.getName(uri) + '/instances/' + uid();
return prefix + '/components/' + components.getName(uri) + '/instances/' + uid.get();
}

/**
Expand Down Expand Up @@ -220,7 +220,7 @@ function create(uri, data, locals) {
pageData = data && _.omit(data, 'layout'),
prefix = uri.substr(0, uri.indexOf('/pages')),
site = getSite(prefix, locals),
pageReference = prefix + '/pages/' + uid();
pageReference = prefix + '/pages/' + uid.get();

if (!layoutReference) {
throw new Error('Client: Data missing layout reference.');
Expand Down
Loading

0 comments on commit 8525ee5

Please sign in to comment.