From a2e415a413e4bb207b9c4e3b4d80eb3bfe194d2f Mon Sep 17 00:00:00 2001 From: ckoegel Date: Wed, 7 Jan 2026 16:27:04 -0500 Subject: [PATCH 1/3] SWI-9315 RBM Media List --- api/openapi.yaml | 4 ++- bandwidth.yml | 4 ++- ...ChannelChannelListRBMObjectAllOfContent.md | 2 +- docs/RbmMessageMedia.md | 2 +- .../bandwidth/sdk/model/RbmMessageMedia.java | 28 +++++++++++++++---- .../sdk/smoke/MultiChannelApiTest.java | 13 +++++---- .../sdk/unit/models/RbmMessageMediaTest.java | 2 +- 7 files changed, 38 insertions(+), 17 deletions(-) diff --git a/api/openapi.yaml b/api/openapi.yaml index 2515f2fc..b049f952 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -8860,7 +8860,9 @@ components: rbmMessageMedia: properties: media: - $ref: "#/components/schemas/rbmMessageContentFile" + items: + $ref: "#/components/schemas/rbmMessageContentFile" + type: array suggestions: description: An array of suggested actions for the recipient. items: diff --git a/bandwidth.yml b/bandwidth.yml index 207825dc..ba464ea0 100644 --- a/bandwidth.yml +++ b/bandwidth.yml @@ -2257,7 +2257,9 @@ components: type: object properties: media: - $ref: '#/components/schemas/rbmMessageContentFile' + type: array + items: + $ref: '#/components/schemas/rbmMessageContentFile' suggestions: $ref: '#/components/schemas/multiChannelFullActions' required: diff --git a/docs/MultiChannelChannelListRBMObjectAllOfContent.md b/docs/MultiChannelChannelListRBMObjectAllOfContent.md index 6ff58ab3..740b8ea0 100644 --- a/docs/MultiChannelChannelListRBMObjectAllOfContent.md +++ b/docs/MultiChannelChannelListRBMObjectAllOfContent.md @@ -10,7 +10,7 @@ The content of the message. |------------ | ------------- | ------------- | -------------| |**text** | **String** | The text associated with the message. Must be 3270 characters or less | | |**suggestions** | [**List<MultiChannelAction>**](MultiChannelAction.md) | An array of suggested actions for the recipient. | [optional] | -|**media** | [**RbmMessageContentFile**](RbmMessageContentFile.md) | | | +|**media** | [**List<RbmMessageContentFile>**](RbmMessageContentFile.md) | | | |**orientation** | **StandaloneCardOrientationEnum** | | | |**thumbnailImageAlignment** | **ThumbnailAlignmentEnum** | | | |**cardContent** | [**RbmCardContent**](RbmCardContent.md) | | | diff --git a/docs/RbmMessageMedia.md b/docs/RbmMessageMedia.md index 71abb236..7f7dc009 100644 --- a/docs/RbmMessageMedia.md +++ b/docs/RbmMessageMedia.md @@ -7,7 +7,7 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| -|**media** | [**RbmMessageContentFile**](RbmMessageContentFile.md) | | | +|**media** | [**List<RbmMessageContentFile>**](RbmMessageContentFile.md) | | | |**suggestions** | [**List<MultiChannelAction>**](MultiChannelAction.md) | An array of suggested actions for the recipient. | [optional] | diff --git a/src/main/java/com/bandwidth/sdk/model/RbmMessageMedia.java b/src/main/java/com/bandwidth/sdk/model/RbmMessageMedia.java index a2ca3bb6..704e36dd 100644 --- a/src/main/java/com/bandwidth/sdk/model/RbmMessageMedia.java +++ b/src/main/java/com/bandwidth/sdk/model/RbmMessageMedia.java @@ -59,7 +59,7 @@ public class RbmMessageMedia { public static final String SERIALIZED_NAME_MEDIA = "media"; @SerializedName(SERIALIZED_NAME_MEDIA) @javax.annotation.Nonnull - private RbmMessageContentFile media; + private List media = new ArrayList<>(); public static final String SERIALIZED_NAME_SUGGESTIONS = "suggestions"; @SerializedName(SERIALIZED_NAME_SUGGESTIONS) @@ -69,21 +69,29 @@ public class RbmMessageMedia { public RbmMessageMedia() { } - public RbmMessageMedia media(@javax.annotation.Nonnull RbmMessageContentFile media) { + public RbmMessageMedia media(@javax.annotation.Nonnull List media) { this.media = media; return this; } + public RbmMessageMedia addMediaItem(RbmMessageContentFile mediaItem) { + if (this.media == null) { + this.media = new ArrayList<>(); + } + this.media.add(mediaItem); + return this; + } + /** * Get media * @return media */ @javax.annotation.Nonnull - public RbmMessageContentFile getMedia() { + public List getMedia() { return media; } - public void setMedia(@javax.annotation.Nonnull RbmMessageContentFile media) { + public void setMedia(@javax.annotation.Nonnull List media) { this.media = media; } @@ -233,8 +241,16 @@ public static void validateJsonElement(JsonElement jsonElement) throws IOExcepti } } JsonObject jsonObj = jsonElement.getAsJsonObject(); - // validate the required field `media` - RbmMessageContentFile.validateJsonElement(jsonObj.get("media")); + // ensure the json data is an array + if (!jsonObj.get("media").isJsonArray()) { + throw new IllegalArgumentException(String.format(Locale.ROOT, "Expected the field `media` to be an array in the JSON string but got `%s`", jsonObj.get("media").toString())); + } + + JsonArray jsonArraymedia = jsonObj.getAsJsonArray("media"); + // validate the required field `media` (array) + for (int i = 0; i < jsonArraymedia.size(); i++) { + RbmMessageContentFile.validateJsonElement(jsonArraymedia.get(i)); + }; if (jsonObj.get("suggestions") != null && !jsonObj.get("suggestions").isJsonNull()) { JsonArray jsonArraysuggestions = jsonObj.getAsJsonArray("suggestions"); if (jsonArraysuggestions != null) { diff --git a/src/test/java/com/bandwidth/sdk/smoke/MultiChannelApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/MultiChannelApiTest.java index 42761d1f..242f6582 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/MultiChannelApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/MultiChannelApiTest.java @@ -244,7 +244,6 @@ public void createMultiChannelRBMTextMessageTest() throws ApiException { } @Test - @Disabled("skip until messaging updates API") public void createMultiChannelRBMMediaMessageTest() throws ApiException { MultiChannelChannelListRequestObject channelListRBMObject = new MultiChannelChannelListRequestObject( new MultiChannelChannelListRBMObject() @@ -253,10 +252,10 @@ public void createMultiChannelRBMMediaMessageTest() throws ApiException { .channel(MultiChannelMessageChannelEnum.RBM) .content(new MultiChannelChannelListRBMObjectAllOfContent( new RbmMessageMedia() - .media(new RbmMessageContentFile() + .media(Arrays.asList(new RbmMessageContentFile() .fileUrl(URI.create("https://www.example.com/image1.png")) .thumbnailUrl(URI.create("https://www.example.com/thumbnail")) - ) + )) .suggestions(Arrays.asList( new MultiChannelAction(new RbmActionDial() .type(RbmActionTypeEnum.DIAL_PHONE) @@ -305,9 +304,11 @@ public void createMultiChannelRBMMediaMessageTest() throws ApiException { assertThat(channelListObject.getContent(), instanceOf(MultiChannelChannelListRBMObjectAllOfContent.class)); assertThat(channelListObject.getContent().getActualInstance(), instanceOf(RbmMessageMedia.class)); RbmMessageMedia rbmContent = channelListObject.getContent().getRbmMessageMedia(); - assertThat(rbmContent.getMedia(), instanceOf(RbmMessageContentFile.class)); - assertThat(rbmContent.getMedia().getFileUrl(), instanceOf(URI.class)); - assertThat(rbmContent.getMedia().getThumbnailUrl(), instanceOf(URI.class)); + assertThat(rbmContent.getMedia(), instanceOf(List.class)); + assertThat(rbmContent.getMedia().get(0), instanceOf(RbmMessageContentFile.class)); + RbmMessageContentFile rbmMediaFile = rbmContent.getMedia().get(0); + assertThat(rbmMediaFile.getFileUrl(), instanceOf(URI.class)); + assertThat(rbmMediaFile.getThumbnailUrl(), instanceOf(URI.class)); assertThat(rbmContent.getSuggestions(), instanceOf(List.class)); assertThat(rbmContent.getSuggestions().get(0), instanceOf(MultiChannelAction.class)); assertThat(rbmContent.getSuggestions().get(0).getActualInstance(), instanceOf(RbmActionDial.class)); diff --git a/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java b/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java index ec06d363..8900738a 100644 --- a/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java @@ -30,7 +30,7 @@ */ public class RbmMessageMediaTest { private final RbmMessageMedia model = new RbmMessageMedia() - .media(new RbmMessageContentFile()) + .media(Arrays.asList(new RbmMessageContentFile())) .suggestions(new ArrayList(Arrays.asList(new MultiChannelAction()))); /** From 35df8191c9bd4c6e434faa9747dab351952980ad Mon Sep 17 00:00:00 2001 From: ckoegel Date: Wed, 7 Jan 2026 16:36:07 -0500 Subject: [PATCH 2/3] fix list assertion --- .../com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java b/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java index 8900738a..6c7e1704 100644 --- a/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java @@ -46,7 +46,8 @@ public void testRbmMessageMedia() { */ @Test public void mediaTest() { - assertThat(model.getMedia(), instanceOf(RbmMessageContentFile.class)); + assertThat(model.getMedia(), instanceOf(ArrayList.class)); + } /** From 98607ad90d684a1cdfe1fb7284d581c595fc4ed5 Mon Sep 17 00:00:00 2001 From: ckoegel Date: Wed, 7 Jan 2026 16:39:27 -0500 Subject: [PATCH 3/3] fix creation --- .../java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java b/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java index 6c7e1704..0838c1de 100644 --- a/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/models/RbmMessageMediaTest.java @@ -30,7 +30,7 @@ */ public class RbmMessageMediaTest { private final RbmMessageMedia model = new RbmMessageMedia() - .media(Arrays.asList(new RbmMessageContentFile())) + .media(new ArrayList(Arrays.asList(new RbmMessageContentFile()))) .suggestions(new ArrayList(Arrays.asList(new MultiChannelAction()))); /**