diff --git a/src/Stripe.Tests.XUnit/subscriptions/_fixture.cs b/src/Stripe.Tests.XUnit/subscriptions/_fixture.cs index cce7a0ab77..e02239b1bc 100755 --- a/src/Stripe.Tests.XUnit/subscriptions/_fixture.cs +++ b/src/Stripe.Tests.XUnit/subscriptions/_fixture.cs @@ -37,7 +37,12 @@ public subscription_fixture() Items = new List { new StripeSubscriptionItemUpdateOption { Id = Subscription.Items.Data[0].Id, Deleted = true }, - new StripeSubscriptionItemUpdateOption { Id = Subscription.Items.Data[1].Id, Quantity = 5 } + new StripeSubscriptionItemUpdateOption + { + Id = Subscription.Items.Data[1].Id, + Quantity = 5, + Metadata = new Dictionary{ {"key", "value"} } + } } }; diff --git a/src/Stripe.Tests.XUnit/subscriptions/creating_and_updating_subscriptions.cs b/src/Stripe.Tests.XUnit/subscriptions/creating_and_updating_subscriptions.cs index 92fce3a73e..d342c2c83c 100755 --- a/src/Stripe.Tests.XUnit/subscriptions/creating_and_updating_subscriptions.cs +++ b/src/Stripe.Tests.XUnit/subscriptions/creating_and_updating_subscriptions.cs @@ -57,6 +57,18 @@ public void updated_has_right_quantity() fixture.SubscriptionUpdated.Items.Data[0].Quantity.Should().Be(fixture.SubscriptionUpdateOptions.Items[1].Quantity); } + [Fact] + public void updated_has_metadata_keys() + { + fixture.SubscriptionUpdated.Items.Data[0].Metadata.Should().ContainKeys(fixture.SubscriptionUpdateOptions.Items[1].Metadata.Keys); + } + + [Fact] + public void updated_has_metadata_values() + { + fixture.SubscriptionUpdated.Items.Data[0].Metadata.Should().ContainValues(fixture.SubscriptionUpdateOptions.Items[1].Metadata.Values); + } + [Fact] public void ended_should_not_be_null() { diff --git a/src/Stripe.net/Infrastructure/Middleware/ParserPlugin/SubscriptionItemUpdatedPlugin.cs b/src/Stripe.net/Infrastructure/Middleware/ParserPlugin/SubscriptionItemUpdatedPlugin.cs index a670ad958b..193a81a7a5 100755 --- a/src/Stripe.net/Infrastructure/Middleware/ParserPlugin/SubscriptionItemUpdatedPlugin.cs +++ b/src/Stripe.net/Infrastructure/Middleware/ParserPlugin/SubscriptionItemUpdatedPlugin.cs @@ -27,9 +27,9 @@ public bool Parse(ref string requestString, JsonPropertyAttribute attribute, Pro // it must have a json attribute matching stripe's key, and only one var attr = prop.GetCustomAttributes().SingleOrDefault(); if (attr == null) continue; - - RequestStringBuilder.ApplyParameterToRequestString(ref requestString, - $"items[{itemIndex}][{attr.PropertyName}]", value.ToString()); + // a JsonPropertyAttribute is required to supply a property name to parser plugins. + var indexedItemAttribute = new JsonPropertyAttribute($"items[{itemIndex}][{attr.PropertyName}]"); + RequestStringBuilder.ProcessPlugins(ref requestString, indexedItemAttribute, prop, value, propertyParent); } itemIndex++;