diff --git a/lib/resources/ApplicationFeeRefunds.js b/lib/resources/ApplicationFeeRefunds.js new file mode 100644 index 0000000000..68d92045be --- /dev/null +++ b/lib/resources/ApplicationFeeRefunds.js @@ -0,0 +1,21 @@ +'use strict'; + +const StripeResource = require('../StripeResource'); + +/** + * ApplicationFeeRefunds is a unique resource in that, upon instantiation, + * requires an application fee id , and therefore each of its methods only + * require the refundId argument. + * + * This streamlines the API specifically for the case of accessing refunds + * on a returned application fee object. + * + * E.g. applicationFeeObject.refunds.retrieve(refundId) + * (As opposed to the also-supported stripe.applicationFees.retrieveRefund(chargeId, + * refundId)) + */ +module.exports = StripeResource.extend({ + path: 'application_fees/{feeId}/refunds', + + includeBasic: ['create', 'list', 'retrieve', 'update'], +}); diff --git a/lib/resources/LoginLinks.js b/lib/resources/LoginLinks.js new file mode 100644 index 0000000000..842a447ddb --- /dev/null +++ b/lib/resources/LoginLinks.js @@ -0,0 +1,9 @@ +'use strict'; + +const StripeResource = require('../StripeResource'); + +module.exports = StripeResource.extend({ + path: 'accounts/{accountId}/login_links', + + includeBasic: ['create'], +}); diff --git a/lib/resources/Persons.js b/lib/resources/Persons.js new file mode 100644 index 0000000000..921561ea64 --- /dev/null +++ b/lib/resources/Persons.js @@ -0,0 +1,9 @@ +'use strict'; + +const StripeResource = require('../StripeResource'); + +module.exports = StripeResource.extend({ + path: 'accounts/{accountId}/persons', + + includeBasic: ['create', 'del', 'list', 'retrieve', 'update'], +}); diff --git a/lib/resources/SubscriptionScheduleRevisions.js b/lib/resources/SubscriptionScheduleRevisions.js new file mode 100644 index 0000000000..7748b9a721 --- /dev/null +++ b/lib/resources/SubscriptionScheduleRevisions.js @@ -0,0 +1,9 @@ +'use strict'; + +const StripeResource = require('../StripeResource'); + +module.exports = StripeResource.extend({ + path: 'subscription_schedules/{scheduleId}/revisions', + + includeBasic: ['list', 'retrieve'], +}); diff --git a/lib/resources/TaxIds.js b/lib/resources/TaxIds.js new file mode 100644 index 0000000000..7cc865bd87 --- /dev/null +++ b/lib/resources/TaxIds.js @@ -0,0 +1,9 @@ +'use strict'; + +const StripeResource = require('../StripeResource'); + +module.exports = StripeResource.extend({ + path: 'customers/{customerId}/tax_ids', + + includeBasic: ['create', 'del', 'list', 'retrieve'], +}); diff --git a/lib/resources/TransferReversals.js b/lib/resources/TransferReversals.js new file mode 100644 index 0000000000..207b653491 --- /dev/null +++ b/lib/resources/TransferReversals.js @@ -0,0 +1,9 @@ +'use strict'; + +const StripeResource = require('../StripeResource'); + +module.exports = StripeResource.extend({ + path: 'transfers/{transferId}/reversals', + + includeBasic: ['create', 'list', 'retrieve', 'update'], +}); diff --git a/lib/stripe.js b/lib/stripe.js index 99777370ef..4250054163 100644 --- a/lib/stripe.js +++ b/lib/stripe.js @@ -55,6 +55,7 @@ const resources = { InvoiceItems: require('./resources/InvoiceItems'), Invoices: require('./resources/Invoices'), IssuerFraudRecords: require('./resources/IssuerFraudRecords'), + LoginLinks: require('./resources/LoginLinks'), OAuth: require('./resources/OAuth'), OrderReturns: require('./resources/OrderReturns'), Orders: require('./resources/Orders'), @@ -80,6 +81,13 @@ const resources = { UsageRecordSummaries: require('./resources/UsageRecordSummaries'), WebhookEndpoints: require('./resources/WebhookEndpoints'), + // The following rely on pre-filled IDs: + ApplicationFeeRefunds: require('./resources/ApplicationFeeRefunds'), + Persons: require('./resources/Persons'), + SubscriptionScheduleRevisions: require('./resources/SubscriptionScheduleRevisions'), + TaxIds: require('./resources/TaxIds'), + TransferReversals: require('./resources/TransferReversals'), + // Namespaced resources Checkout: resourceNamespace('checkout', { Sessions: require('./resources/Checkout/Sessions'), diff --git a/test/resources/ApplicationFeeRefunds.spec.js b/test/resources/ApplicationFeeRefunds.spec.js new file mode 100644 index 0000000000..75be78aa2e --- /dev/null +++ b/test/resources/ApplicationFeeRefunds.spec.js @@ -0,0 +1,56 @@ +'use strict'; + +const resources = require('../../lib/stripe').resources; +const stripe = require('../../testUtils').getSpyableStripe(); +const expect = require('chai').expect; + +const APPFEE_TEST_ID = 'appFeeIdTest999'; +const REFUND_TEST_ID = 'refundIdTest999'; + +// Create new CustomerCard instance with pre-filled customerId: +const appFeeRefund = new resources.ApplicationFeeRefunds(stripe, { + feeId: APPFEE_TEST_ID, +}); + +// Use spy from existing resource: +appFeeRefund._request = stripe.customers._request; + +describe('ApplicationFeeRefund Resource', () => { + describe('retrieve', () => { + it('Sends the correct request', () => { + appFeeRefund.retrieve(REFUND_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/application_fees/${APPFEE_TEST_ID}/refunds/${REFUND_TEST_ID}`, + data: {}, + headers: {}, + }); + }); + }); + + describe('update', () => { + it('Sends the correct request', () => { + appFeeRefund.update(REFUND_TEST_ID, { + metadata: {key: 'value'}, + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: `/v1/application_fees/${APPFEE_TEST_ID}/refunds/${REFUND_TEST_ID}`, + data: {metadata: {key: 'value'}}, + headers: {}, + }); + }); + }); + + describe('list', () => { + it('Sends the correct request', () => { + appFeeRefund.list(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/application_fees/${APPFEE_TEST_ID}/refunds`, + data: {}, + headers: {}, + }); + }); + }); +}); diff --git a/test/resources/LoginLinks.spec.js b/test/resources/LoginLinks.spec.js new file mode 100644 index 0000000000..f8c6c36183 --- /dev/null +++ b/test/resources/LoginLinks.spec.js @@ -0,0 +1,27 @@ +'use strict'; + +const resources = require('../../lib/stripe').resources; +const stripe = require('../../testUtils').getSpyableStripe(); +const expect = require('chai').expect; + +const ACCOUNT_ID = 'acct_EXPRESS'; + +// Create new LoginLink instance with pre-filled accountId: +const loginLink = new resources.LoginLinks(stripe, {accountId: ACCOUNT_ID}); + +// Use spy from existing resource: +loginLink._request = stripe.customers._request; + +describe('LoginLink Resource', () => { + describe('create', () => { + it('Sends the correct request', () => { + loginLink.create(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: `/v1/accounts/${ACCOUNT_ID}/login_links`, + headers: {}, + data: {}, + }); + }); + }); +}); diff --git a/test/resources/Persons.spec.js b/test/resources/Persons.spec.js new file mode 100644 index 0000000000..0b199f6715 --- /dev/null +++ b/test/resources/Persons.spec.js @@ -0,0 +1,80 @@ +'use strict'; + +const resources = require('../../lib/stripe').resources; +const stripe = require('../../testUtils').getSpyableStripe(); +const expect = require('chai').expect; + +const ACCOUNT_TEST_ID = 'acct_123'; +const PERSON_TEST_ID = 'person_123'; + +// Create new Person instance with pre-filled accountId: +const person = new resources.Persons(stripe, {accountId: ACCOUNT_TEST_ID}); + +// Use spy from existing resource: +person._request = stripe.customers._request; + +describe('Person Resource', () => { + describe('create', () => { + it('Sends the correct request', () => { + 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', () => { + it('Sends the correct request', () => { + 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', () => { + it('Sends the correct request', () => { + person.list(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/accounts/${ACCOUNT_TEST_ID}/persons`, + data: {}, + headers: {}, + }); + }); + }); + + describe('retrieve', () => { + it('Sends the correct request', () => { + 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', () => { + it('Sends the correct request', () => { + 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: {}, + }); + }); + }); +}); diff --git a/test/resources/SubscriptionScheduleRevision.spec.js b/test/resources/SubscriptionScheduleRevision.spec.js new file mode 100644 index 0000000000..4c15320d7a --- /dev/null +++ b/test/resources/SubscriptionScheduleRevision.spec.js @@ -0,0 +1,42 @@ +'use strict'; + +const resources = require('../../lib/stripe').resources; +const stripe = require('../../testUtils').getSpyableStripe(); +const expect = require('chai').expect; + +const SCHEDULE_TEST_ID = 'sub_sched_123'; +const REVISION_TEST_ID = 'sub_sched_rev_123'; + +// Create new SubscriptionScheduleRevision instance with pre-filled scheduleId: +const revision = new resources.SubscriptionScheduleRevisions(stripe, { + scheduleId: SCHEDULE_TEST_ID, +}); + +// Use spy from existing resource: +revision._request = stripe.customers._request; + +describe('SubscriptionScheduleRevision Resource', () => { + describe('list', () => { + it('Sends the correct request', () => { + revision.list(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/subscription_schedules/${SCHEDULE_TEST_ID}/revisions`, + data: {}, + headers: {}, + }); + }); + }); + + describe('retrieve', () => { + it('Sends the correct request', () => { + revision.retrieve(REVISION_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/subscription_schedules/${SCHEDULE_TEST_ID}/revisions/${REVISION_TEST_ID}`, + data: {}, + headers: {}, + }); + }); + }); +}); diff --git a/test/resources/TaxIds.spec.js b/test/resources/TaxIds.spec.js new file mode 100644 index 0000000000..fda30f9faa --- /dev/null +++ b/test/resources/TaxIds.spec.js @@ -0,0 +1,67 @@ +'use strict'; + +const resources = require('../../lib/stripe').resources; +const stripe = require('../../testUtils').getSpyableStripe(); +const expect = require('chai').expect; + +const CUSTOMER_TEST_ID = 'cus_123'; +const TAX_ID_TEST_ID = 'txi_123'; + +const taxId = new resources.TaxIds(stripe, {customerId: CUSTOMER_TEST_ID}); + +// Use spy from existing resource: +taxId._request = stripe.customers._request; + +describe('TaxId Resource', () => { + describe('create', () => { + it('Sends the correct request', () => { + const data = { + type: 'eu_vat', + value: '11111', + }; + taxId.create(data); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: `/v1/customers/${CUSTOMER_TEST_ID}/tax_ids`, + data, + headers: {}, + }); + }); + }); + + describe('delete', () => { + it('Sends the correct request', () => { + taxId.del(TAX_ID_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'DELETE', + url: `/v1/customers/${CUSTOMER_TEST_ID}/tax_ids/${TAX_ID_TEST_ID}`, + data: {}, + headers: {}, + }); + }); + }); + + describe('list', () => { + it('Sends the correct request', () => { + taxId.list(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/customers/${CUSTOMER_TEST_ID}/tax_ids`, + data: {}, + headers: {}, + }); + }); + }); + + describe('retrieve', () => { + it('Sends the correct request', () => { + taxId.retrieve(TAX_ID_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/customers/${CUSTOMER_TEST_ID}/tax_ids/${TAX_ID_TEST_ID}`, + data: {}, + headers: {}, + }); + }); + }); +}); diff --git a/test/resources/TransferReversals.spec.js b/test/resources/TransferReversals.spec.js new file mode 100644 index 0000000000..3b0c9e67fb --- /dev/null +++ b/test/resources/TransferReversals.spec.js @@ -0,0 +1,70 @@ +'use strict'; + +const resources = require('../../lib/stripe').resources; +const stripe = require('../../testUtils').getSpyableStripe(); +const expect = require('chai').expect; + +const TRANSFER_TEST_ID = 'transferIdTest999'; +const REVERSAL_TEST_ID = 'reversalIdTest999'; + +// Create new CustomerCard instance with pre-filled customerId: +const transferReversal = new resources.TransferReversals(stripe, { + transferId: TRANSFER_TEST_ID, +}); + +// Use spy from existing resource: +transferReversal._request = stripe.customers._request; + +describe('TransferReversal Resource', () => { + describe('retrieve', () => { + it('Sends the correct request', () => { + transferReversal.retrieve(REVERSAL_TEST_ID); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/transfers/${TRANSFER_TEST_ID}/reversals/${REVERSAL_TEST_ID}`, + data: {}, + headers: {}, + }); + }); + }); + + describe('create', () => { + it('Sends the correct request', () => { + transferReversal.create({ + amount: 100, + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: `/v1/transfers/${TRANSFER_TEST_ID}/reversals`, + data: {amount: 100}, + headers: {}, + }); + }); + }); + + describe('update', () => { + it('Sends the correct request', () => { + transferReversal.update(REVERSAL_TEST_ID, { + metadata: {key: 'value'}, + }); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'POST', + url: `/v1/transfers/${TRANSFER_TEST_ID}/reversals/${REVERSAL_TEST_ID}`, + data: {metadata: {key: 'value'}}, + headers: {}, + }); + }); + }); + + describe('list', () => { + it('Sends the correct request', () => { + transferReversal.list(); + expect(stripe.LAST_REQUEST).to.deep.equal({ + method: 'GET', + url: `/v1/transfers/${TRANSFER_TEST_ID}/reversals`, + data: {}, + headers: {}, + }); + }); + }); +});