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.
- data/.gemtest +0 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +18 -0
- data/README.md +54 -0
- data/Rakefile +8 -0
- data/doc/00-basic-tutorial.md +254 -0
- data/doc/01-library-internals.md +6 -0
- data/doc/02-payment-scenarios.md +9 -0
- data/doc/library-internals/00-payment-data.md +162 -0
- data/doc/library-internals/01-payment-processor.md +163 -0
- data/doc/library-internals/02-validator.md +55 -0
- data/doc/library-internals/03-property-accessor.md +76 -0
- data/doc/payment-scenarios/00-sale-transactions.md +90 -0
- data/doc/payment-scenarios/01-preauth-capture-transactions.md +105 -0
- data/doc/payment-scenarios/02-transfer-transactions.md +89 -0
- data/doc/payment-scenarios/03-return-transactions.md +52 -0
- data/doc/payment-scenarios/04-recurrent-transactions.md +110 -0
- data/doc/payment-scenarios/05-payment-form-integration.md +59 -0
- data/doc/payment-scenarios/06-merchant-callbacks.md +29 -0
- data/example/capture.rb +12 -0
- data/example/common/functions.rb +56 -0
- data/lib/paynet_easy/paynet_easy_api/callback/callback_factory.rb +47 -0
- data/lib/paynet_easy/paynet_easy_api/callback/callback_prototype.rb +186 -0
- data/lib/paynet_easy/paynet_easy_api/callback/customer_return_callback.rb +28 -0
- data/lib/paynet_easy/paynet_easy_api/callback/paynet_easy_callback.rb +44 -0
- data/lib/paynet_easy/paynet_easy_api/error/paynet_error.rb +4 -0
- data/lib/paynet_easy/paynet_easy_api/error/request_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/error/response_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/error/validation_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/billing_address.rb +41 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/credit_card.rb +32 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/customer.rb +35 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/data.rb +13 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/payment.rb +190 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/payment_transaction.rb +188 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/query_config.rb +95 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/recurrent_card.rb +40 -0
- data/lib/paynet_easy/paynet_easy_api/payment_processor.rb +251 -0
- data/lib/paynet_easy/paynet_easy_api/paynet_easy_api.rb +26 -0
- data/lib/paynet_easy/paynet_easy_api/query/capture_query.rb +30 -0
- data/lib/paynet_easy/paynet_easy_api/query/create_card_ref_query.rb +78 -0
- data/lib/paynet_easy/paynet_easy_api/query/get_card_info_query.rb +49 -0
- data/lib/paynet_easy/paynet_easy_api/query/make_rebill_query.rb +37 -0
- data/lib/paynet_easy/paynet_easy_api/query/preauth_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/preauth_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_form_query.rb +69 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_query.rb +71 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/query.rb +302 -0
- data/lib/paynet_easy/paynet_easy_api/query/query_factory.rb +19 -0
- data/lib/paynet_easy/paynet_easy_api/query/return_query.rb +46 -0
- data/lib/paynet_easy/paynet_easy_api/query/sale_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/sale_query.rb +53 -0
- data/lib/paynet_easy/paynet_easy_api/query/status_query.rb +50 -0
- data/lib/paynet_easy/paynet_easy_api/query/transfer_by_ref_query.rb +41 -0
- data/lib/paynet_easy/paynet_easy_api/query/transfer_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/transport/callback_response.rb +21 -0
- data/lib/paynet_easy/paynet_easy_api/transport/gateway_client.rb +91 -0
- data/lib/paynet_easy/paynet_easy_api/transport/request.rb +20 -0
- data/lib/paynet_easy/paynet_easy_api/transport/response.rb +136 -0
- data/lib/paynet_easy/paynet_easy_api/util/property_accessor.rb +60 -0
- data/lib/paynet_easy/paynet_easy_api/util/string.rb +9 -0
- data/lib/paynet_easy/paynet_easy_api/util/validator.rb +110 -0
- data/payneteasy-payneteasyapi.gemspec +16 -0
- data/test/paynet_easy/paynet_easy_api/callback/callback_factory_test.rb +22 -0
- data/test/paynet_easy/paynet_easy_api/callback/callback_test_prototype.rb +168 -0
- data/test/paynet_easy/paynet_easy_api/callback/customer_return_callback_test.rb +95 -0
- data/test/paynet_easy/paynet_easy_api/callback/paynet_easy_callback_test.rb +101 -0
- data/test/paynet_easy/paynet_easy_api/fake.rb +71 -0
- data/test/paynet_easy/paynet_easy_api/payment_processor_test.rb +255 -0
- data/test/paynet_easy/paynet_easy_api/query/capture_query_test.rb +48 -0
- data/test/paynet_easy/paynet_easy_api/query/create_card_ref_query_test.rb +116 -0
- data/test/paynet_easy/paynet_easy_api/query/get_card_info_query_test.rb +116 -0
- data/test/paynet_easy/paynet_easy_api/query/make_rebill_query_test.rb +59 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/payment_query_test_prototype.rb +117 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/query_test_prototype.rb +190 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/sync_query_test_prototype.rb +88 -0
- data/test/paynet_easy/paynet_easy_api/query/query_factory_test.rb +21 -0
- data/test/paynet_easy/paynet_easy_api/query/return_query_test.rb +58 -0
- data/test/paynet_easy/paynet_easy_api/query/sale_form_query_test.rb +96 -0
- data/test/paynet_easy/paynet_easy_api/query/sale_query_test.rb +78 -0
- data/test/paynet_easy/paynet_easy_api/query/status_query_test.rb +81 -0
- data/test/paynet_easy/paynet_easy_api/query/transfer_by_ref_query_test.rb +63 -0
- data/test/paynet_easy/paynet_easy_api/transport/gateway_client_test.rb +22 -0
- data/test/paynet_easy/paynet_easy_api/transport/response_test.rb +26 -0
- data/test/paynet_easy/paynet_easy_api/util/property_accessor_test.rb +52 -0
- data/test/paynet_easy/paynet_easy_api/util/validator_test.rb +42 -0
- 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
|