Skip to content

Commit 1e62ea9

Browse files
committed
API Updates
* Adds support for `simulate_increment` * Adds support for `simulate_clearing` * Adds support for `simulate_reversal`
1 parent 186facc commit 1e62ea9

File tree

3 files changed

+88
-3
lines changed

3 files changed

+88
-3
lines changed

lib/checkout_sdk/issuing/issuing_client.rb

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class IssuingClient < Client
1414
CONTROLS = 'controls'
1515
SIMULATE = 'simulate'
1616
AUTHORIZATIONS = 'authorizations'
17+
PRESENTMENTS = 'presentments'
18+
REVERSALS = 'reversals'
1719
private_constant :ISSUING,
1820
:CARDHOLDERS,
1921
:CARDS,
@@ -24,7 +26,9 @@ class IssuingClient < Client
2426
:SUSPEND,
2527
:CONTROLS,
2628
:SIMULATE,
27-
:AUTHORIZATIONS
29+
:AUTHORIZATIONS,
30+
:PRESENTMENTS,
31+
:REVERSALS
2832

2933
# @param [ApiClient] api_client
3034
# @param [CheckoutConfiguration] configuration
@@ -127,6 +131,36 @@ def remove_card_control(control_id)
127131
def simulate_authorization(authorization_request)
128132
api_client.invoke_post(build_path(ISSUING, SIMULATE, AUTHORIZATIONS), sdk_authorization, authorization_request)
129133
end
134+
135+
# @param [String] transaction_id
136+
# @param [Hash] increment_request
137+
def simulate_increment(transaction_id, increment_request)
138+
api_client.invoke_post(
139+
build_path(ISSUING, SIMULATE, AUTHORIZATIONS, transaction_id, AUTHORIZATIONS),
140+
sdk_authorization,
141+
increment_request
142+
)
143+
end
144+
145+
# @param [String] transaction_id
146+
# @param [Hash] clearing_request
147+
def simulate_clearing(transaction_id, clearing_request)
148+
api_client.invoke_post(
149+
build_path(ISSUING, SIMULATE, AUTHORIZATIONS, transaction_id, PRESENTMENTS),
150+
sdk_authorization,
151+
clearing_request
152+
)
153+
end
154+
155+
# @param [String] transaction_id
156+
# @param [Hash] reversal_request
157+
def simulate_reversal(transaction_id, reversal_request)
158+
api_client.invoke_post(
159+
build_path(ISSUING, SIMULATE, AUTHORIZATIONS, transaction_id, REVERSALS),
160+
sdk_authorization,
161+
reversal_request
162+
)
163+
end
130164
end
131165
end
132166
end

spec/checkout_sdk/issuing/issuing_helper.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,25 @@ def create_control(card_id)
9090

9191
control
9292
end
93+
94+
def simulate_transaction(card)
95+
request = {
96+
'card' => {
97+
'id' => card.id,
98+
'expiry_month' => card.expiry_month,
99+
'expiry_year' => card.expiry_year
100+
},
101+
'transaction' => {
102+
'type' => 'purchase',
103+
'amount' => 100,
104+
'currency' => CheckoutSdk::Common::Currency::GBP
105+
}
106+
}
107+
108+
auth = get_issuing_api.issuing.simulate_authorization request
109+
110+
assert_response auth
111+
112+
auth
113+
end
93114
end

spec/checkout_sdk/issuing/testing_issuing_integration_spec.rb

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,55 @@
77
before(:all) do
88
@cardholder = create_cardholder
99
@card = create_card @cardholder.id, true
10+
@transaction = simulate_transaction @card
1011
end
1112

1213
describe '.simulate_authorization' do
1314
context 'when simulating authorization with valid card' do
1415
it { authorizes_transaction get_issuing_api.issuing.simulate_authorization get_authorization_request }
1516
end
1617
end
18+
19+
describe '.simulate_increment' do
20+
context 'when simulating increment authorization with valid card' do
21+
it { authorizes_transaction get_issuing_api.issuing.simulate_increment @transaction.id, { 'amount' => 300 } }
22+
end
23+
end
24+
25+
describe '.simulate_clearing' do
26+
context 'when simulating a clearing of an existing transaction' do
27+
it { authorizes_clearing get_issuing_api.issuing.simulate_clearing @transaction.id, { 'amount' => 100 } }
28+
end
29+
end
30+
31+
describe '.simulate_reversal' do
32+
context 'when simulating a reversal of an existing transaction' do
33+
it { reverses_transaction get_issuing_api.issuing.simulate_reversal @transaction.id, { 'amount' => 100 } }
34+
end
35+
end
1736
end
1837
end
1938

2039
private
2140

2241
def authorizes_transaction(response)
23-
assert_response response, %w[id
24-
status]
42+
assert_response response, %w[status]
2543

2644
expect(response.status).to eq 'Authorized'
2745
end
2846

47+
def authorizes_clearing(response)
48+
assert_response response
49+
50+
expect(response.http_metadata.status_code).to eq 202
51+
end
52+
53+
def reverses_transaction(response)
54+
assert_response response, %w[status]
55+
56+
expect(response.status).to eq 'Reversed'
57+
end
58+
2959
def get_authorization_request
3060
{
3161
'card' => {

0 commit comments

Comments
 (0)