From 1e62ea99284b836fb6de896d6f47d9618eb50735 Mon Sep 17 00:00:00 2001 From: Martin Seco Date: Mon, 5 Jun 2023 13:29:54 -0300 Subject: [PATCH] API Updates * Adds support for `simulate_increment` * Adds support for `simulate_clearing` * Adds support for `simulate_reversal` --- lib/checkout_sdk/issuing/issuing_client.rb | 36 ++++++++++++++++++- spec/checkout_sdk/issuing/issuing_helper.rb | 21 +++++++++++ .../testing_issuing_integration_spec.rb | 34 ++++++++++++++++-- 3 files changed, 88 insertions(+), 3 deletions(-) diff --git a/lib/checkout_sdk/issuing/issuing_client.rb b/lib/checkout_sdk/issuing/issuing_client.rb index c3378ad..e076c5e 100644 --- a/lib/checkout_sdk/issuing/issuing_client.rb +++ b/lib/checkout_sdk/issuing/issuing_client.rb @@ -14,6 +14,8 @@ class IssuingClient < Client CONTROLS = 'controls' SIMULATE = 'simulate' AUTHORIZATIONS = 'authorizations' + PRESENTMENTS = 'presentments' + REVERSALS = 'reversals' private_constant :ISSUING, :CARDHOLDERS, :CARDS, @@ -24,7 +26,9 @@ class IssuingClient < Client :SUSPEND, :CONTROLS, :SIMULATE, - :AUTHORIZATIONS + :AUTHORIZATIONS, + :PRESENTMENTS, + :REVERSALS # @param [ApiClient] api_client # @param [CheckoutConfiguration] configuration @@ -127,6 +131,36 @@ def remove_card_control(control_id) def simulate_authorization(authorization_request) api_client.invoke_post(build_path(ISSUING, SIMULATE, AUTHORIZATIONS), sdk_authorization, authorization_request) end + + # @param [String] transaction_id + # @param [Hash] increment_request + def simulate_increment(transaction_id, increment_request) + api_client.invoke_post( + build_path(ISSUING, SIMULATE, AUTHORIZATIONS, transaction_id, AUTHORIZATIONS), + sdk_authorization, + increment_request + ) + end + + # @param [String] transaction_id + # @param [Hash] clearing_request + def simulate_clearing(transaction_id, clearing_request) + api_client.invoke_post( + build_path(ISSUING, SIMULATE, AUTHORIZATIONS, transaction_id, PRESENTMENTS), + sdk_authorization, + clearing_request + ) + end + + # @param [String] transaction_id + # @param [Hash] reversal_request + def simulate_reversal(transaction_id, reversal_request) + api_client.invoke_post( + build_path(ISSUING, SIMULATE, AUTHORIZATIONS, transaction_id, REVERSALS), + sdk_authorization, + reversal_request + ) + end end end end diff --git a/spec/checkout_sdk/issuing/issuing_helper.rb b/spec/checkout_sdk/issuing/issuing_helper.rb index 0ff8e09..0d02956 100644 --- a/spec/checkout_sdk/issuing/issuing_helper.rb +++ b/spec/checkout_sdk/issuing/issuing_helper.rb @@ -90,4 +90,25 @@ def create_control(card_id) control end + + def simulate_transaction(card) + request = { + 'card' => { + 'id' => card.id, + 'expiry_month' => card.expiry_month, + 'expiry_year' => card.expiry_year + }, + 'transaction' => { + 'type' => 'purchase', + 'amount' => 100, + 'currency' => CheckoutSdk::Common::Currency::GBP + } + } + + auth = get_issuing_api.issuing.simulate_authorization request + + assert_response auth + + auth + end end diff --git a/spec/checkout_sdk/issuing/testing_issuing_integration_spec.rb b/spec/checkout_sdk/issuing/testing_issuing_integration_spec.rb index c942dad..4b33ff9 100644 --- a/spec/checkout_sdk/issuing/testing_issuing_integration_spec.rb +++ b/spec/checkout_sdk/issuing/testing_issuing_integration_spec.rb @@ -7,6 +7,7 @@ before(:all) do @cardholder = create_cardholder @card = create_card @cardholder.id, true + @transaction = simulate_transaction @card end describe '.simulate_authorization' do @@ -14,18 +15,47 @@ it { authorizes_transaction get_issuing_api.issuing.simulate_authorization get_authorization_request } end end + + describe '.simulate_increment' do + context 'when simulating increment authorization with valid card' do + it { authorizes_transaction get_issuing_api.issuing.simulate_increment @transaction.id, { 'amount' => 300 } } + end + end + + describe '.simulate_clearing' do + context 'when simulating a clearing of an existing transaction' do + it { authorizes_clearing get_issuing_api.issuing.simulate_clearing @transaction.id, { 'amount' => 100 } } + end + end + + describe '.simulate_reversal' do + context 'when simulating a reversal of an existing transaction' do + it { reverses_transaction get_issuing_api.issuing.simulate_reversal @transaction.id, { 'amount' => 100 } } + end + end end end private def authorizes_transaction(response) - assert_response response, %w[id - status] + assert_response response, %w[status] expect(response.status).to eq 'Authorized' end +def authorizes_clearing(response) + assert_response response + + expect(response.http_metadata.status_code).to eq 202 +end + +def reverses_transaction(response) + assert_response response, %w[status] + + expect(response.status).to eq 'Reversed' +end + def get_authorization_request { 'card' => {