diff --git a/lib/gringotts/gateways/authorize_net.ex b/lib/gringotts/gateways/authorize_net.ex index 47a5e5c6..b162f173 100644 --- a/lib/gringotts/gateways/authorize_net.ex +++ b/lib/gringotts/gateways/authorize_net.ex @@ -858,6 +858,10 @@ defmodule Gringotts.Gateways.AuthorizeNet do |> Enum.find(:undefined_response, & &1) end + defp build_response(%{"messages" => %{"resultCode" => "Ok"}, "transactionResponse" => %{"errors" => _}} = result, base_response) do + {:error, ResponseHandler.parse_gateway_error(result, base_response)} + end + defp build_response(%{"messages" => %{"resultCode" => "Ok"}} = result, base_response) do {:ok, ResponseHandler.parse_gateway_success(result, base_response)} end diff --git a/test/gateways/authorize_net_test.exs b/test/gateways/authorize_net_test.exs index a09f667a..e2b3d030 100644 --- a/test/gateways/authorize_net_test.exs +++ b/test/gateways/authorize_net_test.exs @@ -21,6 +21,13 @@ defmodule Gringotts.Gateways.AuthorizeNetTest do verification_code: 123 } + @expired_card %CreditCard{ + number: "5424000000000015", + month: 12, + year: 2000, + verification_code: 999 + } + @amount FakeMoney.new("2.99", :USD) @opts [ @@ -157,6 +164,15 @@ defmodule Gringotts.Gateways.AuthorizeNetTest do assert {:error, _response} = ANet.purchase(@amount, @bad_card, @opts) end end + + test "with expired card" do + with_mock HTTPoison, + post: fn _url, _body, _headers -> + MockResponse.falsely_successful_expired_card_response() + end do + assert {:error, _response} = ANet.purchase(@amount, @expired_card, @opts) + end + end end describe "authorize" do diff --git a/test/support/mocks/authorize_net_mock.ex b/test/support/mocks/authorize_net_mock.ex index 17c4bfbf..58648172 100644 --- a/test/support/mocks/authorize_net_mock.ex +++ b/test/support/mocks/authorize_net_mock.ex @@ -73,6 +73,30 @@ defmodule Gringotts.Gateways.AuthorizeNetMock do }} end + def falsely_successful_expired_card_response do + {:ok, + %HTTPoison.Response{ + body: + ~s(OkI00001Successful.2000000PP432890662370XXXX6008Visa2This transaction has been declined.553747225552573068382083585479253 N 01), + headers: [ + {"Cache-Control", "private"}, + {"Content-Type", "application/xml; charset=utf-8"}, + {"X-OPNET-Transaction-Trace", "a2_b6b84b43-d399-4dde-bc12-fb1f8ccf4b27-51156-17537805"}, + {"Access-Control-Allow-Origin", "*"}, + {"Access-Control-Allow-Methods", "PUT,OPTIONS,POST,GET"}, + {"Access-Control-Allow-Headers", + "x-requested-with,cache-control,content-type,origin,method,SOAPAction"}, + {"Access-Control-Allow-Credentials", "true"}, + {"X-Cnection", "close"}, + {"Content-Length", "828"}, + {"Date", "Thu, 28 Dec 2017 13:54:20 GMT"}, + {"Connection", "keep-alive"} + ], + request_url: "https://apitest.authorize.net/xml/v1/request.api", + status_code: 200 + }} + end + def bad_amount_purchase_response do {:ok, %HTTPoison.Response{