UNPKG

drip-nodejs

Version:

A complete NodeJS wrapper for connecting to the Drip v2 REST API

190 lines (163 loc) 5.59 kB
const sinon = require('sinon'); const client = require('../../lib/index')({ token: 'abc123', accountId: 9999999 }); const MissingAttributeError = require('../../lib/errors'); describe('Shopper Activity', () => { const payload = { provider: 'my_custom_platform', email: 'user@gmail.com', action: 'created', cart_id: '456445746', occurred_at: '2019-01-17T20:50:00Z', cart_public_id: '#5', grand_total: 16.99, total_discounts: 5.34, currency: 'USD', cart_url: 'https://mysuperstore.com/cart/456445746', items: [ { product_id: 'B01J4SWO1G', product_variant_id: 'B01J4SWO1G-CW-BOTT', sku: 'XHB-1234', name: 'The Coolest Water Bottle', brand: 'Drip', categories: [ 'Accessories' ], price: 11.16, quantity: 2, discounts: 5.34, total: 16.99, product_url: 'https://mysuperstore.com/dp/B01J4SWO1G', image_url: 'https://www.getdrip.com/images/example_products/water_bottle.png', product_tag: 'Best Seller' } ] }; beforeEach(() => { sinon.stub(client, 'request') .yields(null, { statusCode: 202 }, { events: {} }); }); afterEach(() => { client.request.restore(); }); it('should raise an error if required fields are missing', (done) => { expect(() => { client.createUpdateCartActivity({}, () => {}); }).toThrow(new MissingAttributeError('Fields: provider,action,cart_id,cart_url should all be present')); done(); }); it('should create a cart activity and call request with POST', (done) => { expect(typeof client.createUpdateCartActivity).toEqual('function'); client.createUpdateCartActivity(payload, (_, response) => { expect(response.statusCode).toBe(202); expect(client.request.callCount).toBe(1); }); done(); }); it('should create an order activity and call request with POST', (done) => { expect(typeof client.createUpdateOrderActivity).toEqual('function'); payload.order_id = '1234'; client.createUpdateOrderActivity(payload, (_, response) => { expect(response.statusCode).toBe(202); expect(client.request.callCount).toBe(1); }); done(); }); it('should create a product activity and call request with POST', (done) => { expect(typeof client.createUpdateProductActivity).toEqual('function'); payload.product_variant_id = 'ABC123'; payload.product_id = 'XYZ321'; payload.price = 90; payload.name = 'Shirt'; client.createUpdateProductActivity(payload, (_, response) => { expect(response.statusCode).toBe(202); expect(client.request.callCount).toBe(1); }); done(); }); }); describe('Shopper Activity with Promise', () => { const payload = { provider: 'my_custom_platform', email: 'user@gmail.com', action: 'created', cart_id: '456445746', occurred_at: '2019-01-17T20:50:00Z', cart_public_id: '#5', grand_total: 16.99, total_discounts: 5.34, currency: 'USD', cart_url: 'https://mysuperstore.com/cart/456445746', items: [ { product_id: 'B01J4SWO1G', product_variant_id: 'B01J4SWO1G-CW-BOTT', sku: 'XHB-1234', name: 'The Coolest Water Bottle', brand: 'Drip', categories: [ 'Accessories' ], price: 11.16, quantity: 2, discounts: 5.34, total: 16.99, product_url: 'https://mysuperstore.com/dp/B01J4SWO1G', image_url: 'https://www.getdrip.com/images/example_products/water_bottle.png', product_tag: 'Best Seller' } ] }; const expectedResponse = { statusCode: 202, data: {} }; const failTest = (error) => { expect(error).toBeUndefined(); }; beforeEach(() => { sinon.stub(client, 'request').resolves(expectedResponse); spyOn(client, 'post').and.callThrough(); }); afterEach(() => { client.request.restore(); }); it('should create a cart activity and call request with POST', (done) => { expect(typeof client.createUpdateCartActivity).toEqual('function'); client.createUpdateCartActivity(payload) .then((response) => { expect(response.statusCode).toBe(202); expect(client.request.callCount).toBe(1); }) .catch(failTest); done(); expect(client.post).toHaveBeenCalledWith('v3/9999999/shopper_activity/cart', payload, undefined); }); it('should create an order activity and call request with POST', (done) => { expect(typeof client.createUpdateOrderActivity).toEqual('function'); payload.order_id = '1234'; client.createUpdateOrderActivity(payload) .then((response) => { expect(response.statusCode).toBe(202); expect(client.request.callCount).toBe(1); }) .catch(failTest); done(); expect(client.post).toHaveBeenCalledWith('v3/9999999/shopper_activity/order', payload, undefined); }); it('should create a product activity and call request with POST', (done) => { expect(typeof client.createUpdateProductActivity).toEqual('function'); payload.product_variant_id = 'ABC123'; payload.product_id = 'XYZ321'; payload.price = 90; payload.name = 'Shirt'; client.createUpdateProductActivity(payload) .then((response) => { expect(response.statusCode).toBe(202); expect(client.request.callCount).toBe(1); }) .catch(failTest); done(); expect(client.post).toHaveBeenCalledWith('v3/9999999/shopper_activity/product', payload, undefined); }); });