Skip to content

Commit

Permalink
Merge pull request #3 from grantgasp/add-apply-decision-to-order
Browse files Browse the repository at this point in the history
Add apply decision to orders functionality
  • Loading branch information
officert authored Dec 4, 2018
2 parents ed53c24 + 357f054 commit 4613852
Show file tree
Hide file tree
Showing 32 changed files with 392 additions and 211 deletions.
25 changes: 25 additions & 0 deletions lib/client/decisions.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,31 @@ function getDecisionsApi(siftScienceClient) {
throw error;
});
},

/**
* @param {String} accountId
* @param {String} orderId
* @param {String} userId
* @param {Object} [data]
* @param {Object} [params]
* https://siftscience.com/developers/docs/curl/decisions-api/apply-decisions
*/
applyByAccountIdAndOrderId(accountId, userId, orderId, data = {}, params = {}) {
if (!accountId) return Promise.reject(new Error('accountId is required'));
if (!orderId) return Promise.reject(new Error('orderId is required'));
if (!userId) return Promise.reject(new Error('userId is required'));

return Promise.resolve(v3HttpClient.post(`/accounts/${accountId}/users/${userId}/orders/${orderId}/decisions`, data, params, {
auth: {
username: key
}
}))
.then(response => response.data)
.catch(error => {
logger.logRequestError(error);
throw error;
});
},
/**
* @param {Object} [data]
* @param {Object} [params]
Expand Down
4 changes: 2 additions & 2 deletions lib/client/events.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Promise = require('bluebird');
const v204HttpClient = require('./v204HttpClient');
const v205HttpClient = require('./v205HttpClient');
const _ = require('lodash');

function getEventsApi(siftScienceClient) {
Expand All @@ -17,7 +17,7 @@ function getEventsApi(siftScienceClient) {
$api_key: key
});

return Promise.resolve(v204HttpClient.post('/events', data, params))
return Promise.resolve(v205HttpClient.post('/events', data, params))
.then(response => response.data)
.catch(error => {
logger.logRequestError(error);
Expand Down
6 changes: 3 additions & 3 deletions lib/client/labels.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Promise = require('bluebird');
const v204HttpClient = require('./v204HttpClient');
const v205HttpClient = require('./v205HttpClient');
const _ = require('lodash');

function getLabelsApi(siftScienceClient) {
Expand All @@ -20,7 +20,7 @@ function getLabelsApi(siftScienceClient) {
$api_key: key
});

return Promise.resolve(v204HttpClient.post(`/users/${userId}/labels`, data, params))
return Promise.resolve(v205HttpClient.post(`/users/${userId}/labels`, data, params))
.then(response => response.data)
.catch(error => {
logger.logRequestError(error);
Expand All @@ -39,7 +39,7 @@ function getLabelsApi(siftScienceClient) {
api_key: key
});

return Promise.resolve(v204HttpClient.delete(`/users/${userId}/labels`, params))
return Promise.resolve(v205HttpClient.delete(`/users/${userId}/labels`, params))
.then(response => response.data)
.catch(error => {
logger.logRequestError(error);
Expand Down
6 changes: 3 additions & 3 deletions lib/client/score.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const Promise = require('bluebird');
const v204HttpClient = require('./v204HttpClient');
const v205HttpClient = require('./v205HttpClient');
const _ = require('lodash');

function getScoreApi(siftScienceClient) {
Expand All @@ -8,7 +8,7 @@ function getScoreApi(siftScienceClient) {

return {
/**
* @param {Object} [data]
* @param {Object} [userId]
* @param {Object} [params]
* https://siftscience.com/developers/docs/curl/score-api/score-api
*/
Expand All @@ -19,7 +19,7 @@ function getScoreApi(siftScienceClient) {
api_key: key
});

return Promise.resolve(v204HttpClient.get(`/score/${userId}`, params))
return Promise.resolve(v205HttpClient.get(`/score/${userId}`, params))
.then(response => response.data)
.catch(error => {
logger.logRequestError(error);
Expand Down
5 changes: 0 additions & 5 deletions lib/client/v204HttpClient.js

This file was deleted.

5 changes: 5 additions & 0 deletions lib/client/v205HttpClient.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const HttpClient = require('./httpClient');

const V205_BASE_URL = 'https://api.siftscience.com/v205';

module.exports = new HttpClient(V205_BASE_URL);
156 changes: 156 additions & 0 deletions tests/lib/client/decision/applyByAccountIdAndOrderId-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
const _ = require('lodash');
const should = require('should');
const sinon = require('sinon');

let siftScience;
let v3HttpClient;
let sandbox;

before(() => {
siftScience = require('../../../../lib');
v3HttpClient = require('../../../../lib/client/v3HttpClient');

sandbox = sinon.sandbox.create();
});

describe('lib', () => {
describe('client', () => {
describe('decisions', () => {
describe('applyByAccountIdAndOrderId', () => {
afterEach(() => {
sandbox.restore();
});

const key = '123';
let siftScienceClient;

before('create siftScienceClient', () => {
siftScienceClient = siftScience.init(key);
});

describe('when called without accountId', () => {
const accountId = null;
const userId = '123';
const orderId = '123';

it('should reject with an error', () => {
return siftScienceClient.decisions.applyByAccountIdAndOrderId(accountId, userId, orderId)
.then(should.not.exist)
.catch(err => {
should.exist(err);
err.should.be.instanceOf(Error);
err.message.should.equal('accountId is required');
});
});
});

describe('when called without userId', () => {
const accountId = '123';
const orderId = '123';
const userId = null;

it('should reject with an error', () => {
return siftScienceClient.decisions.applyByAccountIdAndOrderId(accountId, userId, orderId)
.then(should.not.exist)
.catch(err => {
should.exist(err);
err.should.be.instanceOf(Error);
err.message.should.equal('userId is required');
});
});
});

describe('when called without orderId', () => {
const accountId = '123';
const orderId = null;
const userId = '123';

it('should reject with an error', () => {
return siftScienceClient.decisions.applyByAccountIdAndOrderId(accountId, userId, orderId)
.then(should.not.exist)
.catch(err => {
should.exist(err);
err.should.be.instanceOf(Error);
err.message.should.equal('orderId is required');
});
});
});

describe('when called with an accountId, userId and orderId', () => {
const accountId = '123';
const userId = '123';
const orderId = '123';
const data = {};
const response = {
data: {}
};

let postStub;

before('stub v3HttpClient.post()', () => {
postStub = sandbox.stub(v3HttpClient, 'post')
.returns(Promise.resolve(response));
});

it('should call v3HttpClient.post()', () => {
return siftScienceClient.decisions.applyByAccountIdAndOrderId(accountId, userId, orderId, data)
.then(result => {
should.exist(result);
result.should.deepEqual(response.data);

postStub.callCount.should.equal(1);
postStub.args[0][0].should.equal(`/accounts/${accountId}/users/${userId}/orders/${orderId}/decisions`);
postStub.args[0][1].should.deepEqual(data);
postStub.args[0][2].should.deepEqual({});
postStub.args[0][3].should.deepEqual({
auth: {
username: siftScienceClient._key
}
});
});
});
});

describe('when called with params', () => {
const accountId = '123';
const userId = '123';
const orderId = '123';
const data = {};
const params = {
foo: 'bar'
};
const response = {
data: {}
};

let postStub;

before('stub v3HttpClient.post()', () => {
postStub = sandbox.stub(v3HttpClient, 'post')
.returns(Promise.resolve(response));
});

it('should call v3HttpClient.post()', () => {
return siftScienceClient.decisions.applyByAccountIdAndOrderId(accountId, userId, orderId, data, params)
.then(result => {
should.exist(result);
result.should.deepEqual(response.data);

postStub.callCount.should.equal(1);
postStub.args[0][0].should.equal(`/accounts/${accountId}/users/${userId}/orders/${orderId}/decisions`);
postStub.args[0][1].should.deepEqual(_.extend(data, {
$api_key: key
}));
postStub.args[0][2].should.deepEqual(params);
postStub.args[0][3].should.deepEqual({
auth: {
username: siftScienceClient._key
}
});
});
});
});
});
});
});
});
16 changes: 8 additions & 8 deletions tests/lib/client/events/addItemToCart-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ const sinon = require('sinon');
const _ = require('lodash');

let siftScience;
let v204HttpClient;
let v205HttpClient;
let sandbox;

before(() => {
siftScience = require('../../../../lib');
v204HttpClient = require('../../../../lib/client/v204HttpClient');
v205HttpClient = require('../../../../lib/client/v205HttpClient');

sandbox = sinon.sandbox.create();
});
Expand All @@ -36,12 +36,12 @@ describe('lib', () => {
data: {}
};

before('stub v204HttpClient.post()', () => {
postStub = sandbox.stub(v204HttpClient, 'post')
before('stub v205HttpClient.post()', () => {
postStub = sandbox.stub(v205HttpClient, 'post')
.returns(Promise.resolve(response));
});

it('should call v204HttpClient.post()', () => {
it('should call v205HttpClient.post()', () => {
return siftScienceClient.events.addItemToCart()
.then(result => {
should.exist(result);
Expand All @@ -67,12 +67,12 @@ describe('lib', () => {
data: {}
};

before('stub v204HttpClient.post()', () => {
postStub = sandbox.stub(v204HttpClient, 'post')
before('stub v205HttpClient.post()', () => {
postStub = sandbox.stub(v205HttpClient, 'post')
.returns(Promise.resolve(response));
});

it('should call v204HttpClient.post()', () => {
it('should call v205HttpClient.post()', () => {
return siftScienceClient.events.addItemToCart(data)
.then(result => {
should.exist(result);
Expand Down
16 changes: 8 additions & 8 deletions tests/lib/client/events/addPromotion-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ const sinon = require('sinon');
const _ = require('lodash');

let siftScience;
let v204HttpClient;
let v205HttpClient;
let sandbox;

before(() => {
siftScience = require('../../../../lib');
v204HttpClient = require('../../../../lib/client/v204HttpClient');
v205HttpClient = require('../../../../lib/client/v205HttpClient');

sandbox = sinon.sandbox.create();
});
Expand All @@ -36,12 +36,12 @@ describe('lib', () => {
data: {}
};

before('stub v204HttpClient.post()', () => {
postStub = sandbox.stub(v204HttpClient, 'post')
before('stub v205HttpClient.post()', () => {
postStub = sandbox.stub(v205HttpClient, 'post')
.returns(Promise.resolve(response));
});

it('should call v204HttpClient.post()', () => {
it('should call v205HttpClient.post()', () => {
return siftScienceClient.events.addPromotion()
.then(result => {
should.exist(result);
Expand All @@ -67,12 +67,12 @@ describe('lib', () => {
data: {}
};

before('stub v204HttpClient.post()', () => {
postStub = sandbox.stub(v204HttpClient, 'post')
before('stub v205HttpClient.post()', () => {
postStub = sandbox.stub(v205HttpClient, 'post')
.returns(Promise.resolve(response));
});

it('should call v204HttpClient.post()', () => {
it('should call v205HttpClient.post()', () => {
return siftScienceClient.events.addPromotion(data)
.then(result => {
should.exist(result);
Expand Down
Loading

0 comments on commit 4613852

Please sign in to comment.