pcp-server-ruby-sdk 1.8.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +1 -1
- data/api-definition.yaml +5200 -5012
- data/lib/PCP-server-Ruby-SDK/endpoints/checkout_api_client.rb +3 -1
- data/lib/PCP-server-Ruby-SDK/endpoints/commerce_case_api_client.rb +5 -4
- data/lib/PCP-server-Ruby-SDK/endpoints/order_management_checkout_actions_api_client.rb +25 -0
- data/lib/PCP-server-Ruby-SDK/endpoints/payment_execution_api_client.rb +26 -0
- data/lib/PCP-server-Ruby-SDK/models/cancel_payment_request.rb +16 -4
- data/lib/PCP-server-Ruby-SDK/models/cart_item_supplier_references.rb +2 -0
- data/lib/PCP-server-Ruby-SDK/models/commerce_cases_response.rb +18 -0
- data/lib/PCP-server-Ruby-SDK/models/fund_split_request.rb +153 -0
- data/lib/PCP-server-Ruby-SDK/models/fund_split_response.rb +180 -0
- data/lib/PCP-server-Ruby-SDK/models/payment_references_for_refund.rb +9 -2
- data/lib/PCP-server-Ruby-SDK/models/redirect_payment_method_specific_input.rb +10 -1
- data/lib/PCP-server-Ruby-SDK/models/redirect_payment_product900_specific_input.rb +183 -0
- data/lib/PCP-server-Ruby-SDK/models/required_field_validation.rb +108 -0
- data/lib/PCP-server-Ruby-SDK/version.rb +1 -1
- data/lib/PCP-server-Ruby-SDK.rb +7 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/spec/endpoints/checkout_api_client_spec.rb +22 -0
- data/spec/endpoints/order_management_checkout_actions_api_client_spec.rb +51 -0
- data/spec/endpoints/payment_execution_api_client_spec.rb +52 -0
- data/spec/models/required_field_validation_spec.rb +551 -0
- metadata +14 -7
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
|
|
2
|
+
require 'date'
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module PCPServerSDK
|
|
6
|
+
module Models
|
|
7
|
+
class RedirectPaymentProduct900SpecificInput
|
|
8
|
+
attr_accessor :capture_trigger
|
|
9
|
+
|
|
10
|
+
class EnumAttributeValidator
|
|
11
|
+
attr_reader :datatype
|
|
12
|
+
attr_reader :allowable_values
|
|
13
|
+
|
|
14
|
+
def initialize(datatype, allowable_values)
|
|
15
|
+
@allowable_values = allowable_values.map do |value|
|
|
16
|
+
case datatype.to_s
|
|
17
|
+
when /Integer/i
|
|
18
|
+
value.to_i
|
|
19
|
+
when /Float/i
|
|
20
|
+
value.to_f
|
|
21
|
+
else
|
|
22
|
+
value
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def valid?(value)
|
|
28
|
+
!value || allowable_values.include?(value)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.attribute_map
|
|
33
|
+
{
|
|
34
|
+
:'capture_trigger' => :'captureTrigger'
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.acceptable_attributes
|
|
39
|
+
attribute_map.values
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.openapi_types
|
|
43
|
+
{
|
|
44
|
+
:'capture_trigger' => :'String'
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.openapi_nullable
|
|
49
|
+
Set.new([])
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def initialize(attributes = {})
|
|
53
|
+
if (!attributes.is_a?(Hash))
|
|
54
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `RedirectPaymentProduct900SpecificInput` initialize method"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
|
58
|
+
if (!self.class.attribute_map.key?(k.to_sym))
|
|
59
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `RedirectPaymentProduct900SpecificInput`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
|
|
60
|
+
end
|
|
61
|
+
h[k.to_sym] = v
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if attributes.key?(:'capture_trigger')
|
|
65
|
+
self.capture_trigger = attributes[:'capture_trigger']
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def ==(o)
|
|
70
|
+
return true if self.equal?(o)
|
|
71
|
+
self.class == o.class &&
|
|
72
|
+
capture_trigger == o.capture_trigger
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def eql?(o)
|
|
76
|
+
self == o
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def hash
|
|
80
|
+
[capture_trigger].hash
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def self.build_from_hash(attributes)
|
|
84
|
+
return nil unless attributes.is_a?(Hash)
|
|
85
|
+
attributes = attributes.transform_keys(&:to_sym)
|
|
86
|
+
transformed_hash = {}
|
|
87
|
+
openapi_types.each_pair do |key, type|
|
|
88
|
+
if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
|
|
89
|
+
transformed_hash["#{key}"] = nil
|
|
90
|
+
elsif type =~ /\AArray<(.*)>/i
|
|
91
|
+
if attributes[attribute_map[key]].is_a?(Array)
|
|
92
|
+
transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
|
|
93
|
+
end
|
|
94
|
+
elsif !attributes[attribute_map[key]].nil?
|
|
95
|
+
transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
new(transformed_hash)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self._deserialize(type, value)
|
|
102
|
+
case type.to_sym
|
|
103
|
+
when :Time
|
|
104
|
+
Time.parse(value)
|
|
105
|
+
when :Date
|
|
106
|
+
Date.parse(value)
|
|
107
|
+
when :String
|
|
108
|
+
value.to_s
|
|
109
|
+
when :Integer
|
|
110
|
+
value.to_i
|
|
111
|
+
when :Float
|
|
112
|
+
value.to_f
|
|
113
|
+
when :Boolean
|
|
114
|
+
if value.to_s =~ /\A(true|t|yes|y|1)\z/i
|
|
115
|
+
true
|
|
116
|
+
else
|
|
117
|
+
false
|
|
118
|
+
end
|
|
119
|
+
when :Object
|
|
120
|
+
value
|
|
121
|
+
when /\AArray<(?<inner_type>.+)>\z/
|
|
122
|
+
inner_type = Regexp.last_match[:inner_type]
|
|
123
|
+
value.map { |v| _deserialize(inner_type, v) }
|
|
124
|
+
when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
|
|
125
|
+
k_type = Regexp.last_match[:k_type]
|
|
126
|
+
v_type = Regexp.last_match[:v_type]
|
|
127
|
+
{}.tap do |hash|
|
|
128
|
+
value.each do |k, v|
|
|
129
|
+
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
else
|
|
133
|
+
klass = PCPServerSDK::Models.const_get(type)
|
|
134
|
+
klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def to_s
|
|
139
|
+
to_hash.to_s
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def to_body
|
|
143
|
+
to_hash
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def to_hash
|
|
147
|
+
hash = {}
|
|
148
|
+
self.class.attribute_map.each_pair do |attr, param|
|
|
149
|
+
value = self.send(attr)
|
|
150
|
+
if value.nil?
|
|
151
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
|
152
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
hash[param] = _to_hash(value)
|
|
156
|
+
end
|
|
157
|
+
hash
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def _to_hash(value)
|
|
161
|
+
if value.is_a?(Array)
|
|
162
|
+
value.compact.map { |v| _to_hash(v) }
|
|
163
|
+
elsif value.is_a?(Hash)
|
|
164
|
+
{}.tap do |hash|
|
|
165
|
+
value.each { |k, v| hash[k] = _to_hash(v) }
|
|
166
|
+
end
|
|
167
|
+
elsif value.respond_to? :to_hash
|
|
168
|
+
value.to_hash
|
|
169
|
+
else
|
|
170
|
+
value
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def capture_trigger=(capture_trigger)
|
|
175
|
+
validator = EnumAttributeValidator.new('String', ['shipping', 'delivery', 'availability', 'serviceFulfillment', 'other'])
|
|
176
|
+
unless validator.valid?(capture_trigger)
|
|
177
|
+
fail ArgumentError, "invalid value for \"capture_trigger\", must be one of #{validator.allowable_values}."
|
|
178
|
+
end
|
|
179
|
+
@capture_trigger = capture_trigger
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'psych'
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module PCPServerSDK
|
|
6
|
+
module Models
|
|
7
|
+
module RequiredFieldValidation
|
|
8
|
+
SCHEMA_PATH = File.expand_path('../../../api-definition.yaml', __dir__)
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
def install!
|
|
12
|
+
required_attributes_by_class.each do |class_name, required_attributes|
|
|
13
|
+
next unless PCPServerSDK::Models.const_defined?(class_name, false)
|
|
14
|
+
|
|
15
|
+
klass = PCPServerSDK::Models.const_get(class_name)
|
|
16
|
+
next unless klass.is_a?(Class)
|
|
17
|
+
next if klass < Array
|
|
18
|
+
next unless klass.respond_to?(:attribute_map)
|
|
19
|
+
next if klass.instance_variable_defined?(:@required_field_validation_installed)
|
|
20
|
+
|
|
21
|
+
klass.prepend(build_validation_module(required_attributes))
|
|
22
|
+
klass.singleton_class.prepend(build_class_validation_module)
|
|
23
|
+
klass.instance_variable_set(:@required_field_validation_installed, true)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def build_validation_module(required_attributes)
|
|
30
|
+
Module.new do
|
|
31
|
+
define_method(:initialize) do |attributes = {}|
|
|
32
|
+
@required_field_validation_initializing = true
|
|
33
|
+
initialization_succeeded = false
|
|
34
|
+
|
|
35
|
+
begin
|
|
36
|
+
super(attributes)
|
|
37
|
+
initialization_succeeded = true
|
|
38
|
+
ensure
|
|
39
|
+
@required_field_validation_initializing = false
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if initialization_succeeded && attributes.is_a?(Hash) && !attributes.empty?
|
|
43
|
+
validate_required_fields!
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
define_method(:validate_required_fields!) do
|
|
48
|
+
missing_attributes = required_attributes.select { |attribute| public_send(attribute).nil? }
|
|
49
|
+
return if missing_attributes.empty?
|
|
50
|
+
|
|
51
|
+
raise ArgumentError, "#{missing_attributes.first} cannot be nil"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
define_method(:to_hash) do
|
|
55
|
+
validate_required_fields!
|
|
56
|
+
super()
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
required_attributes.each do |attribute|
|
|
60
|
+
define_method("#{attribute}=") do |value|
|
|
61
|
+
if value.nil? && !@required_field_validation_initializing
|
|
62
|
+
raise ArgumentError, "#{attribute} cannot be nil"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
super(value)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
def build_class_validation_module
|
|
71
|
+
Module.new do
|
|
72
|
+
def build_from_hash(attributes)
|
|
73
|
+
object = super(attributes)
|
|
74
|
+
return object if object.nil?
|
|
75
|
+
return object if object.is_a?(Array)
|
|
76
|
+
|
|
77
|
+
object.send(:validate_required_fields!) if object.respond_to?(:validate_required_fields!, true)
|
|
78
|
+
object
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def required_attributes_by_class
|
|
84
|
+
@required_attributes_by_class ||= begin
|
|
85
|
+
spec = Psych.safe_load_file(SCHEMA_PATH, permitted_classes: [Time, Date, Symbol], aliases: true)
|
|
86
|
+
schemas = spec.dig('components', 'schemas') || {}
|
|
87
|
+
|
|
88
|
+
schemas.each_with_object({}) do |(schema_name, schema), mapping|
|
|
89
|
+
required_properties = Array(schema['required'])
|
|
90
|
+
next if required_properties.empty?
|
|
91
|
+
next unless PCPServerSDK::Models.const_defined?(schema_name, false)
|
|
92
|
+
|
|
93
|
+
klass = PCPServerSDK::Models.const_get(schema_name)
|
|
94
|
+
next unless klass.is_a?(Class)
|
|
95
|
+
next unless klass.respond_to?(:attribute_map)
|
|
96
|
+
|
|
97
|
+
attribute_map = klass.attribute_map.invert
|
|
98
|
+
required_attributes = required_properties.filter_map { |property| attribute_map[property.to_sym] }
|
|
99
|
+
next if required_attributes.empty?
|
|
100
|
+
|
|
101
|
+
mapping[schema_name] = required_attributes.freeze
|
|
102
|
+
end.freeze
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
data/lib/PCP-server-Ruby-SDK.rb
CHANGED
|
@@ -52,6 +52,7 @@ require_relative 'PCP-server-Ruby-SDK/models/checkout_references'
|
|
|
52
52
|
require_relative 'PCP-server-Ruby-SDK/models/checkout_response'
|
|
53
53
|
require_relative 'PCP-server-Ruby-SDK/models/checkouts_response'
|
|
54
54
|
require_relative 'PCP-server-Ruby-SDK/models/commerce_case_response'
|
|
55
|
+
require_relative 'PCP-server-Ruby-SDK/models/commerce_cases_response'
|
|
55
56
|
require_relative 'PCP-server-Ruby-SDK/models/company_information'
|
|
56
57
|
require_relative 'PCP-server-Ruby-SDK/models/complete_financing_payment_method_specific_input'
|
|
57
58
|
require_relative 'PCP-server-Ruby-SDK/models/complete_order_request'
|
|
@@ -77,6 +78,8 @@ require_relative 'PCP-server-Ruby-SDK/models/financing_payment_method_specific_i
|
|
|
77
78
|
require_relative 'PCP-server-Ruby-SDK/models/financing_payment_method_specific_output'
|
|
78
79
|
require_relative 'PCP-server-Ruby-SDK/models/fund_distribution'
|
|
79
80
|
require_relative 'PCP-server-Ruby-SDK/models/fund_split'
|
|
81
|
+
require_relative 'PCP-server-Ruby-SDK/models/fund_split_request'
|
|
82
|
+
require_relative 'PCP-server-Ruby-SDK/models/fund_split_response'
|
|
80
83
|
require_relative 'PCP-server-Ruby-SDK/models/installment_option'
|
|
81
84
|
require_relative 'PCP-server-Ruby-SDK/models/link_information'
|
|
82
85
|
require_relative 'PCP-server-Ruby-SDK/models/mandate_recurrence_type'
|
|
@@ -137,6 +140,7 @@ require_relative 'PCP-server-Ruby-SDK/models/complete_payment_product840_specifi
|
|
|
137
140
|
require_relative 'PCP-server-Ruby-SDK/models/complete_redirect_payment_method_specific_input'
|
|
138
141
|
require_relative 'PCP-server-Ruby-SDK/models/redirect_payment_method_specific_output'
|
|
139
142
|
require_relative 'PCP-server-Ruby-SDK/models/redirect_payment_product840_specific_input'
|
|
143
|
+
require_relative 'PCP-server-Ruby-SDK/models/redirect_payment_product900_specific_input'
|
|
140
144
|
require_relative 'PCP-server-Ruby-SDK/models/redirection_data'
|
|
141
145
|
require_relative 'PCP-server-Ruby-SDK/models/references'
|
|
142
146
|
require_relative 'PCP-server-Ruby-SDK/models/refresh_payment_request'
|
|
@@ -175,6 +179,7 @@ require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_data_hea
|
|
|
175
179
|
require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_method'
|
|
176
180
|
require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_method_type'
|
|
177
181
|
require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_token'
|
|
182
|
+
require_relative 'PCP-server-Ruby-SDK/models/required_field_validation'
|
|
178
183
|
|
|
179
184
|
# Queries
|
|
180
185
|
require_relative 'PCP-server-Ruby-SDK/queries/get_checkouts_query'
|
|
@@ -191,6 +196,8 @@ require_relative 'PCP-server-Ruby-SDK/request_header_generator'
|
|
|
191
196
|
require_relative 'PCP-server-Ruby-SDK/version'
|
|
192
197
|
|
|
193
198
|
module PCPServerSDK
|
|
199
|
+
PCPServerSDK::Models::RequiredFieldValidation.install!
|
|
200
|
+
|
|
194
201
|
class << self
|
|
195
202
|
# Customize default settings for the SDK using block.
|
|
196
203
|
# PCPServerSDK.configure do |config|
|
data/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pcp-serversdk-ruby",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pcp-serversdk-ruby",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.10.0",
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@commitlint/cli": "19.4.0",
|
|
12
12
|
"@commitlint/config-conventional": "19.2.2",
|
data/package.json
CHANGED
|
@@ -255,6 +255,28 @@ RSpec.describe PCPServerSDK::Endpoints::CheckoutApiClient do
|
|
|
255
255
|
end
|
|
256
256
|
end
|
|
257
257
|
|
|
258
|
+
describe '#remove_checkout_request' do
|
|
259
|
+
context 'when request is successful' do
|
|
260
|
+
let(:response) { double('Response', body: '{}', code: 200) }
|
|
261
|
+
|
|
262
|
+
before do
|
|
263
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
it 'does not raise an error' do
|
|
267
|
+
expect { client.remove_checkout_request('1', '2', '3') }.not_to raise_error
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
context 'when some params are nil' do
|
|
272
|
+
it 'raises a TypeError' do
|
|
273
|
+
expect { client.remove_checkout_request(nil, '2', '3') }.to raise_error(TypeError, 'Merchant ID is required')
|
|
274
|
+
expect { client.remove_checkout_request('1', nil, '3') }.to raise_error(TypeError, 'Commerce Case ID is required')
|
|
275
|
+
expect { client.remove_checkout_request('1', '2', nil) }.to raise_error(TypeError, 'Checkout ID is required')
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
258
280
|
describe '#complete_checkout_request' do
|
|
259
281
|
let(:payload) { double('PCPServerSDK::Models::CompleteOrderRequest') }
|
|
260
282
|
|
|
@@ -113,6 +113,57 @@ RSpec.describe PCPServerSDK::Endpoints::OrderManagementCheckoutActionsApiClient
|
|
|
113
113
|
end
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
+
describe '#complete_order' do
|
|
117
|
+
let(:payload) { double('PCPServerSDK::Models::CompleteOrderRequest') }
|
|
118
|
+
|
|
119
|
+
context 'when request is successful' do
|
|
120
|
+
let(:response) { double('Response', body: '{}', code: '200') }
|
|
121
|
+
let(:expected_response) { PCPServerSDK::Models::CompletePaymentResponse.new }
|
|
122
|
+
|
|
123
|
+
before do
|
|
124
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'returns a successful response' do
|
|
128
|
+
result = client.complete_order('1', '2', '3', payload)
|
|
129
|
+
expect(result).to eq(expected_response)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context 'when request is unsuccessful (400)' do
|
|
134
|
+
let(:response) { double('Response', body: error_body, code: '400') }
|
|
135
|
+
|
|
136
|
+
before do
|
|
137
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'raises an PCPServerSDK::Errors::ApiErrorResponseException' do
|
|
141
|
+
expect { client.complete_order('1', '2', '3', payload) }.to raise_error(PCPServerSDK::Errors::ApiErrorResponseException)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context 'when request is unsuccessful (500)' do
|
|
146
|
+
let(:response) { double('Response', body: '{}', code: '500') }
|
|
147
|
+
|
|
148
|
+
before do
|
|
149
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'raises an PCPServerSDK::Errors::ApiResponseRetrievalException' do
|
|
153
|
+
expect { client.complete_order('1', '2', '3', payload) }.to raise_error(PCPServerSDK::Errors::ApiResponseRetrievalException)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context 'when some params are nil' do
|
|
158
|
+
it 'raises a TypeError' do
|
|
159
|
+
expect { client.complete_order(nil, '2', '3', payload) }.to raise_error(TypeError, 'Merchant ID is required')
|
|
160
|
+
expect { client.complete_order('1', nil, '3', payload) }.to raise_error(TypeError, 'Commerce Case ID is required')
|
|
161
|
+
expect { client.complete_order('1', '2', nil, payload) }.to raise_error(TypeError, 'Checkout ID is required')
|
|
162
|
+
expect { client.complete_order('1', '2', '3', nil) }.to raise_error(TypeError, 'Payload is required')
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
116
167
|
describe '#return_order' do
|
|
117
168
|
let(:payload) { double('PCPServerSDK::Models::ReturnRequest') }
|
|
118
169
|
|
|
@@ -377,4 +377,56 @@ RSpec.describe PCPServerSDK::Endpoints::PaymentExecutionApiClient do
|
|
|
377
377
|
end
|
|
378
378
|
end
|
|
379
379
|
end
|
|
380
|
+
|
|
381
|
+
describe '#create_fund_split' do
|
|
382
|
+
let(:payload) { double('PCPServerSDK::Models::FundSplitRequest') }
|
|
383
|
+
|
|
384
|
+
context 'when request is successful' do
|
|
385
|
+
let(:response) { double('Response', body: '{}', code: '200') }
|
|
386
|
+
let(:expected_response) { PCPServerSDK::Models::FundSplitResponse.new }
|
|
387
|
+
|
|
388
|
+
before do
|
|
389
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
it 'returns a successful response' do
|
|
393
|
+
result = client.create_fund_split('1', '2', '3', '4', '5', payload)
|
|
394
|
+
expect(result).to eq(expected_response)
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
context 'when request is unsuccessful (400)' do
|
|
399
|
+
let(:response) { double('Response', body: error_body, code: '400') }
|
|
400
|
+
|
|
401
|
+
before do
|
|
402
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
it 'raises an PCPServerSDK::Errors::ApiErrorResponseException' do
|
|
406
|
+
expect { client.create_fund_split('1', '2', '3', '4', '5', payload) }.to raise_error(PCPServerSDK::Errors::ApiErrorResponseException)
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
context 'when request is unsuccessful (500)' do
|
|
411
|
+
let(:response) { double('Response', body: '{}', code: '500') }
|
|
412
|
+
|
|
413
|
+
before do
|
|
414
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
it 'raises an PCPServerSDK::Errors::ApiResponseRetrievalException' do
|
|
418
|
+
expect { client.create_fund_split('1', '2', '3', '4', '5', payload) }.to raise_error(PCPServerSDK::Errors::ApiResponseRetrievalException)
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
context 'when some params are nil' do
|
|
423
|
+
it 'raises a TypeError' do
|
|
424
|
+
expect { client.create_fund_split(nil, '2', '3', '4', '5', payload) }.to raise_error(TypeError, 'Merchant ID is required')
|
|
425
|
+
expect { client.create_fund_split('1', nil, '3', '4', '5', payload) }.to raise_error(TypeError, 'Commerce Case ID is required')
|
|
426
|
+
expect { client.create_fund_split('1', '2', nil, '4', '5', payload) }.to raise_error(TypeError, 'Checkout ID is required')
|
|
427
|
+
expect { client.create_fund_split('1', '2', '3', nil, '5', payload) }.to raise_error(TypeError, 'Payment Execution ID is required')
|
|
428
|
+
expect { client.create_fund_split('1', '2', '3', '4', nil, payload) }.to raise_error(TypeError, 'Event ID is required')
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
380
432
|
end
|