From 65d731577036550c3fb23af7e54c9f5a76d46356 Mon Sep 17 00:00:00 2001 From: Michael Broshi Date: Wed, 18 Mar 2026 11:24:44 -0400 Subject: [PATCH 1/2] Add test --- .../CustomerServiceSerializeBatchTest.java | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/test/java/com/stripe/service/CustomerServiceSerializeBatchTest.java diff --git a/src/test/java/com/stripe/service/CustomerServiceSerializeBatchTest.java b/src/test/java/com/stripe/service/CustomerServiceSerializeBatchTest.java new file mode 100644 index 00000000000..a5c1510241a --- /dev/null +++ b/src/test/java/com/stripe/service/CustomerServiceSerializeBatchTest.java @@ -0,0 +1,161 @@ +package com.stripe.service; + +import static org.junit.jupiter.api.Assertions.*; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.stripe.BaseStripeTest; +import com.stripe.Stripe; +import com.stripe.exception.StripeException; +import com.stripe.net.RequestOptions; +import com.stripe.param.CustomerUpdateParams; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import org.junit.jupiter.api.Test; + +/** + * Tests for {@link CustomerService#serializeBatchUpdate} which serializes customer update requests + * into JSONL lines for batch job uploads. + * + *

These tests don't make HTTP calls — they only exercise the local serialization logic. We + * extend BaseStripeTest because CustomerService requires a StripeResponseGetter to be instantiated. + */ +public class CustomerServiceSerializeBatchTest extends BaseStripeTest { + + private CustomerService service() { + return mockClient.customers(); + } + + @Test + public void testSerializeBatchUpdate_basicStructure() throws StripeException { + CustomerUpdateParams params = + CustomerUpdateParams.builder().setDescription("test customer").build(); + + String json = service().serializeBatchUpdate("cus_123", params); + JsonObject obj = JsonParser.parseString(json).getAsJsonObject(); + + // id is a valid UUID + String id = obj.get("id").getAsString(); + assertDoesNotThrow(() -> UUID.fromString(id), "id should be a valid UUID"); + + // path_params + JsonObject pathParams = obj.getAsJsonObject("path_params"); + assertEquals("cus_123", pathParams.get("customer").getAsString()); + + // params contains the description + JsonObject paramsObj = obj.getAsJsonObject("params"); + assertEquals("test customer", paramsObj.get("description").getAsString()); + + // stripe_version equals the global API version + assertEquals(Stripe.API_VERSION, obj.get("stripe_version").getAsString()); + + // context key is absent (not null — absent entirely) + assertFalse(obj.has("context"), "context should be absent when no stripeContext is set"); + + // Key ordering preserved by LinkedHashMap: id, path_params, params, stripe_version + List keys = new ArrayList<>(obj.keySet()); + assertEquals("id", keys.get(0)); + assertEquals("path_params", keys.get(1)); + assertEquals("params", keys.get(2)); + assertEquals("stripe_version", keys.get(3)); + assertEquals(4, keys.size()); + } + + @Test + public void testSerializeBatchUpdate_uniqueIds() throws StripeException { + CustomerUpdateParams params = CustomerUpdateParams.builder().setDescription("test").build(); + + String json1 = service().serializeBatchUpdate("cus_123", params); + String json2 = service().serializeBatchUpdate("cus_123", params); + + JsonObject obj1 = JsonParser.parseString(json1).getAsJsonObject(); + JsonObject obj2 = JsonParser.parseString(json2).getAsJsonObject(); + + assertNotEquals( + obj1.get("id").getAsString(), + obj2.get("id").getAsString(), + "Each call should generate a unique id"); + } + + @Test + public void testSerializeBatchUpdate_requestOptionsVersionAlwaysGlobal() throws StripeException { + // RequestOptions.getStripeVersion() is initialized to + // Stripe.getStripeVersionWithBetaHeaders() at field declaration time and has no setter. + // So passing any RequestOptions — even with just stripeContext set — will still produce + // Stripe.API_VERSION as the stripe_version in the output. + CustomerUpdateParams params = CustomerUpdateParams.builder().setDescription("test").build(); + RequestOptions options = RequestOptions.builder().setStripeContext("acct_456").build(); + + String json = service().serializeBatchUpdate("cus_123", params, options); + JsonObject obj = JsonParser.parseString(json).getAsJsonObject(); + + assertEquals( + Stripe.API_VERSION, + obj.get("stripe_version").getAsString(), + "stripe_version should be the global API version regardless of RequestOptions"); + } + + @Test + public void testSerializeBatchUpdate_withStripeContext() throws StripeException { + CustomerUpdateParams params = CustomerUpdateParams.builder().setDescription("test").build(); + RequestOptions options = RequestOptions.builder().setStripeContext("acct_123").build(); + + String json = service().serializeBatchUpdate("cus_123", params, options); + JsonObject obj = JsonParser.parseString(json).getAsJsonObject(); + + assertTrue(obj.has("context"), "context should be present when stripeContext is set"); + assertEquals("acct_123", obj.get("context").getAsString()); + } + + @Test + public void testSerializeBatchUpdate_nullParams() throws StripeException { + String json = service().serializeBatchUpdate("cus_123", null); + JsonObject obj = JsonParser.parseString(json).getAsJsonObject(); + + // ApiResource.GSON omits null Map values, so the "params" key is absent. + // Note: this means the backend must tolerate a missing "params" field for null-param calls. + assertFalse(obj.has("params"), "params key should be absent (GSON omits null map values)"); + + // Other fields should still be correct + assertDoesNotThrow(() -> UUID.fromString(obj.get("id").getAsString())); + assertEquals("cus_123", obj.getAsJsonObject("path_params").get("customer").getAsString()); + assertEquals(Stripe.API_VERSION, obj.get("stripe_version").getAsString()); + } + + @Test + public void testSerializeBatchUpdate_withMetadata() throws StripeException { + CustomerUpdateParams params = + CustomerUpdateParams.builder() + .putMetadata("key1", "value1") + .putMetadata("key2", "value2") + .build(); + + String json = service().serializeBatchUpdate("cus_123", params); + JsonObject obj = JsonParser.parseString(json).getAsJsonObject(); + + JsonObject paramsObj = obj.getAsJsonObject("params"); + assertNotNull(paramsObj, "params should not be null"); + JsonObject metadata = paramsObj.getAsJsonObject("metadata"); + assertNotNull(metadata, "metadata should be a nested JSON object"); + assertEquals("value1", metadata.get("key1").getAsString()); + assertEquals("value2", metadata.get("key2").getAsString()); + } + + @Test + public void testSerializeBatchUpdate_twoArgDelegatesToThreeArg() throws StripeException { + // The two-arg overload calls three-arg with null options. + // Verify the output structure matches three-arg with null options. + CustomerUpdateParams params = + CustomerUpdateParams.builder().setDescription("delegate test").build(); + + String json = service().serializeBatchUpdate("cus_123", params); + JsonObject obj = JsonParser.parseString(json).getAsJsonObject(); + + // stripe_version should be Stripe.API_VERSION (null options falls through to default) + assertEquals(Stripe.API_VERSION, obj.get("stripe_version").getAsString()); + + // context should be absent (null options means no stripeContext) + assertFalse(obj.has("context"), "context should be absent when options is null"); + } +} From 70ab6165aff7ed2b3f074e1ea70a29fc48b9cf7a Mon Sep 17 00:00:00 2001 From: Michael Broshi Date: Thu, 19 Mar 2026 09:26:29 -0400 Subject: [PATCH 2/2] Add generated code --- .../param/v2/core/BatchJobCreateParams.java | 53 ++++++++++++-- .../com/stripe/service/AccountService.java | 25 +++++++ .../com/stripe/service/CreditNoteService.java | 21 ++++++ .../com/stripe/service/CustomerService.java | 25 +++++++ .../com/stripe/service/InvoiceService.java | 48 +++++++++++++ .../stripe/service/PromotionCodeService.java | 46 ++++++++++++ .../service/SubscriptionScheduleService.java | 72 +++++++++++++++++++ .../stripe/service/SubscriptionService.java | 51 +++++++++++++ .../stripe/functional/GeneratedExamples.java | 4 +- 9 files changed, 340 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/stripe/param/v2/core/BatchJobCreateParams.java b/src/main/java/com/stripe/param/v2/core/BatchJobCreateParams.java index 34c67d543af..518846968df 100644 --- a/src/main/java/com/stripe/param/v2/core/BatchJobCreateParams.java +++ b/src/main/java/com/stripe/param/v2/core/BatchJobCreateParams.java @@ -189,9 +189,9 @@ public static class Endpoint { * /v1/subscriptions/:id/migrate}. */ @SerializedName("path") - String path; + Path path; - private Endpoint(Map extraParams, HttpMethod httpMethod, String path) { + private Endpoint(Map extraParams, HttpMethod httpMethod, Path path) { this.extraParams = extraParams; this.httpMethod = httpMethod; this.path = path; @@ -206,7 +206,7 @@ public static class Builder { private HttpMethod httpMethod; - private String path; + private Path path; /** Finalize and obtain parameter instance from this builder. */ public BatchJobCreateParams.Endpoint build() { @@ -250,7 +250,7 @@ public Builder setHttpMethod(BatchJobCreateParams.Endpoint.HttpMethod httpMethod * form used in the documentation. For instance, for subscription migration this would be * {@code /v1/subscriptions/:id/migrate}. */ - public Builder setPath(String path) { + public Builder setPath(BatchJobCreateParams.Endpoint.Path path) { this.path = path; return this; } @@ -267,6 +267,51 @@ public enum HttpMethod implements ApiRequestParams.EnumParam { this.value = value; } } + + public enum Path implements ApiRequestParams.EnumParam { + @SerializedName("/v1/accounts/:account") + V1_ACCOUNT_UPDATE("/v1/accounts/:account"), + + @SerializedName("/v1/credit_notes") + V1_CREDIT_NOTE_CREATE("/v1/credit_notes"), + + @SerializedName("/v1/customers/:customer") + V1_CUSTOMER_UPDATE("/v1/customers/:customer"), + + @SerializedName("/v1/invoices/:invoice") + V1_INVOICE_UPDATE("/v1/invoices/:invoice"), + + @SerializedName("/v1/invoices/:invoice/pay") + V1_INVOICE_PAY("/v1/invoices/:invoice/pay"), + + @SerializedName("/v1/promotion_codes") + V1_PROMOTION_CODE_CREATE("/v1/promotion_codes"), + + @SerializedName("/v1/promotion_codes/:promotion_code") + V1_PROMOTION_CODE_UPDATE("/v1/promotion_codes/:promotion_code"), + + @SerializedName("/v1/subscriptions/:subscription_exposed_id") + V1_SUBSCRIPTION_UPDATE("/v1/subscriptions/:subscription_exposed_id"), + + @SerializedName("/v1/subscriptions/:subscription/migrate") + V1_SUBSCRIPTION_MIGRATE("/v1/subscriptions/:subscription/migrate"), + + @SerializedName("/v1/subscription_schedules") + V1_SUBSCRIPTION_SCHEDULE_CREATE("/v1/subscription_schedules"), + + @SerializedName("/v1/subscription_schedules/:schedule") + V1_SUBSCRIPTION_SCHEDULE_UPDATE("/v1/subscription_schedules/:schedule"), + + @SerializedName("/v1/subscription_schedules/:schedule/cancel") + V1_SUBSCRIPTION_SCHEDULE_CANCEL("/v1/subscription_schedules/:schedule/cancel"); + + @Getter(onMethod_ = {@Override}) + private final String value; + + Path(String value) { + this.value = value; + } + } } @Getter diff --git a/src/main/java/com/stripe/service/AccountService.java b/src/main/java/com/stripe/service/AccountService.java index fb2843acbde..80befd0edc0 100644 --- a/src/main/java/com/stripe/service/AccountService.java +++ b/src/main/java/com/stripe/service/AccountService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.Account; import com.stripe.model.StripeCollection; @@ -348,6 +349,30 @@ public Account reject(String account, AccountRejectParams params, RequestOptions options); return this.request(request, Account.class); } + /** Serializes a Account update request into a batch job JSONL line. */ + public String serializeBatchUpdate(String account, AccountUpdateParams params) + throws StripeException { + return serializeBatchUpdate(account, params, (RequestOptions) null); + } + /** Serializes a Account update request into a batch job JSONL line. */ + public String serializeBatchUpdate( + String account, AccountUpdateParams params, RequestOptions options) throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("account", account); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } public com.stripe.service.AccountCapabilityService capabilities() { return new com.stripe.service.AccountCapabilityService(this.getResponseGetter()); diff --git a/src/main/java/com/stripe/service/CreditNoteService.java b/src/main/java/com/stripe/service/CreditNoteService.java index f5dab955ab3..1314714f01e 100644 --- a/src/main/java/com/stripe/service/CreditNoteService.java +++ b/src/main/java/com/stripe/service/CreditNoteService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.CreditNote; import com.stripe.model.StripeCollection; @@ -220,6 +221,26 @@ public CreditNote voidCreditNote( options); return this.request(request, CreditNote.class); } + /** Serializes a CreditNote create request into a batch job JSONL line. */ + public String serializeBatchCreate(CreditNoteCreateParams params) throws StripeException { + return serializeBatchCreate(params, (RequestOptions) null); + } + /** Serializes a CreditNote create request into a batch job JSONL line. */ + public String serializeBatchCreate(CreditNoteCreateParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } public com.stripe.service.CreditNoteLineItemService lineItems() { return new com.stripe.service.CreditNoteLineItemService(this.getResponseGetter()); diff --git a/src/main/java/com/stripe/service/CustomerService.java b/src/main/java/com/stripe/service/CustomerService.java index 6d71cc14460..f378f30bb49 100644 --- a/src/main/java/com/stripe/service/CustomerService.java +++ b/src/main/java/com/stripe/service/CustomerService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.Customer; import com.stripe.model.Discount; @@ -248,6 +249,30 @@ public StripeSearchResult search(CustomerSearchParams params, RequestO options); return this.request(request, new TypeToken>() {}.getType()); } + /** Serializes a Customer update request into a batch job JSONL line. */ + public String serializeBatchUpdate(String customer, CustomerUpdateParams params) + throws StripeException { + return serializeBatchUpdate(customer, params, (RequestOptions) null); + } + /** Serializes a Customer update request into a batch job JSONL line. */ + public String serializeBatchUpdate( + String customer, CustomerUpdateParams params, RequestOptions options) throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("customer", customer); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } public com.stripe.service.CustomerBalanceTransactionService balanceTransactions() { return new com.stripe.service.CustomerBalanceTransactionService(this.getResponseGetter()); diff --git a/src/main/java/com/stripe/service/InvoiceService.java b/src/main/java/com/stripe/service/InvoiceService.java index 16a9b0dab23..8d75ccedd62 100644 --- a/src/main/java/com/stripe/service/InvoiceService.java +++ b/src/main/java/com/stripe/service/InvoiceService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.Invoice; import com.stripe.model.StripeCollection; @@ -806,6 +807,53 @@ public Invoice createPreview(InvoiceCreatePreviewParams params, RequestOptions o options); return this.request(request, Invoice.class); } + /** Serializes a Invoice update request into a batch job JSONL line. */ + public String serializeBatchUpdate(String invoice, InvoiceUpdateParams params) + throws StripeException { + return serializeBatchUpdate(invoice, params, (RequestOptions) null); + } + /** Serializes a Invoice update request into a batch job JSONL line. */ + public String serializeBatchUpdate( + String invoice, InvoiceUpdateParams params, RequestOptions options) throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("invoice", invoice); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } + /** Serializes a Invoice pay request into a batch job JSONL line. */ + public String serializeBatchPay(String invoice, InvoicePayParams params) throws StripeException { + return serializeBatchPay(invoice, params, (RequestOptions) null); + } + /** Serializes a Invoice pay request into a batch job JSONL line. */ + public String serializeBatchPay(String invoice, InvoicePayParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("invoice", invoice); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } public com.stripe.service.InvoiceLineItemService lineItems() { return new com.stripe.service.InvoiceLineItemService(this.getResponseGetter()); diff --git a/src/main/java/com/stripe/service/PromotionCodeService.java b/src/main/java/com/stripe/service/PromotionCodeService.java index 42cefa9cdbb..3099b0bbb5d 100644 --- a/src/main/java/com/stripe/service/PromotionCodeService.java +++ b/src/main/java/com/stripe/service/PromotionCodeService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.PromotionCode; import com.stripe.model.StripeCollection; @@ -154,4 +155,49 @@ public PromotionCode update( options); return this.request(request, PromotionCode.class); } + /** Serializes a PromotionCode create request into a batch job JSONL line. */ + public String serializeBatchCreate(PromotionCodeCreateParams params) throws StripeException { + return serializeBatchCreate(params, (RequestOptions) null); + } + /** Serializes a PromotionCode create request into a batch job JSONL line. */ + public String serializeBatchCreate(PromotionCodeCreateParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } + /** Serializes a PromotionCode update request into a batch job JSONL line. */ + public String serializeBatchUpdate(String promotionCode, PromotionCodeUpdateParams params) + throws StripeException { + return serializeBatchUpdate(promotionCode, params, (RequestOptions) null); + } + /** Serializes a PromotionCode update request into a batch job JSONL line. */ + public String serializeBatchUpdate( + String promotionCode, PromotionCodeUpdateParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("promotion_code", promotionCode); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } } diff --git a/src/main/java/com/stripe/service/SubscriptionScheduleService.java b/src/main/java/com/stripe/service/SubscriptionScheduleService.java index 1e825aca533..f1279407d2d 100644 --- a/src/main/java/com/stripe/service/SubscriptionScheduleService.java +++ b/src/main/java/com/stripe/service/SubscriptionScheduleService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.StripeCollection; import com.stripe.model.SubscriptionSchedule; @@ -286,4 +287,75 @@ public SubscriptionSchedule release( options); return this.request(request, SubscriptionSchedule.class); } + /** Serializes a SubscriptionSchedule create request into a batch job JSONL line. */ + public String serializeBatchCreate(SubscriptionScheduleCreateParams params) + throws StripeException { + return serializeBatchCreate(params, (RequestOptions) null); + } + /** Serializes a SubscriptionSchedule create request into a batch job JSONL line. */ + public String serializeBatchCreate( + SubscriptionScheduleCreateParams params, RequestOptions options) throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } + /** Serializes a SubscriptionSchedule update request into a batch job JSONL line. */ + public String serializeBatchUpdate(String schedule, SubscriptionScheduleUpdateParams params) + throws StripeException { + return serializeBatchUpdate(schedule, params, (RequestOptions) null); + } + /** Serializes a SubscriptionSchedule update request into a batch job JSONL line. */ + public String serializeBatchUpdate( + String schedule, SubscriptionScheduleUpdateParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("schedule", schedule); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } + /** Serializes a SubscriptionSchedule cancel request into a batch job JSONL line. */ + public String serializeBatchCancel(String schedule, SubscriptionScheduleCancelParams params) + throws StripeException { + return serializeBatchCancel(schedule, params, (RequestOptions) null); + } + /** Serializes a SubscriptionSchedule cancel request into a batch job JSONL line. */ + public String serializeBatchCancel( + String schedule, SubscriptionScheduleCancelParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("schedule", schedule); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } } diff --git a/src/main/java/com/stripe/service/SubscriptionService.java b/src/main/java/com/stripe/service/SubscriptionService.java index 9f58e62f243..ad5df60662f 100644 --- a/src/main/java/com/stripe/service/SubscriptionService.java +++ b/src/main/java/com/stripe/service/SubscriptionService.java @@ -2,6 +2,7 @@ package com.stripe.service; import com.google.gson.reflect.TypeToken; +import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.Discount; import com.stripe.model.StripeCollection; @@ -604,4 +605,54 @@ public Subscription resume( options); return this.request(request, Subscription.class); } + /** Serializes a Subscription update request into a batch job JSONL line. */ + public String serializeBatchUpdate(String subscriptionExposedId, SubscriptionUpdateParams params) + throws StripeException { + return serializeBatchUpdate(subscriptionExposedId, params, (RequestOptions) null); + } + /** Serializes a Subscription update request into a batch job JSONL line. */ + public String serializeBatchUpdate( + String subscriptionExposedId, SubscriptionUpdateParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("subscription_exposed_id", subscriptionExposedId); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } + /** Serializes a Subscription migrate request into a batch job JSONL line. */ + public String serializeBatchMigrate(String subscription, SubscriptionMigrateParams params) + throws StripeException { + return serializeBatchMigrate(subscription, params, (RequestOptions) null); + } + /** Serializes a Subscription migrate request into a batch job JSONL line. */ + public String serializeBatchMigrate( + String subscription, SubscriptionMigrateParams params, RequestOptions options) + throws StripeException { + String itemId = java.util.UUID.randomUUID().toString(); + String stripeVersion = Stripe.API_VERSION; + String stripeContext = (options != null) ? options.getStripeContext() : null; + + java.util.Map pathParams = new java.util.LinkedHashMap(); + pathParams.put("subscription", subscription); + java.util.Map item = new java.util.LinkedHashMap<>(); + item.put("id", itemId); + item.put("path_params", pathParams); + item.put("params", (params != null) ? params.toMap() : null); + item.put("stripe_version", stripeVersion); + if (stripeContext != null) { + item.put("context", stripeContext); + } + return ApiResource.GSON.toJson(item); + } } diff --git a/src/test/java/com/stripe/functional/GeneratedExamples.java b/src/test/java/com/stripe/functional/GeneratedExamples.java index 076e0cfe8b9..f1b946d192a 100644 --- a/src/test/java/com/stripe/functional/GeneratedExamples.java +++ b/src/test/java/com/stripe/functional/GeneratedExamples.java @@ -25579,7 +25579,9 @@ public void testV2CoreBatchJobPostServices() throws StripeException { com.stripe.param.v2.core.BatchJobCreateParams.Endpoint.builder() .setHttpMethod( com.stripe.param.v2.core.BatchJobCreateParams.Endpoint.HttpMethod.POST) - .setPath("path") + .setPath( + com.stripe.param.v2.core.BatchJobCreateParams.Endpoint.Path + .V1_SUBSCRIPTION_SCHEDULE_CREATE) .build()) .putMetadata("key", "metadata") .setSkipValidation(true)