pcp-server-ruby-sdk 1.8.0 → 1.9.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.
@@ -109,7 +109,7 @@ module PCPServerSDK
109
109
  # @param commerce_case_id [String] The commerce case identifier
110
110
  # @param checkout_id [String] The checkout identifier
111
111
  # @return [nil]
112
- def remove_checkout_request(merchant_id, commerce_case_id, checkout_id)
112
+ def delete_checkout_request(merchant_id, commerce_case_id, checkout_id)
113
113
  raise TypeError, MERCHANT_ID_REQUIRED_ERROR if merchant_id.nil? || merchant_id.empty?
114
114
  raise TypeError, COMMERCE_CASE_ID_REQUIRED_ERROR if commerce_case_id.nil? || commerce_case_id.empty?
115
115
  raise TypeError, CHECKOUT_ID_REQUIRED_ERROR if checkout_id.nil? || checkout_id.empty?
@@ -125,6 +125,8 @@ module PCPServerSDK
125
125
  nil
126
126
  end
127
127
 
128
+ alias remove_checkout_request delete_checkout_request
129
+
128
130
  # Complete a checkout
129
131
  # @param merchant_id [String] The merchant identifier
130
132
  # @param commerce_case_id [String] The commerce case identifier
@@ -3,6 +3,7 @@ require 'json'
3
3
  require 'uri'
4
4
  require_relative 'base_api_client'
5
5
  require_relative '../models/commerce_case_response'
6
+ require_relative '../models/commerce_cases_response'
6
7
  require_relative '../models/create_commerce_case_response'
7
8
  require_relative '../models/customer'
8
9
 
@@ -54,8 +55,8 @@ module PCPServerSDK
54
55
 
55
56
  # Get commerce cases
56
57
  # @param merchant_id [String] The merchant identifier
57
- # @param query_params [PCPServerSDK::Models::GetCommerceCasesQuery] The query parameters
58
- # @return [Array<PCPServerSDK::Models::CommerceCaseResponse>] The commerce cases
58
+ # @param query_params [PCPServerSDK::Queries::GetCommerceCasesQuery] The query parameters
59
+ # @return [PCPServerSDK::Models::CommerceCasesResponse] The commerce cases
59
60
  def get_commerce_cases_request(merchant_id, query_params = nil)
60
61
  raise TypeError, MERCHANT_ID_REQUIRED_ERROR if merchant_id.nil? || merchant_id.empty?
61
62
 
@@ -70,8 +71,8 @@ module PCPServerSDK
70
71
  headers: {}
71
72
  }
72
73
 
73
- request = make_api_call(url.to_s, request_init)
74
- request.map { |r| deserialize_json(r, PCPServerSDK::Models::CommerceCaseResponse) }
74
+ response = make_api_call(url.to_s, request_init)
75
+ deserialize_json(response, PCPServerSDK::Models::CommerceCasesResponse)
75
76
  end
76
77
 
77
78
  # Update a commerce case
@@ -4,6 +4,7 @@ require 'uri'
4
4
  require_relative 'base_api_client'
5
5
  require_relative '../models/cancel_response'
6
6
  require_relative '../models/deliver_response'
7
+ require_relative '../models/complete_payment_response'
7
8
  require_relative '../models/order_response'
8
9
  require_relative '../models/return_response'
9
10
  module PCPServerSDK
@@ -22,6 +23,7 @@ module PCPServerSDK
22
23
  # @return [PCPServerSDK::Models::OrderResponse] The order response
23
24
  def create_order(merchant_id, commerce_case_id, checkout_id, payload)
24
25
  validate_ids(merchant_id, commerce_case_id, checkout_id)
26
+ raise TypeError, PAYLOAD_REQUIRED_ERROR if payload.nil?
25
27
 
26
28
  url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/order")
27
29
 
@@ -35,6 +37,28 @@ module PCPServerSDK
35
37
  deserialize_json(response, PCPServerSDK::Models::OrderResponse)
36
38
  end
37
39
 
40
+ # Complete an order
41
+ # @param merchant_id [String] The merchant identifier
42
+ # @param commerce_case_id [String] The commerce case identifier
43
+ # @param checkout_id [String] The checkout identifier
44
+ # @param payload [PCPServerSDK::Models::CompleteOrderRequest] The complete order request
45
+ # @return [PCPServerSDK::Models::CompletePaymentResponse] The complete payment response
46
+ def complete_order(merchant_id, commerce_case_id, checkout_id, payload)
47
+ validate_ids(merchant_id, commerce_case_id, checkout_id)
48
+ raise TypeError, PAYLOAD_REQUIRED_ERROR if payload.nil?
49
+
50
+ url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/complete-order")
51
+
52
+ request_init = {
53
+ method: 'POST',
54
+ headers: { 'Content-Type' => 'application/json' },
55
+ body: JSON.generate(payload)
56
+ }
57
+
58
+ response = make_api_call(url.to_s, request_init)
59
+ deserialize_json(response, PCPServerSDK::Models::CompletePaymentResponse)
60
+ end
61
+
38
62
  # Deliver an order
39
63
  # @param merchant_id [String] The merchant identifier
40
64
  # @param commerce_case_id [String] The commerce case identifier
@@ -43,6 +67,7 @@ module PCPServerSDK
43
67
  # @return [PCPServerSDK::Models::DeliverResponse] The deliver response
44
68
  def deliver_order(merchant_id, commerce_case_id, checkout_id, payload)
45
69
  validate_ids(merchant_id, commerce_case_id, checkout_id)
70
+ raise TypeError, PAYLOAD_REQUIRED_ERROR if payload.nil?
46
71
 
47
72
  url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/deliver")
48
73
 
@@ -56,6 +56,8 @@ module PCPServerSDK
56
56
 
57
57
  if attributes.key?(:'supplier_id')
58
58
  self.supplier_id = attributes[:'supplier_id']
59
+ else
60
+ self.supplier_id = nil
59
61
  end
60
62
 
61
63
  if attributes.key?(:'order_reference')
@@ -0,0 +1,18 @@
1
+ require_relative 'commerce_case_response'
2
+
3
+ module PCPServerSDK
4
+ module Models
5
+ # Top-level response for listing Commerce Cases.
6
+ class CommerceCasesResponse < Array
7
+ def self.build_from_hash(attributes)
8
+ return new unless attributes.is_a?(Array)
9
+
10
+ new.concat(attributes.map { |item| PCPServerSDK::Models::CommerceCaseResponse.build_from_hash(item) })
11
+ end
12
+
13
+ def to_body
14
+ map { |item| item.respond_to?(:to_body) ? item.to_body : item }
15
+ end
16
+ end
17
+ end
18
+ 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
@@ -1,4 +1,4 @@
1
1
 
2
2
  module PCPServerSDK
3
- VERSION = '1.8.0'
3
+ VERSION = '1.9.0'
4
4
  end
@@ -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'
@@ -175,6 +176,7 @@ require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_data_hea
175
176
  require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_method'
176
177
  require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_method_type'
177
178
  require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_token'
179
+ require_relative 'PCP-server-Ruby-SDK/models/required_field_validation'
178
180
 
179
181
  # Queries
180
182
  require_relative 'PCP-server-Ruby-SDK/queries/get_checkouts_query'
@@ -191,6 +193,8 @@ require_relative 'PCP-server-Ruby-SDK/request_header_generator'
191
193
  require_relative 'PCP-server-Ruby-SDK/version'
192
194
 
193
195
  module PCPServerSDK
196
+ PCPServerSDK::Models::RequiredFieldValidation.install!
197
+
194
198
  class << self
195
199
  # Customize default settings for the SDK using block.
196
200
  # PCPServerSDK.configure do |config|
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pcp-serversdk-ruby",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pcp-serversdk-ruby",
9
- "version": "1.8.0",
9
+ "version": "1.9.0",
10
10
  "devDependencies": {
11
11
  "@commitlint/cli": "19.4.0",
12
12
  "@commitlint/config-conventional": "19.2.2",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pcp-serversdk-ruby",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "type": "commonjs",
5
5
  "scripts": {
6
6
  "changelog": "conventional-changelog -i CHANGELOG.md -s --config ./changelog.config.js"
@@ -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