payneteasy-payneteasyapi 0.1.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.
Files changed (87) hide show
  1. data/.gemtest +0 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +18 -0
  4. data/README.md +54 -0
  5. data/Rakefile +8 -0
  6. data/doc/00-basic-tutorial.md +254 -0
  7. data/doc/01-library-internals.md +6 -0
  8. data/doc/02-payment-scenarios.md +9 -0
  9. data/doc/library-internals/00-payment-data.md +162 -0
  10. data/doc/library-internals/01-payment-processor.md +163 -0
  11. data/doc/library-internals/02-validator.md +55 -0
  12. data/doc/library-internals/03-property-accessor.md +76 -0
  13. data/doc/payment-scenarios/00-sale-transactions.md +90 -0
  14. data/doc/payment-scenarios/01-preauth-capture-transactions.md +105 -0
  15. data/doc/payment-scenarios/02-transfer-transactions.md +89 -0
  16. data/doc/payment-scenarios/03-return-transactions.md +52 -0
  17. data/doc/payment-scenarios/04-recurrent-transactions.md +110 -0
  18. data/doc/payment-scenarios/05-payment-form-integration.md +59 -0
  19. data/doc/payment-scenarios/06-merchant-callbacks.md +29 -0
  20. data/example/capture.rb +12 -0
  21. data/example/common/functions.rb +56 -0
  22. data/lib/paynet_easy/paynet_easy_api/callback/callback_factory.rb +47 -0
  23. data/lib/paynet_easy/paynet_easy_api/callback/callback_prototype.rb +186 -0
  24. data/lib/paynet_easy/paynet_easy_api/callback/customer_return_callback.rb +28 -0
  25. data/lib/paynet_easy/paynet_easy_api/callback/paynet_easy_callback.rb +44 -0
  26. data/lib/paynet_easy/paynet_easy_api/error/paynet_error.rb +4 -0
  27. data/lib/paynet_easy/paynet_easy_api/error/request_error.rb +6 -0
  28. data/lib/paynet_easy/paynet_easy_api/error/response_error.rb +6 -0
  29. data/lib/paynet_easy/paynet_easy_api/error/validation_error.rb +6 -0
  30. data/lib/paynet_easy/paynet_easy_api/payment_data/billing_address.rb +41 -0
  31. data/lib/paynet_easy/paynet_easy_api/payment_data/credit_card.rb +32 -0
  32. data/lib/paynet_easy/paynet_easy_api/payment_data/customer.rb +35 -0
  33. data/lib/paynet_easy/paynet_easy_api/payment_data/data.rb +13 -0
  34. data/lib/paynet_easy/paynet_easy_api/payment_data/payment.rb +190 -0
  35. data/lib/paynet_easy/paynet_easy_api/payment_data/payment_transaction.rb +188 -0
  36. data/lib/paynet_easy/paynet_easy_api/payment_data/query_config.rb +95 -0
  37. data/lib/paynet_easy/paynet_easy_api/payment_data/recurrent_card.rb +40 -0
  38. data/lib/paynet_easy/paynet_easy_api/payment_processor.rb +251 -0
  39. data/lib/paynet_easy/paynet_easy_api/paynet_easy_api.rb +26 -0
  40. data/lib/paynet_easy/paynet_easy_api/query/capture_query.rb +30 -0
  41. data/lib/paynet_easy/paynet_easy_api/query/create_card_ref_query.rb +78 -0
  42. data/lib/paynet_easy/paynet_easy_api/query/get_card_info_query.rb +49 -0
  43. data/lib/paynet_easy/paynet_easy_api/query/make_rebill_query.rb +37 -0
  44. data/lib/paynet_easy/paynet_easy_api/query/preauth_form_query.rb +10 -0
  45. data/lib/paynet_easy/paynet_easy_api/query/preauth_query.rb +10 -0
  46. data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_form_query.rb +69 -0
  47. data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_query.rb +71 -0
  48. data/lib/paynet_easy/paynet_easy_api/query/prototype/query.rb +302 -0
  49. data/lib/paynet_easy/paynet_easy_api/query/query_factory.rb +19 -0
  50. data/lib/paynet_easy/paynet_easy_api/query/return_query.rb +46 -0
  51. data/lib/paynet_easy/paynet_easy_api/query/sale_form_query.rb +10 -0
  52. data/lib/paynet_easy/paynet_easy_api/query/sale_query.rb +53 -0
  53. data/lib/paynet_easy/paynet_easy_api/query/status_query.rb +50 -0
  54. data/lib/paynet_easy/paynet_easy_api/query/transfer_by_ref_query.rb +41 -0
  55. data/lib/paynet_easy/paynet_easy_api/query/transfer_form_query.rb +10 -0
  56. data/lib/paynet_easy/paynet_easy_api/transport/callback_response.rb +21 -0
  57. data/lib/paynet_easy/paynet_easy_api/transport/gateway_client.rb +91 -0
  58. data/lib/paynet_easy/paynet_easy_api/transport/request.rb +20 -0
  59. data/lib/paynet_easy/paynet_easy_api/transport/response.rb +136 -0
  60. data/lib/paynet_easy/paynet_easy_api/util/property_accessor.rb +60 -0
  61. data/lib/paynet_easy/paynet_easy_api/util/string.rb +9 -0
  62. data/lib/paynet_easy/paynet_easy_api/util/validator.rb +110 -0
  63. data/payneteasy-payneteasyapi.gemspec +16 -0
  64. data/test/paynet_easy/paynet_easy_api/callback/callback_factory_test.rb +22 -0
  65. data/test/paynet_easy/paynet_easy_api/callback/callback_test_prototype.rb +168 -0
  66. data/test/paynet_easy/paynet_easy_api/callback/customer_return_callback_test.rb +95 -0
  67. data/test/paynet_easy/paynet_easy_api/callback/paynet_easy_callback_test.rb +101 -0
  68. data/test/paynet_easy/paynet_easy_api/fake.rb +71 -0
  69. data/test/paynet_easy/paynet_easy_api/payment_processor_test.rb +255 -0
  70. data/test/paynet_easy/paynet_easy_api/query/capture_query_test.rb +48 -0
  71. data/test/paynet_easy/paynet_easy_api/query/create_card_ref_query_test.rb +116 -0
  72. data/test/paynet_easy/paynet_easy_api/query/get_card_info_query_test.rb +116 -0
  73. data/test/paynet_easy/paynet_easy_api/query/make_rebill_query_test.rb +59 -0
  74. data/test/paynet_easy/paynet_easy_api/query/prototype/payment_query_test_prototype.rb +117 -0
  75. data/test/paynet_easy/paynet_easy_api/query/prototype/query_test_prototype.rb +190 -0
  76. data/test/paynet_easy/paynet_easy_api/query/prototype/sync_query_test_prototype.rb +88 -0
  77. data/test/paynet_easy/paynet_easy_api/query/query_factory_test.rb +21 -0
  78. data/test/paynet_easy/paynet_easy_api/query/return_query_test.rb +58 -0
  79. data/test/paynet_easy/paynet_easy_api/query/sale_form_query_test.rb +96 -0
  80. data/test/paynet_easy/paynet_easy_api/query/sale_query_test.rb +78 -0
  81. data/test/paynet_easy/paynet_easy_api/query/status_query_test.rb +81 -0
  82. data/test/paynet_easy/paynet_easy_api/query/transfer_by_ref_query_test.rb +63 -0
  83. data/test/paynet_easy/paynet_easy_api/transport/gateway_client_test.rb +22 -0
  84. data/test/paynet_easy/paynet_easy_api/transport/response_test.rb +26 -0
  85. data/test/paynet_easy/paynet_easy_api/util/property_accessor_test.rb +52 -0
  86. data/test/paynet_easy/paynet_easy_api/util/validator_test.rb +42 -0
  87. metadata +204 -0
@@ -0,0 +1,101 @@
1
+ require_relative './callback_test_prototype'
2
+ require 'callback/paynet_easy_callback'
3
+
4
+ module PaynetEasy::PaynetEasyApi::Callback
5
+ class PaynetEasyCallbackTest < Test::Unit::TestCase
6
+ include CallbackTestPrototype
7
+
8
+ def test_process_callback_approved
9
+ [
10
+ {
11
+ 'type' => 'sale',
12
+ 'status' => 'approved',
13
+ 'amount' => 0.99,
14
+ 'orderid' => PAYNET_ID,
15
+ 'merchant_order' => CLIENT_ID,
16
+ 'client_orderid' => CLIENT_ID,
17
+ }
18
+ ].each do |callback|
19
+ assert_process_callback_approved callback
20
+ end
21
+ end
22
+
23
+ alias :callback_test_prototype_assert_process_callback_approved :assert_process_callback_approved
24
+
25
+ def assert_process_callback_approved(callback)
26
+ payment_transaction, callback_response = callback_test_prototype_assert_process_callback_approved callback
27
+
28
+ assert_equal PaymentTransaction::PROCESSOR_CALLBACK, payment_transaction.processor_type
29
+ assert_equal callback_response.type, payment_transaction.processor_name
30
+
31
+ [payment_transaction, callback_response]
32
+ end
33
+
34
+ def test_process_callback_declined
35
+ [
36
+ {
37
+ 'type' => 'sale',
38
+ 'status' => 'declined',
39
+ 'amount' => 0.99,
40
+ 'orderid' => PAYNET_ID,
41
+ 'merchant_order' => CLIENT_ID,
42
+ 'client_orderid' => CLIENT_ID,
43
+ },
44
+ {
45
+ 'type' => 'sale',
46
+ 'status' => 'filtered',
47
+ 'amount' => 0.99,
48
+ 'orderid' => PAYNET_ID,
49
+ 'merchant_order' => CLIENT_ID,
50
+ 'client_orderid' => CLIENT_ID,
51
+ }
52
+ ].each do |callback|
53
+ assert_process_callback_declined callback
54
+ end
55
+ end
56
+
57
+ def test_process_callback_error
58
+ [
59
+ {
60
+ 'type' => 'sale',
61
+ 'status' => 'error',
62
+ 'amount' => 0.99,
63
+ 'orderid' => PAYNET_ID,
64
+ 'merchant_order' => CLIENT_ID,
65
+ 'client_orderid' => CLIENT_ID,
66
+ 'error_message' => 'test type error message',
67
+ 'error_code' => 5
68
+ }
69
+ ].each do |callback|
70
+ assert_process_callback_error callback
71
+ end
72
+ end
73
+
74
+ def test_process_callback_with_not_new_transaction
75
+ payment_transaction = payment_transaction()
76
+ payment_transaction.status = PaymentTransaction::STATUS_PROCESSING
77
+
78
+ callback_response = CallbackResponse.new(
79
+ [
80
+ 'status' => 'approved',
81
+ 'amount' => 0.99,
82
+ 'orderid' => PAYNET_ID,
83
+ 'merchant_order' => CLIENT_ID,
84
+ 'client_orderid' => CLIENT_ID,
85
+ ])
86
+
87
+ sign_callback callback_response
88
+
89
+ assert_raise ValidationError, 'Only new payment transaction can be processed' do
90
+ callback_processor.process_callback payment_transaction, callback_response
91
+ end
92
+ end
93
+
94
+ protected
95
+
96
+ # @return [PaynetEasyCallback]
97
+ def callback_processor
98
+ PaynetEasyCallback.new 'sale'
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,71 @@
1
+ require 'paynet_easy_api'
2
+ require 'payment_data/payment_transaction'
3
+ require 'query/query_factory'
4
+ require 'query/prototype/query'
5
+ require 'transport/gateway_client'
6
+ require 'callback/callback_prototype'
7
+ require 'callback/callback_factory'
8
+
9
+ module PaynetEasy::PaynetEasyApi
10
+ module Fake
11
+ include PaynetEasy::PaynetEasyApi::PaymentData
12
+ include PaynetEasy::PaynetEasyApi::Transport
13
+ include PaynetEasy::PaynetEasyApi::Query
14
+ include PaynetEasy::PaynetEasyApi::Callback
15
+
16
+ class FakeQueryFactory < QueryFactory
17
+ attr_writer :query
18
+
19
+ def query(api_query_name)
20
+ @query
21
+ end
22
+ end
23
+
24
+ class FakeGatewayClient < GatewayClient
25
+ attr_accessor :request
26
+ attr_accessor :response
27
+
28
+ def make_request(request)
29
+ self.request = request
30
+ response()
31
+ end
32
+ end
33
+
34
+ class FakeCallbackFactory < CallbackFactory
35
+ attr_writer :callback
36
+
37
+ def callback(callback_type)
38
+ @callback
39
+ end
40
+ end
41
+
42
+ class FakeQuery < Prototype::Query
43
+ attr_accessor :request
44
+
45
+ def create_request(payment_transaction)
46
+ request()
47
+ end
48
+
49
+ def process_response(payment_transaction, response)
50
+ if response.approved?
51
+ payment_transaction.status = PaymentTransaction::STATUS_APPROVED
52
+ end
53
+
54
+ response
55
+ end
56
+ end
57
+
58
+ class ExceptionQuery < FakeQuery
59
+ def process_response(payment_transaction, response)
60
+ raise RuntimeError, 'Process response error'
61
+ end
62
+ end
63
+
64
+ class FakeCallback < CallbackPrototype
65
+ def process_callback(payment_transaction, callback_response)
66
+ payment_transaction.status = PaymentTransaction::STATUS_APPROVED
67
+ callback_response
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,255 @@
1
+ require 'test/unit'
2
+ require 'paynet_easy_api'
3
+ require 'payment_processor'
4
+ require 'payment_data/payment_transaction'
5
+ require 'payment_data/payment'
6
+ require 'payment_data/customer'
7
+ require 'payment_data/billing_address'
8
+ require 'payment_data/query_config'
9
+ require 'transport/response'
10
+ require 'transport/callback_response'
11
+ require_relative './fake'
12
+
13
+ module PaynetEasy::PaynetEasyApi
14
+ class PaymentProcessorTest < Test::Unit::TestCase
15
+ include PaynetEasy::PaynetEasyApi::PaymentData
16
+ include PaynetEasy::PaynetEasyApi::Transport
17
+ include PaynetEasy::PaynetEasyApi::Query
18
+ include PaynetEasy::PaynetEasyApi::Callback
19
+ include PaynetEasy::PaynetEasyApi::Fake
20
+
21
+ def setup
22
+ @object = PaymentProcessor.new
23
+ @fake_query_factory = FakeQueryFactory.new
24
+ @fake_callback_factory = FakeCallbackFactory.new
25
+ @fake_gateway_client = FakeGatewayClient.new
26
+ end
27
+
28
+ def test_execute_query
29
+ [
30
+ [
31
+ 'status',
32
+ {
33
+ 'status' => 'approved',
34
+ 'type' => 'status-response',
35
+ 'paynet-order-id' => '_',
36
+ 'merchant-order-id' => '_',
37
+ 'serial-number' => '_'
38
+ },
39
+ PaymentProcessor::HANDLER_FINISH_PROCESSING
40
+ ],
41
+ [
42
+ 'sale-form',
43
+ {
44
+ 'redirect-url' => 'http://example.com',
45
+ 'type' => 'async-form-response',
46
+ 'paynet-order-id' => '_',
47
+ 'merchant-order-id' => '_',
48
+ 'serial-number' => '_'
49
+ },
50
+ PaymentProcessor::HANDLER_REDIRECT
51
+ ],
52
+ [
53
+ 'status',
54
+ {
55
+ 'html' => '<html></html>',
56
+ 'type' => 'status-response',
57
+ 'paynet-order-id' => '_',
58
+ 'merchant-order-id' => '_',
59
+ 'serial-number' => '_'
60
+ },
61
+ PaymentProcessor::HANDLER_SHOW_HTML
62
+ ],
63
+ [
64
+ 'status',
65
+ {
66
+ 'status' => 'processing',
67
+ 'type' => 'status-response',
68
+ 'paynet-order-id' => '_',
69
+ 'merchant-order-id' => '_',
70
+ 'serial-number' => '_'
71
+ },
72
+ PaymentProcessor::HANDLER_STATUS_UPDATE
73
+ ]
74
+ ].each do |query_name, response_data, handler_name|
75
+ assert_execute_query query_name, response_data, handler_name
76
+ end
77
+ end
78
+
79
+ def assert_execute_query(query_name, response_data, handler_name)
80
+ handler_called = false
81
+ handler = ->(*args){handler_called = true}
82
+
83
+ @fake_gateway_client.response = Response.new response_data
84
+ @object.gateway_client = @fake_gateway_client
85
+ @object.set_handler handler_name, &handler
86
+
87
+ assert_not_nil @object.execute_query(query_name, payment_transaction)
88
+ assert_true handler_called, "For query #{query_name} and handler #{handler_name}"
89
+ end
90
+
91
+ def test_execute_query_without_exception_handler
92
+ assert_raise_kind_of Exception do
93
+ @object.execute_query 'sale', PaymentTransaction.new
94
+ end
95
+ end
96
+
97
+ def test_execute_query_with_exception_on_create_request
98
+ handler_called = false
99
+ handler = ->(*args){handler_called = true}
100
+
101
+ @object.set_handler PaymentProcessor::HANDLER_CATCH_EXCEPTION, &handler
102
+ @object.execute_query 'sale', PaymentTransaction.new
103
+
104
+ assert_true handler_called
105
+ end
106
+
107
+ def test_execute_query_with_exception_on_process_response
108
+ handler_called = false
109
+ handler = ->(*args){handler_called = true}
110
+
111
+ exception_query = ExceptionQuery.new 'exception'
112
+ exception_query.request = Request.new
113
+ @fake_query_factory.query = exception_query
114
+ @fake_gateway_client.response = Response.new
115
+
116
+ @object.gateway_client = @fake_gateway_client
117
+ @object.query_factory = @fake_query_factory
118
+ @object.set_handler PaymentProcessor::HANDLER_CATCH_EXCEPTION, &handler
119
+
120
+ @object.execute_query 'exception', PaymentTransaction.new
121
+
122
+ assert_true handler_called
123
+ end
124
+
125
+ def test_process_customer_return
126
+ callback_response = CallbackResponse.new(
127
+ {
128
+ 'status' => 'approved',
129
+ 'orderid' => '_',
130
+ 'merchant_order' => '_',
131
+ 'client_orderid' => '_',
132
+ 'control' => '2c84ae87d73fa3dc116b3203e8bb1c133eed829d'
133
+ })
134
+
135
+ payment_transaction = payment_transaction()
136
+ payment_transaction.status = PaymentTransaction::STATUS_PROCESSING
137
+
138
+ handler_called = false
139
+ handler = ->(*args){handler_called = true}
140
+
141
+ @object.set_handler PaymentProcessor::HANDLER_FINISH_PROCESSING, &handler
142
+
143
+ assert_not_nil @object.process_customer_return callback_response, payment_transaction
144
+ assert_true handler_called
145
+ end
146
+
147
+ def test_process_paynet_easy_callback
148
+ handler_called = false
149
+ handler = ->(*args){handler_called = true}
150
+
151
+ @fake_callback_factory.callback = FakeCallback.new 'fake'
152
+ @object.callback_factory = @fake_callback_factory
153
+ @object.set_handler PaymentProcessor::HANDLER_FINISH_PROCESSING, &handler
154
+
155
+ assert_not_nil @object.process_paynet_easy_callback CallbackResponse.new({'type' => 'fake'}), payment_transaction
156
+ assert_true handler_called
157
+ end
158
+
159
+ def test_process_callback_on_finished_payment
160
+ handler_called = false
161
+ handler = ->(*args){handler_called = true}
162
+
163
+ @fake_callback_factory.callback = FakeCallback.new 'fake'
164
+ @object.callback_factory = @fake_callback_factory
165
+ @object.set_handler PaymentProcessor::HANDLER_FINISH_PROCESSING, &handler
166
+
167
+ @object.process_paynet_easy_callback CallbackResponse.new({'type' => 'fake'}), payment_transaction
168
+ assert_true handler_called
169
+ end
170
+
171
+ def test_process_paynet_easy_callback_with_exception
172
+ handler_called = false
173
+ handler = ->(*args){handler_called = true}
174
+
175
+ @object.set_handler PaymentProcessor::HANDLER_CATCH_EXCEPTION, &handler
176
+ @object.process_paynet_easy_callback CallbackResponse.new({'type' => 'sale'}), PaymentTransaction.new
177
+
178
+ assert_true handler_called
179
+ end
180
+
181
+ def test_handlers
182
+ @object.set_handlers(
183
+ {
184
+ PaymentProcessor::HANDLER_SAVE_CHANGES => ->(*args){},
185
+ PaymentProcessor::HANDLER_SHOW_HTML => ->(*args){}
186
+ })
187
+
188
+ assert_equal 2, @object.instance_variable_get(:@handlers).length
189
+ assert_true @object.send(:has_handler?, PaymentProcessor::HANDLER_SAVE_CHANGES)
190
+ assert_true @object.send(:has_handler?, PaymentProcessor::HANDLER_SHOW_HTML)
191
+
192
+ @object.remove_handler PaymentProcessor::HANDLER_SAVE_CHANGES
193
+
194
+ assert_equal 1, @object.instance_variable_get(:@handlers).length
195
+ assert_false @object.send(:has_handler?, PaymentProcessor::HANDLER_SAVE_CHANGES)
196
+ assert_true @object.send(:has_handler?, PaymentProcessor::HANDLER_SHOW_HTML)
197
+
198
+ @object.remove_handlers
199
+
200
+ assert_empty @object.instance_variable_get(:@handlers)
201
+ end
202
+
203
+ def test_call_handler
204
+ handler_called = false
205
+ handler = ->(*args){handler_called = true}
206
+
207
+ @object.set_handler PaymentProcessor::HANDLER_SAVE_CHANGES, &handler
208
+ @object.send :call_handler, PaymentProcessor::HANDLER_SAVE_CHANGES, PaymentTransaction.new, Response.new
209
+
210
+ assert_true handler_called
211
+ end
212
+
213
+ protected
214
+
215
+ # @return [PaymentTransaction]
216
+ def payment_transaction
217
+ PaymentTransaction.new(
218
+ {
219
+ 'payment' => Payment.new(
220
+ {
221
+ 'client_id' => '_',
222
+ 'paynet_id' => '_',
223
+ 'description' => 'This is test payment',
224
+ 'amount' => 99.1,
225
+ 'currency' => 'USD',
226
+ 'customer' => Customer.new(
227
+ {
228
+ 'first_name' => 'Vasya',
229
+ 'last_name' => 'Pupkin',
230
+ 'email' => 'vass.pupkin@example.com',
231
+ 'ip_address' => '127.0.0.1',
232
+ 'birthday' => '112681'
233
+ }),
234
+ 'billing_address' => BillingAddress.new(
235
+ {
236
+ 'country' => 'US',
237
+ 'state' => 'TX',
238
+ 'city' => 'Houston',
239
+ 'first_line' => '2704 Colonial Drive',
240
+ 'zip_code' => '1235',
241
+ 'phone' => '660-485-6353',
242
+ 'cell_phone' => '660-485-6353'
243
+ })
244
+ }),
245
+ 'query_config' => QueryConfig.new(
246
+ {
247
+ 'login' => '_',
248
+ 'redirect_url' => 'http://example.com',
249
+ 'gateway_url_sandbox' => 'http://example.com/sandbox',
250
+ 'signing_key' => 'key'
251
+ })
252
+ });
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,48 @@
1
+ require_relative './prototype/payment_query_test_prototype'
2
+ require 'query/capture_query'
3
+ require 'payment_data/payment'
4
+
5
+ module PaynetEasy::PaynetEasyApi::Query
6
+ class CaptureQueryTest < Test::Unit::TestCase
7
+ include Prototype::PaymentQueryTestPrototype
8
+
9
+ def test_create_request
10
+ [
11
+ create_control_code(
12
+ LOGIN,
13
+ CLIENT_ID,
14
+ PAYNET_ID,
15
+ 9910,
16
+ 'EUR',
17
+ SIGNING_KEY
18
+ )
19
+ ].each do |control_code|
20
+ assert_create_request control_code
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def payment
27
+ Payment.new(
28
+ {
29
+ 'client_id' => CLIENT_ID,
30
+ 'paynet_id' => PAYNET_ID,
31
+ 'amount' => 99.1,
32
+ 'currency' => 'EUR'
33
+ })
34
+ end
35
+
36
+ def query
37
+ CaptureQuery.new api_method
38
+ end
39
+
40
+ def payment_status
41
+ Payment::STATUS_CAPTURE
42
+ end
43
+
44
+ def api_method
45
+ 'capture'
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,116 @@
1
+ require_relative './prototype/sync_query_test_prototype'
2
+ require 'query/create_card_ref_query'
3
+
4
+ module PaynetEasy::PaynetEasyApi::Query
5
+ class CreateCardRefQueryTest < Test::Unit::TestCase
6
+ include Prototype::SyncQueryTestPrototype
7
+
8
+ def test_create_request
9
+ [
10
+ create_control_code(
11
+ LOGIN,
12
+ CLIENT_ID,
13
+ PAYNET_ID,
14
+ SIGNING_KEY
15
+ )
16
+ ].each do |control_code|
17
+ assert_create_request control_code
18
+ end
19
+ end
20
+
21
+ def test_create_request_with_empty_fields
22
+ payment_transaction = PaymentTransaction.new(
23
+ {
24
+ 'payment' => Payment.new(
25
+ {
26
+ 'status' => Payment::STATUS_CAPTURE
27
+ }),
28
+ 'query_config' => QueryConfig.new(
29
+ {
30
+ 'signing_key' => SIGNING_KEY
31
+ }),
32
+ 'status' => PaymentTransaction::STATUS_APPROVED
33
+ })
34
+
35
+ assert_raise ValidationError, 'Some required fields missed or empty in Payment' do
36
+ query.create_request payment_transaction
37
+ end
38
+ end
39
+
40
+ alias :sync_query_test_payment_transaction :payment_transaction
41
+
42
+ def test_create_request_with_not_ended_payment
43
+ assert_raise ValidationError, 'Only finished payment transaction can be used for create-card-ref-id' do
44
+ query.create_request sync_query_test_payment_transaction
45
+ end
46
+ end
47
+
48
+ def test_create_request_with_new_payment
49
+ payment = Payment.new(
50
+ {
51
+ 'client_id' => CLIENT_ID,
52
+ 'paynet_id' => PAYNET_ID
53
+ })
54
+
55
+ payment_transaction = payment_transaction()
56
+ payment_transaction.payment = payment
57
+
58
+ assert_raise ValidationError, 'Can not use new payment for create-card-ref-id' do
59
+ query.create_request payment_transaction
60
+ end
61
+ end
62
+
63
+ def test_process_success_response_with_empty_fields
64
+ response = Response.new(
65
+ {
66
+ 'type' => success_type,
67
+ 'status' => 'processing',
68
+ 'paynet-order-id' => PAYNET_ID,
69
+ 'merchant-order-id' => CLIENT_ID,
70
+ 'serial-number' => '_'
71
+ })
72
+
73
+ assert_raise ValidationError, 'Some required fields missed or empty in Response: card-ref-id' do
74
+ query.process_response payment_transaction, response
75
+ end
76
+ end
77
+
78
+ def test_process_response_approved
79
+ [
80
+ {
81
+ 'type' => success_type,
82
+ 'status' => 'approved',
83
+ 'card-ref-id' => RECURRENT_CARD_FROM_ID,
84
+ 'serial-number' => '_'
85
+ }
86
+ ].each do |response|
87
+ assert_process_response_approved response
88
+ end
89
+ end
90
+
91
+ protected
92
+
93
+ def payment_transaction
94
+ payment_transaction = sync_query_test_payment_transaction
95
+ payment_transaction.status = PaymentTransaction::STATUS_APPROVED
96
+ payment_transaction
97
+ end
98
+
99
+ def payment
100
+ Payment.new(
101
+ {
102
+ 'client_id' => CLIENT_ID,
103
+ 'paynet_id' => PAYNET_ID,
104
+ 'status' => Payment::STATUS_PREAUTH
105
+ })
106
+ end
107
+
108
+ def success_type
109
+ 'create-card-ref-response'
110
+ end
111
+
112
+ def query
113
+ CreateCardRefQuery.new '_'
114
+ end
115
+ end
116
+ end