Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kuski: do not send extraTaxes if no value provided #2886

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 3 additions & 9 deletions lib/active_merchant/billing/gateways/kushki.rb
Expand Up @@ -94,14 +94,7 @@ def add_amount_defaults(sum, money, options)
sum[:iva] = 0
sum[:subtotalIva0] = 0

if sum[:currency] == "COP"
extra_taxes = {}
extra_taxes[:propina] = 0
extra_taxes[:tasaAeroportuaria] = 0
extra_taxes[:agenciaDeViaje] = 0
extra_taxes[:iac] = 0
sum[:extraTaxes] = extra_taxes
else
if sum[:currency] != "COP"
sum[:ice] = 0
end
end
Expand All @@ -112,7 +105,8 @@ def add_amount_by_country(sum, options)
sum[:iva] = amount[:iva].to_f if amount[:iva]
sum[:subtotalIva0] = amount[:subtotal_iva_0].to_f if amount[:subtotal_iva_0]
sum[:ice] = amount[:ice].to_f if amount[:ice]
if extra_taxes = amount[:extra_taxes] && sum[:currency] == "COP"
if (extra_taxes = amount[:extra_taxes]) && sum[:currency] == "COP"
sum[:extraTaxes] ||= Hash.new
sum[:extraTaxes][:propina] = extra_taxes[:propina].to_f if extra_taxes[:propina]
sum[:extraTaxes][:tasaAeroportuaria] = extra_taxes[:tasa_aeroportuaria].to_f if extra_taxes[:tasa_aeroportuaria]
sum[:extraTaxes][:agenciaDeViaje] = extra_taxes[:agencia_de_viaje].to_f if extra_taxes[:agencia_de_viaje]
Expand Down
102 changes: 102 additions & 0 deletions test/unit/gateways/kushki_test.rb
@@ -1,6 +1,8 @@
require 'test_helper'

class KushkiTest < Test::Unit::TestCase
include CommStub

def setup
@gateway = KushkiGateway.new(public_merchant_id: '_', private_merchant_id: '_')
@amount = 100
Expand Down Expand Up @@ -46,6 +48,106 @@ def test_successful_purchase_with_options
assert response.test?
end

def test_taxes_are_excluded_when_not_provided
options = {
currency: "COP",
amount: {
subtotal_iva_0: "4.95",
subtotal_iva: "10",
iva: "1.54",
ice: "3.50"
}
}

amount = 100 * (
options[:amount][:subtotal_iva_0].to_f +
options[:amount][:subtotal_iva].to_f +
options[:amount][:iva].to_f +
options[:amount][:ice].to_f
)

response = stub_comms do
@gateway.purchase(amount, @credit_card, options)
end.check_request do |endpoint, data, headers|
if /charges/ =~ endpoint
assert_no_match %r{extraTaxes}, data
end
end.respond_with(successful_charge_response, successful_token_response)

assert_success response
end

def test_partial_taxes_do_not_error
options = {
currency: "COP",
amount: {
subtotal_iva_0: "4.95",
subtotal_iva: "10",
iva: "1.54",
ice: "3.50",
extra_taxes: {
tasa_aeroportuaria: 0.2,
iac: 0.4
}
}
}

amount = 100 * (
options[:amount][:subtotal_iva_0].to_f +
options[:amount][:subtotal_iva].to_f +
options[:amount][:iva].to_f +
options[:amount][:ice].to_f
)

response = stub_comms do
@gateway.purchase(amount, @credit_card, options)
end.check_request do |endpoint, data, headers|
if /charges/ =~ endpoint
assert_match %r{extraTaxes}, data
assert_no_match %r{propina}, data
assert_match %r{iac}, data
end
end.respond_with(successful_charge_response, successful_token_response)

assert_success response
end

def test_taxes_are_included_when_provided
options = {
currency: "COP",
amount: {
subtotal_iva_0: "4.95",
subtotal_iva: "10",
iva: "1.54",
ice: "3.50",
extra_taxes: {
propina: 0.1,
tasa_aeroportuaria: 0.2,
agencia_de_viaje: 0.3,
iac: 0.4
}
}
}

amount = 100 * (
options[:amount][:subtotal_iva_0].to_f +
options[:amount][:subtotal_iva].to_f +
options[:amount][:iva].to_f +
options[:amount][:ice].to_f
)

response = stub_comms do
@gateway.purchase(amount, @credit_card, options)
end.check_request do |endpoint, data, headers|
if /charges/ =~ endpoint
assert_match %r{extraTaxes}, data
assert_match %r{propina}, data
end
end.respond_with(successful_charge_response, successful_token_response)

assert_success response
end

def test_failed_purchase
options = {
amount: {
Expand Down