Skip to content

Unexpected element 'currency' when previewing purchase #866

@mphilips-copper

Description

@mphilips-copper

Describe the bug

Recurly::Purchase.preview! fails with "The provided XML was invalid. 1:0: ERROR: Element 'currency': This element is not expected. (Recurly::API::BadRequest)" when I believe that I am passing in valid XML. It appears that Recurly::Purchase.preview! modifies the passed-in Recurly Subscription.

To Reproduce

Obtain a Recurly Account and a Recurly Subscription, use those objects to initialize a Recurly Purchase

irb(main):001:0> company = Company.find(16149);rec_acc = RecurlyAccessor.find_account(company.id);rec_sub = RecurlyAccessor.find_subscription(company.id)
=> #<Recurly::Subscription ...
irb(main):002:0> rec_pur = Recurly::Purchase.new({ account: rec_acc, subscriptions: [rec_sub] })
=> #<Recurly::Purchase collection_method: nil, coupon_codes: nil, currency: nil, customer_notes: nil, net_terms: nil, po_number: nil, shipping_address_id: nil, terms_and_conditions: nil, vat_reverse_charge_notes: nil>

Confirm that the Recurly Subscription does not indicate currency has changed (USD is my default currency)

irb(main):003:0> rec_sub.to_xml
=> "<subscription><plan_code>basic_monthly</plan_code></subscription>"
irb(main):004:0> rec_sub
=> #<Recurly::Subscription ..., currency: "USD", ...>

Attempt to preview the purchase and receive the error

irb(main):005:0> rec_pre = Recurly::Purchase.preview!(rec_pur)
Traceback (most recent call last):
/app/vendor/bundle/ruby/2.6.0/gems/recurly-2.15.4/lib/recurly/api/net_http_adapter.rb:101:in `request': The provided XML was invalid. 1:0: ERROR: Element 'currency': This element is not expected. (Recurly::API::BadRequest)

The Recurly Subscription now indicates currency has been changed

irb(main):006:0> rec_sub.to_xml
=> "<subscription><currency></currency><plan_code>basic_monthly</plan_code></subscription>"
irb(main):007:0> rec_sub
=> #<Recurly::Subscription ..., currency: nil, ...>

Expected behavior

I expected that the Recurly Subscription would be used as-is when converted to XML and passed into the Recurly API.

Extra notes

I believe the issue could be related to Recurly Purchase's overridden .to_xml which does seem to modify Subscription currency. Looks like this code was introduced with #339

Is there a higher version of the gem that addresses this issue for me?

Your Environment

  • Which version of this library are you using? 2.15.4
  • Which version of ruby are you using? 2.6.9

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions