From 0c491a2c6363fd72ac1154a3831da5429b0ecd64 Mon Sep 17 00:00:00 2001 From: Remi Jannel Date: Fri, 12 Oct 2018 12:30:17 -0700 Subject: [PATCH] Add support for the Person resource --- lib/resources/Accounts.js | 35 +++++++++ lib/resources/Persons.js | 21 ++++++ lib/stripe.js | 1 + test/resources/Account.spec.js | 125 +++++++++++++++++++++++++++++++++ test/resources/Persons.spec.js | 84 ++++++++++++++++++++++ 5 files changed, 266 insertions(+) create mode 100644 lib/resources/Persons.js create mode 100644 test/resources/Persons.spec.js diff --git a/lib/resources/Accounts.js b/lib/resources/Accounts.js index 4df676e0c9..2dfd46d571 100644 --- a/lib/resources/Accounts.js +++ b/lib/resources/Accounts.js @@ -101,4 +101,39 @@ module.exports = StripeResource.extend({ path: 'accounts/{accountId}/login_links', urlParams: ['accountId'], }), + + /** + * Accounts: Person methods + */ + + createPerson: stripeMethod({ + method: 'POST', + path: 'accounts/{accountId}/persons', + urlParams: ['accountId'], + }), + + listPersons: stripeMethod({ + method: 'GET', + path: 'accounts/{accountId}/persons', + urlParams: ['accountId'], + methodType: 'list', + }), + + retrievePerson: stripeMethod({ + method: 'GET', + path: 'accounts/{accountId}/persons/{personId}', + urlParams: ['accountId', 'personId'], + }), + + updatePerson: stripeMethod({ + method: 'POST', + path: 'accounts/{accountId}/persons/{personId}', + urlParams: ['accountId', 'personId'], + }), + + deletePerson: stripeMethod({ + method: 'DELETE', + path: 'accounts/{accountId}/persons/{personId}', + urlParams: ['accountId', 'personId'], + }), }); diff --git a/lib/resources/Persons.js b/lib/resources/Persons.js new file mode 100644 index 0000000000..605bd24b48 --- /dev/null +++ b/lib/resources/Persons.js @@ -0,0 +1,21 @@ +'use strict'; + +var StripeResource = require('../StripeResource'); + +/** + * Persons is a unique resource in that, upon instantiation, + * requires an accountId, and therefore each of its methods only + * require the personId argument. + * + * This streamlines the API specifically for the case of accessing person + * on a returned transfer object. + * + * E.g. accountObject.person.retrieve(personId) + * (As opposed to the also-supported stripe.accounts.retrievePerson(accountId, + * personId)) + */ +module.exports = StripeResource.extend({ + path: 'accounts/{accountId}/persons', + includeBasic: ['create', 'del', 'list', 'retrieve', 'update'], +}); + diff --git a/lib/stripe.js b/lib/stripe.js index 30460f91ec..454c970b16 100644 --- a/lib/stripe.js +++ b/lib/stripe.js @@ -75,6 +75,7 @@ var resources = { ChargeRefunds: require('./resources/ChargeRefunds'), CustomerCards: require('./resources/CustomerCards'), CustomerSubscriptions: require('./resources/CustomerSubscriptions'), + Persons: require('./resources/Persons'), TransferReversals: require('./resources/TransferReversals'), // Namespaced resources diff --git a/test/resources/Account.spec.js b/test/resources/Account.spec.js index adeb7cf118..378aa433b3 100644 --- a/test/resources/Account.spec.js +++ b/test/resources/Account.spec.js @@ -231,4 +231,129 @@ describe('Account Resource', function() { }); }); }); + + describe('Person methods', function() { + describe('retrievePerson', function() { + it('Sends the correct request', function() { + stripe.account.retrievePerson('acct_123', 'person_123'); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: '/v1/accounts/acct_123/persons/person_123', + headers: {}, + data: {}, + }); + }); + + it('Sends the correct request [with specified auth]', function() { + stripe.account.retrievePerson('acct_123', 'person_123', TEST_AUTH_KEY); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: '/v1/accounts/acct_123/persons/person_123', + headers: {}, + data: {}, + auth: TEST_AUTH_KEY, + }); + }); + }); + + describe('createPerson', function() { + it('Sends the correct request', function() { + stripe.account.createPerson('acct_123', { + first_name: 'John', + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: '/v1/accounts/acct_123/persons', + headers: {}, + data: {first_name: 'John'}, + }); + }); + + it('Sends the correct request [with specified auth]', function() { + stripe.account.createPerson('acct_123', { + first_name: 'John', + }, TEST_AUTH_KEY); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: '/v1/accounts/acct_123/persons', + headers: {}, + data: {first_name: 'John'}, + auth: TEST_AUTH_KEY, + }); + }); + }); + + describe('updatePerson', function() { + it('Sends the correct request', function() { + stripe.account.updatePerson('acct_123', 'person_123', { + first_name: 'John', + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: '/v1/accounts/acct_123/persons/person_123', + headers: {}, + data: {first_name: 'John'}, + }); + }); + + it('Sends the correct request [with specified auth]', function() { + stripe.account.updatePerson('acct_123', 'person_123', { + first_name: 'John', + }, TEST_AUTH_KEY); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: '/v1/accounts/acct_123/persons/person_123', + headers: {}, + data: {first_name: 'John'}, + auth: TEST_AUTH_KEY, + }); + }); + }); + + describe('deletePerson', function() { + it('Sends the correct request', function() { + stripe.account.deletePerson('acct_123', 'person_123'); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'DELETE', + url: '/v1/accounts/acct_123/persons/person_123', + headers: {}, + data: {}, + }); + }); + + it('Sends the correct request [with specified auth]', function() { + stripe.account.deletePerson('acct_123', 'person_123', TEST_AUTH_KEY); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'DELETE', + url: '/v1/accounts/acct_123/persons/person_123', + headers: {}, + data: {}, + auth: TEST_AUTH_KEY, + }); + }); + }); + + describe('listPersons', function() { + it('Sends the correct request', function() { + stripe.account.listPersons('acct_123'); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: '/v1/accounts/acct_123/persons', + headers: {}, + data: {}, + }); + }); + + it('Sends the correct request [with specified auth]', function() { + stripe.account.listPersons('acct_123', TEST_AUTH_KEY); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: '/v1/accounts/acct_123/persons', + headers: {}, + data: {}, + auth: TEST_AUTH_KEY, + }); + }); + }); + }); }); diff --git a/test/resources/Persons.spec.js b/test/resources/Persons.spec.js new file mode 100644 index 0000000000..0a355d0ad8 --- /dev/null +++ b/test/resources/Persons.spec.js @@ -0,0 +1,84 @@ +'use strict'; + +var resources = require('../../lib/stripe').resources; +var stripe = require('../../testUtils').getSpyableStripe(); +var expect = require('chai').expect; + +var ACCOUNT_TEST_ID = 'acct_123'; +var PERSON_TEST_ID = 'person_123'; + +// Create new Person instance with pre-filled accountId: +var person = new resources.Persons( + stripe, + {accountId: ACCOUNT_TEST_ID} +); + +// Use spy from existing resource: +person._request = stripe.customers._request; + +describe('Person Resource', function() { + describe('create', function() { + it('Sends the correct request', function() { + person.create({ + first_name: 'John', + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: '/v1/accounts/' + ACCOUNT_TEST_ID + '/persons', + data: {first_name: 'John'}, + headers: {}, + }); + }); + }); + + describe('delete', function() { + it('Sends the correct request', function() { + person.del(PERSON_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'DELETE', + url: '/v1/accounts/' + ACCOUNT_TEST_ID + '/persons/' + PERSON_TEST_ID, + data: {}, + headers: {}, + }); + }); + }); + + describe('list', function() { + it('Sends the correct request', function() { + person.list(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: '/v1/accounts/' + ACCOUNT_TEST_ID + '/persons', + data: {}, + headers: {}, + }); + }); + }); + + describe('retrieve', function() { + it('Sends the correct request', function() { + person.retrieve(PERSON_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: '/v1/accounts/' + ACCOUNT_TEST_ID + '/persons/' + PERSON_TEST_ID, + data: {}, + headers: {}, + }); + }); + }); + + describe('update', function() { + it('Sends the correct request', function() { + person.update(PERSON_TEST_ID, { + first_name: 'John', + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: '/v1/accounts/' + ACCOUNT_TEST_ID + '/persons/' + PERSON_TEST_ID, + data: {first_name: 'John'}, + headers: {}, + }); + }); + }); +}); +