barzahlen 1.0.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 +7 -0
- data/Gemfile +3 -0
- data/README.md +207 -0
- data/Rakefile +3 -0
- data/bin/test.rb +30 -0
- data/lib/barzahlen/api/online/api.rb +67 -0
- data/lib/barzahlen/api/online/hash_builder.rb +43 -0
- data/lib/barzahlen/api/online/http.rb +31 -0
- data/lib/barzahlen/api/online/notification_handler.rb +50 -0
- data/lib/barzahlen/api/online/response_parser.rb +26 -0
- data/lib/barzahlen/api/online/transaction.rb +57 -0
- data/lib/barzahlen/api/online/version.rb +9 -0
- data/lib/barzahlen/api/online.rb +58 -0
- data/lib/ruby_sdk/version.rb +3 -0
- data/lib/ruby_sdk.rb +5 -0
- data/spec/barzahlen/api/online/api_spec.rb +86 -0
- data/spec/barzahlen/api/online/hash_builder_spec.rb +15 -0
- data/spec/barzahlen/api/online/http_spec.rb +13 -0
- data/spec/barzahlen/api/online/notification_handler_spec.rb +240 -0
- data/spec/barzahlen/api/online/response_parser_spec.rb +99 -0
- data/spec/barzahlen/api/online/transaction_spec.rb +108 -0
- data/spec/barzahlen/api/online_spec.rb +34 -0
- data/spec/spec_helper.rb +8 -0
- metadata +155 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Barzahlen::Api::Online::Api do
|
6
|
+
context 'request' do
|
7
|
+
it 'should call the correct url' do
|
8
|
+
http = double('Barzahlen::Online::Api:Http')
|
9
|
+
http.should_receive(:request)
|
10
|
+
.with(URI('https://api.barzahlen.de/path'), anything)
|
11
|
+
.and_return(get_successful_http_response)
|
12
|
+
|
13
|
+
api = Barzahlen::Api::Online::Api.new http, get_config
|
14
|
+
api.request 'path', :payment_key, [], {}
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should pass the correct parameters' do
|
18
|
+
http = double('Barzahlen::Online::Api:Http')
|
19
|
+
http.should_receive(:request)
|
20
|
+
.with(anything, :foo1 => 'foo1', :foo2 => 'bar2', :foo3 => 'bar3', :shop_id => 12345,
|
21
|
+
:hash => '539a7a8cf60febe6865ecb64369e8df819940249cbd6cdbe1a3ff72d3ca7087b1fdcd5c9396f2a0da6bced901364bfc5a2a4430b8dd405b96a4705c533eedeb0')
|
22
|
+
.and_return(get_successful_http_response)
|
23
|
+
|
24
|
+
api = Barzahlen::Api::Online::Api.new(http, get_config)
|
25
|
+
api.request 'path', :payment_key, [:foo1, :foo2, :foo3, :payment_key],
|
26
|
+
:foo1 => 'foo1', :foo2 => 'bar2', :foo3 => 'bar3'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should return the correct result' do
|
30
|
+
http = double('Barzahlen::Online::Api:Http')
|
31
|
+
allow(http).to receive(:request).and_return(get_successful_http_response)
|
32
|
+
|
33
|
+
api = Barzahlen::Api::Online::Api.new http, get_config
|
34
|
+
result = api.request 'path', :payment_key, [], {}
|
35
|
+
|
36
|
+
result.should == {
|
37
|
+
:transaction_id => '227840174',
|
38
|
+
:result => '0',
|
39
|
+
:hash => '0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9'
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should raise a runtime error on a response code that different to 200' do
|
44
|
+
http = double('Barzahlen::Online::Api:Http')
|
45
|
+
allow(http).to receive(:request).and_return(get_http_response('500', 'error'))
|
46
|
+
|
47
|
+
api = Barzahlen::Api::Online::Api.new http, get_config
|
48
|
+
expect { api.request 'path', :payment_key, [], {} }.to raise_error
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'build_hash' do
|
53
|
+
it 'should generate hash' do
|
54
|
+
http = double('Barzahlen::Online::Api:Http')
|
55
|
+
|
56
|
+
parameters_order = [:foo1, :foo2, :foo3, :payment_key]
|
57
|
+
|
58
|
+
api = Barzahlen::Api::Online::Api.new http, get_config
|
59
|
+
hash = api.build_hash :payment_key, parameters_order,
|
60
|
+
:foo1 => 'foo1', :foo2 => 'bar2', :foo3 => 'bar3'
|
61
|
+
|
62
|
+
hash.should == '539a7a8cf60febe6865ecb64369e8df819940249cbd6cdbe1a3ff72d3ca7087b1fdcd5c9396f2a0da6bced901364bfc5a2a4430b8dd405b96a4705c533eedeb0'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
def get_config
|
68
|
+
{:host => 'api.barzahlen.de',
|
69
|
+
:shop_id => 12345,
|
70
|
+
:payment_key => 'foobarfoobar',
|
71
|
+
:notification_key => 'barfoobarfoo',
|
72
|
+
:language => 'de',}
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_successful_http_response
|
76
|
+
get_http_response '200', "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response><transaction-id>227840174</transaction-id><result>0</result><hash>0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9</hash></response>"
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_http_response(code, body)
|
80
|
+
http_response = double 'Net::HTTPResponse'
|
81
|
+
allow(http_response).to receive(:code).and_return(code)
|
82
|
+
allow(http_response).to receive(:body).and_return(body)
|
83
|
+
|
84
|
+
http_response
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Barzahlen::Api::Online::HashBuilder do
|
6
|
+
it 'should generate hash' do
|
7
|
+
parameters_order = [:foo1, :foo2, :foo3, :payment_key]
|
8
|
+
key_parameter_name = :payment_key
|
9
|
+
|
10
|
+
hash_builder = Barzahlen::Api::Online::HashBuilder.new(parameters_order, key_parameter_name)
|
11
|
+
hash = hash_builder.build_hash 'foobarfoobar', :foo1 => 'foo1', :foo2 => 'bar2', :foo3 => 'bar3'
|
12
|
+
|
13
|
+
hash.should == '539a7a8cf60febe6865ecb64369e8df819940249cbd6cdbe1a3ff72d3ca7087b1fdcd5c9396f2a0da6bced901364bfc5a2a4430b8dd405b96a4705c533eedeb0'
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'net/http'
|
5
|
+
|
6
|
+
describe Barzahlen::Api::Online::Http do
|
7
|
+
it 'should return HTTPResponse' do
|
8
|
+
http = Barzahlen::Api::Online::Http.new
|
9
|
+
response = http.request URI('http://www.barzahlen.de/'), {}
|
10
|
+
|
11
|
+
expect(response).to be_a Net::HTTPResponse
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,240 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Barzahlen::Api::Online::NotificationHandler do
|
6
|
+
context 'validate_request TRANSACTION_PAID' do
|
7
|
+
it 'should return correct request on transaction-paid notification' do
|
8
|
+
request_parameters = {
|
9
|
+
:state => Barzahlen::Api::Online::NotificationHandler::TRANSACTION_PAID,
|
10
|
+
:transaction_id => '123',
|
11
|
+
:shop_id => '456',
|
12
|
+
:customer_email => 'foo@example.com',
|
13
|
+
:amount => '13.37',
|
14
|
+
:currency => 'EUR',
|
15
|
+
:order_id => '123',
|
16
|
+
:custom_var_0 => 'custom_var_0',
|
17
|
+
:custom_var_1 => 'custom_var_1',
|
18
|
+
:custom_var_2 => 'custom_var_2',
|
19
|
+
:hash => 'some hash'
|
20
|
+
}
|
21
|
+
|
22
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
23
|
+
request = notification_handler.validate_request(request_parameters)
|
24
|
+
request.should == {
|
25
|
+
:state => Barzahlen::Api::Online::NotificationHandler::TRANSACTION_PAID,
|
26
|
+
:transaction_id => '123',
|
27
|
+
:shop_id => '456',
|
28
|
+
:customer_email => 'foo@example.com',
|
29
|
+
:amount => '13.37',
|
30
|
+
:currency => 'EUR',
|
31
|
+
:order_id => '123',
|
32
|
+
:custom_var_0 => 'custom_var_0',
|
33
|
+
:custom_var_1 => 'custom_var_1',
|
34
|
+
:custom_var_2 => 'custom_var_2',
|
35
|
+
:hash => 'some hash'
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should raise a runtime error on wrong hash on transaction-paid notification' do
|
40
|
+
request_parameters = {
|
41
|
+
:state => Barzahlen::Api::Online::NotificationHandler::TRANSACTION_PAID,
|
42
|
+
:transaction_id => '123',
|
43
|
+
:shop_id => '456',
|
44
|
+
:customer_email => 'foo@example.com',
|
45
|
+
:amount => '13.37',
|
46
|
+
:currency => 'EUR',
|
47
|
+
:order_id => '123',
|
48
|
+
:custom_var_0 => 'custom_var_0',
|
49
|
+
:custom_var_1 => 'custom_var_1',
|
50
|
+
:custom_var_2 => 'custom_var_2',
|
51
|
+
:hash => '1111'
|
52
|
+
}
|
53
|
+
|
54
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
55
|
+
expect { notification_handler.validate_request(request_parameters) }.to raise_error
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'validate_request TRANSACTION_EXPIRED' do
|
60
|
+
it 'should return correct request on transaction-expired notification' do
|
61
|
+
request_parameters = {
|
62
|
+
:state => Barzahlen::Api::Online::NotificationHandler::TRANSACTION_EXPIRED,
|
63
|
+
:transaction_id => '123',
|
64
|
+
:shop_id => '456',
|
65
|
+
:customer_email => 'foo@example.com',
|
66
|
+
:amount => '13.37',
|
67
|
+
:currency => 'EUR',
|
68
|
+
:order_id => '123',
|
69
|
+
:custom_var_0 => 'custom_var_0',
|
70
|
+
:custom_var_1 => 'custom_var_1',
|
71
|
+
:custom_var_2 => 'custom_var_2',
|
72
|
+
:hash => 'some hash'
|
73
|
+
}
|
74
|
+
|
75
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
76
|
+
request = notification_handler.validate_request(request_parameters)
|
77
|
+
request.should == {
|
78
|
+
:state => Barzahlen::Api::Online::NotificationHandler::TRANSACTION_EXPIRED,
|
79
|
+
:transaction_id => '123',
|
80
|
+
:shop_id => '456',
|
81
|
+
:customer_email => 'foo@example.com',
|
82
|
+
:amount => '13.37',
|
83
|
+
:currency => 'EUR',
|
84
|
+
:order_id => '123',
|
85
|
+
:custom_var_0 => 'custom_var_0',
|
86
|
+
:custom_var_1 => 'custom_var_1',
|
87
|
+
:custom_var_2 => 'custom_var_2',
|
88
|
+
:hash => 'some hash'
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should raise a runtime error on wrong hash on transaction-expired notification' do
|
93
|
+
request_parameters = {
|
94
|
+
:state => Barzahlen::Api::Online::NotificationHandler::TRANSACTION_EXPIRED,
|
95
|
+
:transaction_id => '123',
|
96
|
+
:shop_id => '456',
|
97
|
+
:customer_email => 'foo@example.com',
|
98
|
+
:amount => '13.37',
|
99
|
+
:currency => 'EUR',
|
100
|
+
:order_id => '123',
|
101
|
+
:custom_var_0 => 'custom_var_0',
|
102
|
+
:custom_var_1 => 'custom_var_1',
|
103
|
+
:custom_var_2 => 'custom_var_2',
|
104
|
+
:hash => '2222'
|
105
|
+
}
|
106
|
+
|
107
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
108
|
+
expect { notification_handler.validate_request(request_parameters) }.to raise_error
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'validate_request REFUND_COMPLETED' do
|
113
|
+
it 'should return correct request on refund-completed notification' do
|
114
|
+
request_parameters = {
|
115
|
+
:state => Barzahlen::Api::Online::NotificationHandler::REFUND_COMPLETED,
|
116
|
+
:refund_transaction_id => '123',
|
117
|
+
:origin_transaction_id => '444',
|
118
|
+
:shop_id => '456',
|
119
|
+
:customer_email => 'foo@example.com',
|
120
|
+
:amount => '13.37',
|
121
|
+
:currency => 'EUR',
|
122
|
+
:origin_order_id => '123',
|
123
|
+
:custom_var_0 => 'custom_var_0',
|
124
|
+
:custom_var_1 => 'custom_var_1',
|
125
|
+
:custom_var_2 => 'custom_var_2',
|
126
|
+
:hash => 'some hash'
|
127
|
+
}
|
128
|
+
|
129
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
130
|
+
request = notification_handler.validate_request(request_parameters)
|
131
|
+
request.should == {
|
132
|
+
:state => Barzahlen::Api::Online::NotificationHandler::REFUND_COMPLETED,
|
133
|
+
:refund_transaction_id => '123',
|
134
|
+
:origin_transaction_id => '444',
|
135
|
+
:shop_id => '456',
|
136
|
+
:customer_email => 'foo@example.com',
|
137
|
+
:amount => '13.37',
|
138
|
+
:currency => 'EUR',
|
139
|
+
:origin_order_id => '123',
|
140
|
+
:custom_var_0 => 'custom_var_0',
|
141
|
+
:custom_var_1 => 'custom_var_1',
|
142
|
+
:custom_var_2 => 'custom_var_2',
|
143
|
+
:hash => 'some hash'
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should raise a runtime error on wrong hash on refund-complete notification' do
|
148
|
+
request_parameters = {
|
149
|
+
:state => Barzahlen::Api::Online::NotificationHandler::REFUND_COMPLETED,
|
150
|
+
:refund_transaction_id => '123',
|
151
|
+
:origin_transaction_id => '111',
|
152
|
+
:shop_id => '456',
|
153
|
+
:customer_email => 'foo@example.com',
|
154
|
+
:amount => '13.37',
|
155
|
+
:currency => 'EUR',
|
156
|
+
:origin_order_id => '123',
|
157
|
+
:custom_var_0 => 'custom_var_0',
|
158
|
+
:custom_var_1 => 'custom_var_1',
|
159
|
+
:custom_var_2 => 'custom_var_2',
|
160
|
+
:hash => '333'
|
161
|
+
}
|
162
|
+
|
163
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
164
|
+
expect { notification_handler.validate_request(request_parameters) }.to raise_error
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context 'validate_request REFUND_EXPIRED' do
|
169
|
+
it 'should return correct request on refund-expired notification' do
|
170
|
+
request_parameters = {
|
171
|
+
:state => Barzahlen::Api::Online::NotificationHandler::REFUND_EXPIRED,
|
172
|
+
:refund_transaction_id => '123',
|
173
|
+
:origin_transaction_id => '444',
|
174
|
+
:shop_id => '456',
|
175
|
+
:customer_email => 'foo@example.com',
|
176
|
+
:amount => '13.37',
|
177
|
+
:currency => 'EUR',
|
178
|
+
:origin_order_id => '123',
|
179
|
+
:custom_var_0 => 'custom_var_0',
|
180
|
+
:custom_var_1 => 'custom_var_1',
|
181
|
+
:custom_var_2 => 'custom_var_2',
|
182
|
+
:hash => 'some hash'
|
183
|
+
}
|
184
|
+
|
185
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
186
|
+
request = notification_handler.validate_request(request_parameters)
|
187
|
+
request.should == {
|
188
|
+
:state => Barzahlen::Api::Online::NotificationHandler::REFUND_EXPIRED,
|
189
|
+
:refund_transaction_id => '123',
|
190
|
+
:origin_transaction_id => '444',
|
191
|
+
:shop_id => '456',
|
192
|
+
:customer_email => 'foo@example.com',
|
193
|
+
:amount => '13.37',
|
194
|
+
:currency => 'EUR',
|
195
|
+
:origin_order_id => '123',
|
196
|
+
:custom_var_0 => 'custom_var_0',
|
197
|
+
:custom_var_1 => 'custom_var_1',
|
198
|
+
:custom_var_2 => 'custom_var_2',
|
199
|
+
:hash => 'some hash'
|
200
|
+
}
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'should raise a runtime error on wrong hash on refund-complete notification' do
|
204
|
+
request_parameters = {
|
205
|
+
:state => Barzahlen::Api::Online::NotificationHandler::REFUND_EXPIRED,
|
206
|
+
:refund_transaction_id => '123',
|
207
|
+
:origin_transaction_id => '123',
|
208
|
+
:shop_id => '456',
|
209
|
+
:customer_email => 'foo@example.com',
|
210
|
+
:amount => '13.37',
|
211
|
+
:currency => 'EUR',
|
212
|
+
:origin_order_id => '123',
|
213
|
+
:custom_var_0 => 'custom_var_0',
|
214
|
+
:custom_var_1 => 'custom_var_1',
|
215
|
+
:custom_var_2 => 'custom_var_2',
|
216
|
+
:hash => '444'
|
217
|
+
}
|
218
|
+
|
219
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
220
|
+
expect { notification_handler.validate_request(request_parameters) }.to raise_error
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'should raise a runtime error on wrong state' do
|
225
|
+
request_parameters = {
|
226
|
+
:state => 'foobar',
|
227
|
+
:hash => 'hash'
|
228
|
+
}
|
229
|
+
|
230
|
+
notification_handler = Barzahlen::Api::Online::NotificationHandler.new get_api
|
231
|
+
expect { notification_handler.validate_request(request_parameters) }.to raise_error
|
232
|
+
end
|
233
|
+
|
234
|
+
private
|
235
|
+
def get_api
|
236
|
+
api = double 'Barzahlen::Api::Online::Api'
|
237
|
+
allow(api).to receive(:build_hash).and_return('some hash')
|
238
|
+
api
|
239
|
+
end
|
240
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Barzahlen::Api::Online::ResponseParser do
|
6
|
+
it 'should return correct hash when passing transaction-create-xml' do
|
7
|
+
xml = '<response>
|
8
|
+
<transaction-id>227840174</transaction-id>
|
9
|
+
<payment-slip-link>https://cdn.barzahlen.de/slip/227840174/c91dc292bdb8f0ba1a83c738119ef13e652a43b8a8f261cf93d3bfbf233d7da2/Zahlschein_Barzahlen_227840174.pdf</payment-slip-link>
|
10
|
+
<expiration-notice>Der Zahlschein ist 2 Wochen gültig.</expiration-notice>
|
11
|
+
<infotext-1>Text mit einem <a href="http://www.barzahlen.de" target="_blank">Link</a></infotext-1>
|
12
|
+
<infotext-2>Text mit einem <a href="http://www.barzahlen.de" target="_blank">Link</a></infotext-2>
|
13
|
+
<result>0</result>
|
14
|
+
<hash>c5422fbcbaba04d65598cd847f2f91b1a18c6b0dc5eab927302affe235e6c37976307e23eef645b43b13c7d3cfbbbca9349247449a49b8aebcdd9b0a2554a893</hash>
|
15
|
+
</response>'
|
16
|
+
|
17
|
+
result = Barzahlen::Api::Online::ResponseParser.parse xml
|
18
|
+
|
19
|
+
result.should == {
|
20
|
+
:transaction_id => '227840174',
|
21
|
+
:payment_slip_link => 'https://cdn.barzahlen.de/slip/227840174/c91dc292bdb8f0ba1a83c738119ef13e652a43b8a8f261cf93d3bfbf233d7da2/Zahlschein_Barzahlen_227840174.pdf',
|
22
|
+
:expiration_notice => 'Der Zahlschein ist 2 Wochen gültig.',
|
23
|
+
:infotext_1 => 'Text mit einem <a href="http://www.barzahlen.de" target="_blank">Link</a>',
|
24
|
+
:infotext_2 => 'Text mit einem <a href="http://www.barzahlen.de" target="_blank">Link</a>',
|
25
|
+
:result => '0',
|
26
|
+
:hash => 'c5422fbcbaba04d65598cd847f2f91b1a18c6b0dc5eab927302affe235e6c37976307e23eef645b43b13c7d3cfbbbca9349247449a49b8aebcdd9b0a2554a893'
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should return correct hash when passing transaction-update-xml' do
|
31
|
+
xml = '<?xml version="1.0" encoding="UTF-8"?>
|
32
|
+
<response>
|
33
|
+
<transaction-id>227840174</transaction-id>
|
34
|
+
<result>0</result>
|
35
|
+
<hash>0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9</hash>
|
36
|
+
</response>'
|
37
|
+
|
38
|
+
result = Barzahlen::Api::Online::ResponseParser.parse xml
|
39
|
+
|
40
|
+
result.should == {
|
41
|
+
:transaction_id => '227840174',
|
42
|
+
:result => '0',
|
43
|
+
:hash => '0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9'
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should return correct hash when passing transaction-resend-email-xml' do
|
48
|
+
xml = '<?xml version="1.0" encoding="UTF-8"?>
|
49
|
+
<response>
|
50
|
+
<transaction-id>227840174</transaction-id>
|
51
|
+
<result>0</result>
|
52
|
+
<hash>0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9</hash>
|
53
|
+
</response>'
|
54
|
+
|
55
|
+
result = Barzahlen::Api::Online::ResponseParser.parse xml
|
56
|
+
|
57
|
+
result.should == {
|
58
|
+
:transaction_id => '227840174',
|
59
|
+
:result => '0',
|
60
|
+
:hash => '0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9'
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should return correct hash when passing transaction-cancel-xml' do
|
65
|
+
xml = '<?xml version="1.0" encoding="UTF-8"?>
|
66
|
+
<response>
|
67
|
+
<transaction-id>227840174</transaction-id>
|
68
|
+
<result>0</result>
|
69
|
+
<hash>0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9</hash>
|
70
|
+
</response>'
|
71
|
+
|
72
|
+
result = Barzahlen::Api::Online::ResponseParser.parse xml
|
73
|
+
|
74
|
+
result.should == {
|
75
|
+
:transaction_id => '227840174',
|
76
|
+
:result => '0',
|
77
|
+
:hash => '0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9'
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should return correct hash when passing transaction-refund-xml' do
|
82
|
+
xml = '<?xml version="1.0" encoding="UTF-8"?>
|
83
|
+
<response>
|
84
|
+
<origin-transaction-id>22780174</origin-transaction-id>
|
85
|
+
<refund-transaction-id>22791842</refund-transaction-id>
|
86
|
+
<result>0</result>
|
87
|
+
<hash>0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9</hash>
|
88
|
+
</response>'
|
89
|
+
|
90
|
+
result = Barzahlen::Api::Online::ResponseParser.parse xml
|
91
|
+
|
92
|
+
result.should == {
|
93
|
+
:origin_transaction_id => '22780174',
|
94
|
+
:refund_transaction_id => '22791842',
|
95
|
+
:result => '0',
|
96
|
+
:hash => '0714be1522e16fe67f397767c98cf37e37fd9c2a5391f49f8b01cb66642150751c77a0cce1ef7268e7bdeee792ed63eab53ef9b860f721c9d9d47ffc871ee3f9'
|
97
|
+
}
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'net/http'
|
5
|
+
|
6
|
+
describe Barzahlen::Api::Online::Transaction do
|
7
|
+
context 'create' do
|
8
|
+
it 'should send correct request to api' do
|
9
|
+
api = create_api
|
10
|
+
api.should_receive(:request)
|
11
|
+
.with('v1/transactions/create', :payment_key,
|
12
|
+
[:shop_id, :customer_email, :amount, :currency, :language, :order_id, :customer_street_nr,
|
13
|
+
:customer_zipcode, :customer_city, :customer_country, :custom_var_0, :custom_var_1, :custom_var_2,
|
14
|
+
:payment_key],
|
15
|
+
:customer_email => 'barzahlen@example.com',
|
16
|
+
:amount => '13.37',
|
17
|
+
:currency => 'EUR',
|
18
|
+
:order_id => '123',
|
19
|
+
:customer_street_nr => 'Wallstr. 14a',
|
20
|
+
:customer_zipcode => '10179',
|
21
|
+
:customer_city => 'Berlin',
|
22
|
+
:customer_country => 'DE',
|
23
|
+
:customer_custom_var_0 => 'customer_custom_var_0',
|
24
|
+
:customer_custom_var_1 => 'customer_custom_var_1',
|
25
|
+
:customer_custom_var_2 => 'customer_custom_var_2',)
|
26
|
+
|
27
|
+
transaction = Barzahlen::Api::Online::Transaction.new api
|
28
|
+
transaction.create(:customer_email => 'barzahlen@example.com',
|
29
|
+
:amount => '13.37',
|
30
|
+
:currency => 'EUR',
|
31
|
+
:order_id => '123',
|
32
|
+
:customer_street_nr => 'Wallstr. 14a',
|
33
|
+
:customer_zipcode => '10179',
|
34
|
+
:customer_city => 'Berlin',
|
35
|
+
:customer_country => 'DE',
|
36
|
+
:customer_custom_var_0 => 'customer_custom_var_0',
|
37
|
+
:customer_custom_var_1 => 'customer_custom_var_1',
|
38
|
+
:customer_custom_var_2 => 'customer_custom_var_2',)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'update_order_id' do
|
43
|
+
it 'should send correct request to api' do
|
44
|
+
api = create_api
|
45
|
+
api.should_receive(:request)
|
46
|
+
.with('v1/transactions/update', :payment_key,
|
47
|
+
[:shop_id, :transaction_id, :order_id, :payment_key],
|
48
|
+
:transaction_id => '123',
|
49
|
+
:order_id => '456')
|
50
|
+
|
51
|
+
transaction = Barzahlen::Api::Online::Transaction.new api
|
52
|
+
transaction.update_order_id '123', '456'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'resend_email' do
|
57
|
+
it 'should send correct request to api' do
|
58
|
+
api = create_api
|
59
|
+
api.should_receive(:request)
|
60
|
+
.with('v1/transactions/resend_email', :payment_key,
|
61
|
+
[:shop_id, :transaction_id, :language, :payment_key],
|
62
|
+
:transaction_id => '123',
|
63
|
+
:language => 'de')
|
64
|
+
|
65
|
+
transaction = Barzahlen::Api::Online::Transaction.new api
|
66
|
+
transaction.resend_email '123', 'de'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'cancel' do
|
71
|
+
it 'should send correct request to api' do
|
72
|
+
api = create_api
|
73
|
+
api.should_receive(:request)
|
74
|
+
.with('v1/transactions/cancel', :payment_key,
|
75
|
+
[:shop_id, :transaction_id, :language, :payment_key],
|
76
|
+
:transaction_id => '123',
|
77
|
+
:language => 'de')
|
78
|
+
|
79
|
+
transaction = Barzahlen::Api::Online::Transaction.new(api)
|
80
|
+
transaction.cancel '123', 'de'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'refund' do
|
85
|
+
it 'should send correct request to api' do
|
86
|
+
api = create_api
|
87
|
+
api.should_receive(:request)
|
88
|
+
.with('v1/transactions/refund', :payment_key,
|
89
|
+
[:shop_id, :transaction_id, :amount, :currency, :language, :payment_key],
|
90
|
+
:transaction_id => '123',
|
91
|
+
:amount => '12.23',
|
92
|
+
:currency => 'EUR',
|
93
|
+
:language => 'de')
|
94
|
+
|
95
|
+
transaction = Barzahlen::Api::Online::Transaction.new api
|
96
|
+
transaction.refund '123', '12.23', 'EUR', 'de'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
def create_api
|
102
|
+
Barzahlen::Api::Online::Api.new(double('Net::HTTP'),
|
103
|
+
:shop_id => 12345,
|
104
|
+
:payment_key => 'asdfasdf',
|
105
|
+
:notification_key => 'foobarfoobar',
|
106
|
+
:language => 'de',)
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Barzahlen::Api::Online do
|
6
|
+
before(:each) do
|
7
|
+
Barzahlen::Api::Online.config = nil
|
8
|
+
Barzahlen::Api::Online.api = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'new_transaction_api' do
|
12
|
+
it 'should raise an error, if no config and api is specified' do
|
13
|
+
expect { Barzahlen::Api::Online.new_transaction_api }.to raise_error
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should return Transcation object' do
|
17
|
+
Barzahlen::Api::Online.config = {}
|
18
|
+
transaction_api = Barzahlen::Api::Online.new_transaction_api
|
19
|
+
expect(transaction_api).to be_a Barzahlen::Api::Online::Transaction
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'new_notification_handler' do
|
24
|
+
it 'should raise an error, if no config and api is specified' do
|
25
|
+
expect { Barzahlen::Api::Online.new_notification_handler }.to raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should return NotificationHandler object' do
|
29
|
+
Barzahlen::Api::Online.config = {}
|
30
|
+
notification_handler = Barzahlen::Api::Online.new_notification_handler
|
31
|
+
expect(notification_handler).to be_a Barzahlen::Api::Online::NotificationHandler
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'barzahlen/api/online'
|
4
|
+
require 'barzahlen/api/online/api'
|
5
|
+
require 'barzahlen/api/online/transaction'
|
6
|
+
require 'barzahlen/api/online/hash_builder'
|
7
|
+
require 'barzahlen/api/online/response_parser'
|
8
|
+
require 'barzahlen/api/online/notification_handler'
|