Skip to content
This repository has been archived by the owner on Apr 14, 2023. It is now read-only.

Commit

Permalink
Merge pull request #55 from solidusio/fix_admin_view_error
Browse files Browse the repository at this point in the history
Fix error when saving braintree payment method
  • Loading branch information
cbrunsdon authored Jan 20, 2017
2 parents 41ad789 + e2a0a18 commit 47f09fe
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
11 changes: 11 additions & 0 deletions app/models/solidus_paypal_braintree/gateway.rb
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,17 @@ def cents(dollars)
dollars.to_money.cents
end

def to_hash(preference_string)
JSON.parse(preference_string.gsub("=>", ":"))
end

def convert_preference_value(value, type)
if type == :hash && value.is_a?(String)
value = to_hash(value)
end
super
end

def transaction_options(source, options, submit_for_settlement = false)
params = options.select do |key, _|
ALLOWED_BRAINTREE_OPTIONS.include?(key)
Expand Down
29 changes: 29 additions & 0 deletions spec/models/solidus_paypal_braintree/gateway_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,35 @@
end
let(:payment_type) { SolidusPaypalBraintree::Source::PAYPAL }

describe "saving preference hashes as strings" do
subject { gateway.update(update_params) }

context "with valid hash syntax" do
let(:update_params) do
{
preferred_merchant_currency_map: '{"EUR" => "test_merchant_account_id"}',
preferred_paypal_payee_email_map: '{"CAD" => "[email protected]"}'
}
end

it "successfully updates the preference" do
subject
expect(gateway.preferred_merchant_currency_map).to eq({ "EUR" => "test_merchant_account_id" })
expect(gateway.preferred_paypal_payee_email_map).to eq({ "CAD" => "[email protected]" })
end
end

context "with invalid user input" do
let(:update_params) do
{ preferred_merchant_currency_map: '{this_is_not_a_valid_hash}' }
end

it "raise a JSON parser error" do
expect{ subject }.to raise_error(JSON::ParserError)
end
end
end

describe 'making a payment on an order', vcr: { cassette_name: 'gateway/complete' } do
include_context 'order ready for payment'

Expand Down

0 comments on commit 47f09fe

Please sign in to comment.