Skip to content

Commit 2c1071d

Browse files
committed
retrieveUpcoming on Invoice can now take one hash as parameter
1 parent 0d40b87 commit 2c1071d

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

lib/resources/Invoices.js

+19-6
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,29 @@ module.exports = StripeResource.extend({
3636
retrieveUpcoming: stripeMethod({
3737
method: 'GET',
3838
path: function(urlData) {
39-
var url = 'upcoming?customer=' + urlData.customerId;
39+
var url = 'upcoming?';
40+
var hasParam = false;
41+
42+
// If you pass just a hash with the relevant parameters, including customer id inside.
43+
if (urlData.invoiceOptionsOrCustomerId && typeof urlData.invoiceOptionsOrCustomerId === 'object') {
44+
return url + utils.stringifyRequestData(urlData.invoiceOptionsOrCustomerId);
45+
}
46+
47+
// Legacy implementation where the first parameter is a customer id as a string
48+
if (urlData.invoiceOptionsOrCustomerId && typeof urlData.invoiceOptionsOrCustomerId === 'string') {
49+
url = url + 'customer=' + urlData.invoiceOptionsOrCustomerId;
50+
hasParam = true;
51+
}
52+
4053
// Legacy support where second argument is the subscription id
41-
if (urlData.invoiceOptions && typeof urlData.invoiceOptions === 'string') {
42-
return url + '&subscription=' + urlData.invoiceOptions;
43-
} else if (urlData.invoiceOptions && typeof urlData.invoiceOptions === 'object') {
44-
return url + '&' + utils.stringifyRequestData(urlData.invoiceOptions);
54+
if (urlData.invoiceOptionsOrSubscriptionId && typeof urlData.invoiceOptionsOrSubscriptionId === 'string') {
55+
return url + (hasParam ? '&' : '') + 'subscription=' + urlData.invoiceOptionsOrSubscriptionId;
56+
} else if (urlData.invoiceOptionsOrSubscriptionId && typeof urlData.invoiceOptionsOrSubscriptionId === 'object') {
57+
return url + (hasParam ? '&' : '') + utils.stringifyRequestData(urlData.invoiceOptionsOrSubscriptionId);
4558
}
4659
return url;
4760
},
48-
urlParams: ['customerId', 'optional!invoiceOptions'],
61+
urlParams: ['optional!invoiceOptionsOrCustomerId', 'optional!invoiceOptionsOrSubscriptionId'],
4962
}),
5063

5164
sendInvoice: stripeMethod({

test/resources/Invoices.spec.js

+20
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,26 @@ describe('Invoices Resource', function() {
120120
});
121121
});
122122

123+
describe('Without a customer id but options', function() {
124+
it('Sends the correct request', function() {
125+
stripe.invoices.retrieveUpcoming({
126+
customer: 'cus_abc',
127+
subscription_items: [
128+
{plan: 'potato'},
129+
{plan: 'rutabaga'},
130+
],
131+
});
132+
133+
expect(stripe.LAST_REQUEST).to.deep.equal({
134+
method: 'GET',
135+
url: '/v1/invoices/upcoming?customer=cus_abc&' +
136+
'subscription_items[0][plan]=potato&subscription_items[1][plan]=rutabaga',
137+
headers: {},
138+
data: {},
139+
});
140+
});
141+
});
142+
123143
describe('With an options object that includes `subscription_items` in addition to a subscription ID', function() {
124144
it('Sends the correct request', function() {
125145
stripe.invoices.retrieveUpcoming('cus_123', 'sub_123',

0 commit comments

Comments
 (0)