adyen 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ require 'minitest/autorun'
3
+ require 'minitest/pride'
4
+ require 'mocha/setup'
5
+
6
+ require 'adyen'
7
+ require 'adyen/matchers'
8
+
9
+ module Adyen::Test
10
+ module EachXMLBackend
11
+ XML_BACKENDS = [Adyen::API::XMLQuerier::NokogiriBackend, Adyen::API::XMLQuerier::REXMLBackend]
12
+
13
+ def for_each_xml_backend(&block)
14
+ XML_BACKENDS.each do |xml_backend|
15
+ begin
16
+ Adyen::API::XMLQuerier.stubs(:default_backend).returns(xml_backend.new)
17
+ block.call(xml_backend)
18
+ ensure
19
+ Adyen::API::XMLQuerier.unstub(:default_backend)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adyen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-09-14 00:00:00.000000000 Z
14
+ date: 2014-12-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rake
@@ -41,6 +41,34 @@ dependencies:
41
41
  - - ~>
42
42
  - !ruby/object:Gem::Version
43
43
  version: '2.14'
44
+ - !ruby/object:Gem::Dependency
45
+ name: minitest
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ~>
49
+ - !ruby/object:Gem::Version
50
+ version: '5'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: '5'
58
+ - !ruby/object:Gem::Dependency
59
+ name: mocha
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
44
72
  - !ruby/object:Gem::Dependency
45
73
  name: rails
46
74
  requirement: !ruby/object:Gem::Requirement
@@ -85,13 +113,11 @@ extra_rdoc_files:
85
113
  - README.rdoc
86
114
  files:
87
115
  - .gitignore
88
- - .kick
89
116
  - .travis.yml
90
117
  - Gemfile
91
118
  - LICENSE
92
119
  - README.rdoc
93
120
  - Rakefile
94
- - TODO
95
121
  - adyen.gemspec
96
122
  - lib/adyen.rb
97
123
  - lib/adyen/api.rb
@@ -114,7 +140,6 @@ files:
114
140
  - lib/adyen/templates/notification_migration.rb
115
141
  - lib/adyen/templates/notification_model.rb
116
142
  - lib/adyen/version.rb
117
- - spec/adyen_spec.rb
118
143
  - spec/api/api_spec.rb
119
144
  - spec/api/payment_service_spec.rb
120
145
  - spec/api/recurring_service_spec.rb
@@ -122,11 +147,13 @@ files:
122
147
  - spec/api/simple_soap_client_spec.rb
123
148
  - spec/api/spec_helper.rb
124
149
  - spec/api/test_helpers_spec.rb
125
- - spec/form_spec.rb
126
150
  - spec/functional/api_spec.rb
127
151
  - spec/functional/initializer.rb.ci
128
152
  - spec/functional/initializer.rb.sample
129
153
  - spec/spec_helper.rb
154
+ - test/adyen_test.rb
155
+ - test/form_test.rb
156
+ - test/test_helper.rb
130
157
  - yard_extensions.rb
131
158
  homepage: http://github.com/wvanbergen/adyen/wiki
132
159
  licenses:
@@ -160,7 +187,6 @@ signing_key:
160
187
  specification_version: 4
161
188
  summary: Integrate Adyen payment services in your Ruby on Rails application.
162
189
  test_files:
163
- - spec/adyen_spec.rb
164
190
  - spec/api/api_spec.rb
165
191
  - spec/api/payment_service_spec.rb
166
192
  - spec/api/recurring_service_spec.rb
@@ -168,8 +194,10 @@ test_files:
168
194
  - spec/api/simple_soap_client_spec.rb
169
195
  - spec/api/spec_helper.rb
170
196
  - spec/api/test_helpers_spec.rb
171
- - spec/form_spec.rb
172
197
  - spec/functional/api_spec.rb
173
198
  - spec/functional/initializer.rb.ci
174
199
  - spec/functional/initializer.rb.sample
175
200
  - spec/spec_helper.rb
201
+ - test/adyen_test.rb
202
+ - test/form_test.rb
203
+ - test/test_helper.rb
data/.kick DELETED
@@ -1,35 +0,0 @@
1
- options.on('--doc', 'Also generate docs.') do
2
- process do |files|
3
- if files.any? { |f| f =~ /lib\/.+\.rb$/ }
4
- execute "yardoc --no-private"
5
- execute(%{osascript -e 'tell application "Safari"
6
- do JavaScript "window.location.reload()" in first document
7
- end tell'})
8
- end
9
- end
10
- end
11
-
12
- recipe :ruby
13
-
14
- process do |files|
15
- specs = files.take_and_map do |file|
16
- case file
17
- when "spec/spec_helper.rb"
18
- Dir.glob("spec/**/*_spec.rb")
19
- when "spec/api/spec_helper.rb"
20
- Dir.glob("spec/api/*_spec.rb")
21
- when "lib/adyen/api.rb"
22
- "spec/api/api_spec.rb"
23
- when "lib/adyen/api/xml_querier.rb"
24
- ["spec/api/payment_service_spec.rb", "spec/api/recurring_service_spec.rb"]
25
- when "lib/adyen/api/simple_soap_client.rb"
26
- ["spec/api/simple_soap_client_spec.rb", "spec/api/payment_service_spec.rb", "spec/api/recurring_service_spec.rb"]
27
- when "lib/adyen/api/response.rb"
28
- ["spec/api/response_spec.rb", "spec/api/payment_service_spec.rb", "spec/api/recurring_service_spec.rb"]
29
- when %r{lib/adyen/api/templates/(.+)\.rb$}, %r{lib/adyen/api/(.+)\.rb$}
30
- "spec/api/#{$1}_spec.rb"
31
- end
32
- end
33
- Ruby.run_tests(specs)
34
- end
35
-
data/TODO DELETED
@@ -1,16 +0,0 @@
1
- * Add a capture! method to an authorisation response from the PaymentService.
2
-
3
- * Add iDEAL API. To get started, see the `iDEAL' topic-branch which contains `ideal-scratchpad.rb' and a stub for a functional spec.
4
-
5
- * Add the DirectDebit API.
6
-
7
- * Add ActiveMerchant integration
8
-
9
- * Split up gem to have more explicit dependency requirements, e.g.:
10
- * adyen-soap
11
- * adyen-railtie
12
- * adyen-activemerchant
13
-
14
- * Add mocks for notification requests in order to test your app
15
-
16
- * Add more mock SOAP responses for testing your app.
@@ -1,44 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Adyen do
6
-
7
- describe Adyen::Encoding do
8
- it "should a hmac_base64 correcly" do
9
- encoded_str = Adyen::Encoding.hmac_base64('bla', 'bla')
10
- encoded_str.should == '6nItEkVpIYF+i1RwrEyQ7RHmrfU='
11
- end
12
-
13
- it "should gzip_base64 correcly" do
14
- encoded_str = Adyen::Encoding.gzip_base64('bla')
15
- encoded_str.length.should == 32
16
- end
17
- end
18
-
19
- describe Adyen::Formatter::DateTime do
20
- it "should accept dates" do
21
- Adyen::Formatter::DateTime.fmt_date(Date.today).should match(/^\d{4}-\d{2}-\d{2}$/)
22
- end
23
-
24
- it "should accept times" do
25
- Adyen::Formatter::DateTime.fmt_time(Time.now).should match(/^\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}Z$/)
26
- end
27
-
28
- it "should accept valid time strings" do
29
- Adyen::Formatter::DateTime.fmt_time('2009-01-01T11:11:11Z').should match(/^\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}Z$/)
30
- end
31
-
32
- it "should accept valid time strings" do
33
- Adyen::Formatter::DateTime.fmt_date('2009-01-01').should match(/^\d{4}-\d{2}-\d{2}$/)
34
- end
35
-
36
- it "should raise on an invalid time string" do
37
- lambda { Adyen::Formatter::DateTime.fmt_time('2009-01-01 11:11:11') }.should raise_error
38
- end
39
-
40
- it "should raise on an invalid date string" do
41
- lambda { Adyen::Formatter::DateTime.fmt_date('2009-1-1') }.should raise_error
42
- end
43
- end
44
- end
@@ -1,318 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'date'
4
- require 'spec_helper'
5
- require 'adyen/form'
6
-
7
- describe Adyen::Form do
8
-
9
- before(:each) do
10
- Adyen.configuration.register_form_skin(:testing, '4aD37dJA', 'Kah942*$7sdp0)')
11
- Adyen.configuration.default_form_params[:merchant_account] = 'TestMerchant'
12
- end
13
-
14
- describe 'Action URLs' do
15
-
16
- before(:each) do
17
- # Use autodetection for the environment unless otherwise specified
18
- Adyen.configuration.environment = nil
19
- end
20
-
21
- it "should generate correct testing url" do
22
- Adyen::Form.url.should == 'https://test.adyen.com/hpp/select.shtml'
23
- end
24
-
25
- it "should generate a live url if the environment is set to live" do
26
- Adyen.configuration.environment = :live
27
- Adyen::Form.url.should == 'https://live.adyen.com/hpp/select.shtml'
28
- end
29
-
30
- it "should generate correct live url in a production environment" do
31
- Adyen.configuration.stub(:autodetect_environment).and_return('live')
32
- Adyen::Form.url.should. == 'https://live.adyen.com/hpp/select.shtml'
33
- end
34
-
35
- it "should generate correct live url if explicitely asked for" do
36
- Adyen::Form.url(:live).should == 'https://live.adyen.com/hpp/select.shtml'
37
- end
38
-
39
- it "should generate correct testing url if the payment flow selection is set to select" do
40
- Adyen.configuration.payment_flow = :select
41
- Adyen::Form.url.should == 'https://test.adyen.com/hpp/select.shtml'
42
- end
43
-
44
- it "should generate correct testing url if the payment flow selection is set to pay" do
45
- Adyen.configuration.payment_flow = :pay
46
- Adyen::Form.url.should == 'https://test.adyen.com/hpp/pay.shtml'
47
- end
48
-
49
- it "should generate correct testing url if the payment flow selection is set to details" do
50
- Adyen.configuration.payment_flow = :details
51
- Adyen::Form.url.should == 'https://test.adyen.com/hpp/details.shtml'
52
- end
53
-
54
- context "with custom domain" do
55
- before(:each) do
56
- Adyen.configuration.payment_flow = :select
57
- Adyen.configuration.payment_flow_domain = "checkout.mydomain.com"
58
- end
59
-
60
- it "should generate correct testing url" do
61
- Adyen::Form.url.should == 'https://checkout.mydomain.com/hpp/select.shtml'
62
- end
63
- end
64
- end
65
-
66
- describe 'redirect signature check' do
67
- before(:each) do
68
- # Example taken from integration manual
69
-
70
- # Example get params sent back with redirect
71
- @params = { :authResult => 'AUTHORISED', :pspReference => '1211992213193029',
72
- :merchantReference => 'Internet Order 12345', :skinCode => '4aD37dJA',
73
- :merchantSig => 'ytt3QxWoEhAskUzUne0P5VA9lPw='}
74
- end
75
-
76
- it "should calculate the signature string correctly" do
77
- Adyen::Form.redirect_signature_string(@params).should == 'AUTHORISED1211992213193029Internet Order 123454aD37dJA'
78
- params = @params.merge(:merchantReturnData => 'testing1234')
79
- Adyen::Form.redirect_signature_string(params).should == 'AUTHORISED1211992213193029Internet Order 123454aD37dJAtesting1234'
80
- end
81
-
82
- it "should calculate the signature correctly" do
83
- Adyen::Form.redirect_signature(@params).should == @params[:merchantSig]
84
- end
85
-
86
- it "should check the signature correctly with explicit shared signature" do
87
- Adyen::Form.redirect_signature_check(@params, 'Kah942*$7sdp0)').should be_true
88
- end
89
-
90
- it "should check the signature correctly using the stored shared secret" do
91
- Adyen::Form.redirect_signature_check(@params).should be_true
92
- end
93
-
94
- it "should raise ArgumentError on missing skinCode" do
95
- expect do
96
- @params.delete(:skinCode)
97
- Adyen::Form.redirect_signature_check(@params).should be_false
98
- end.to raise_error ArgumentError
99
- end
100
-
101
- it "should raise ArgumentError on empty input" do
102
- expect do
103
- Adyen::Form.redirect_signature_check({}).should be_false
104
- end.to raise_error ArgumentError
105
- end
106
-
107
- it "should detect a tampered field" do
108
- Adyen::Form.redirect_signature_check(@params.merge(:pspReference => 'tampered')).should be_false
109
- end
110
-
111
- it "should detect a tampered signature" do
112
- Adyen::Form.redirect_signature_check(@params.merge(:merchantSig => 'tampered')).should be_false
113
- end
114
-
115
- end
116
-
117
- describe 'redirect URL generation' do
118
- before(:each) do
119
- @attributes = { :currency_code => 'GBP', :payment_amount => 10000, :ship_before_date => Date.today,
120
- :merchant_reference => 'Internet Order 12345', :skin => :testing,
121
- :session_validity => Time.now + 3600 }
122
-
123
- @redirect_url = Adyen::Form.redirect_url(@attributes)
124
- end
125
-
126
- it "should return an URL pointing to the adyen server" do
127
- @redirect_url.should =~ %r[^#{Adyen::Form.url}]
128
- end
129
-
130
- it "should include all provided attributes" do
131
- params = @redirect_url.split('?', 2).last.split('&').map { |param| param.split('=', 2).first }
132
- params.should include(*(@attributes.keys.map { |k| Adyen::Form.camelize(k) }))
133
- end
134
-
135
- it "should include the merchant signature" do
136
- params = @redirect_url.split('?', 2).last.split('&').map { |param| param.split('=', 2).first }
137
- params.should include('merchantSig')
138
- end
139
- end
140
-
141
- describe 'payment methods available URL' do
142
- let(:payment_methods_url) do
143
- @attributes = { :currency_code => 'GBP', :payment_amount => 10000, :ship_before_date => Date.today,
144
- :merchant_reference => 'Internet Order 12345', :skin => :testing,
145
- :session_validity => Time.now + 3600 }
146
-
147
- Adyen::Form.payment_methods_url(@attributes)
148
- end
149
-
150
- it "should return an directory URL" do
151
- payment_methods_url.should =~ %r[^#{Adyen::Form.url(nil, :directory)}]
152
- end
153
-
154
- it "should include all provided attributes" do
155
- params = payment_methods_url.split('?', 2).last.split('&').map { |param| param.split('=', 2).first }
156
- params.should include(*(@attributes.keys.map { |k| Adyen::Form.camelize(k) }))
157
- end
158
-
159
- it "should include the merchant signature" do
160
- params = payment_methods_url.split('?', 2).last.split('&').map { |param| param.split('=', 2).first }
161
- params.should include('merchantSig')
162
- end
163
- end
164
-
165
- describe 'hidden fields generation' do
166
- include APISpecHelper
167
- subject { %Q'<form action="#{CGI.escapeHTML(Adyen::Form.url)}" method="post">#{Adyen::Form.hidden_fields(@attributes)}</form>' }
168
-
169
- before(:each) do
170
- @attributes = { :currency_code => 'GBP', :payment_amount => 10000, :ship_before_date => Date.today,
171
- :merchant_reference => 'Internet Order 12345', :skin => :testing,
172
- :session_validity => Time.now + 3600 }
173
- end
174
-
175
- for_each_xml_backend do
176
- it { should have_adyen_payment_form }
177
- end
178
-
179
- it { should include('<input type="hidden" name="merchantAccount" value="TestMerchant" />') }
180
-
181
- context "width default_form_params" do
182
- before(:each) do
183
- Adyen.configuration.register_form_skin(:testing, '4aD37dJA', 'Kah942*$7sdp0)', {
184
- :merchant_account => 'OtherMerchant',
185
- })
186
- end
187
-
188
- it { should include('<input type="hidden" name="merchantAccount" value="OtherMerchant" />') }
189
- it { should_not include('<input type="hidden" name="merchantAccount" value="TestMerchant" />') }
190
- end
191
- end
192
-
193
- describe 'signature calculation' do
194
-
195
- # This example is taken from the Adyen integration manual
196
-
197
- before(:each) do
198
-
199
- @parameters = { :currency_code => 'GBP', :payment_amount => 10000,
200
- :ship_before_date => '2007-10-20', :merchant_reference => 'Internet Order 12345',
201
- :skin => :testing, :session_validity => '2007-10-11T11:00:00Z',
202
- :billing_address => {
203
- :street => 'Alexanderplatz',
204
- :house_number_or_name => '0815',
205
- :city => 'Berlin',
206
- :postal_code => '10119',
207
- :state_or_province => 'Berlin',
208
- :country => 'Germany',
209
- },
210
- :shopper => {
211
- :telephone_number => '1234512345',
212
- :first_name => 'John',
213
- :last_name => 'Doe',
214
- :social_security_number => '123-45-1234'
215
- }
216
- }
217
-
218
- Adyen::Form.do_parameter_transformations!(@parameters)
219
- end
220
-
221
- it "should construct the signature base string correctly" do
222
- signature_string = Adyen::Form.calculate_signature_string(@parameters)
223
- signature_string.should == "10000GBP2007-10-20Internet Order 123454aD37dJATestMerchant2007-10-11T11:00:00Z"
224
-
225
- signature_string = Adyen::Form.calculate_signature_string(@parameters.merge(:merchant_return_data => 'testing123'))
226
- signature_string.should == "10000GBP2007-10-20Internet Order 123454aD37dJATestMerchant2007-10-11T11:00:00Ztesting123"
227
- end
228
-
229
- it "should calculate the signature correctly" do
230
- signature = Adyen::Form.calculate_signature(@parameters)
231
- signature.should == 'x58ZcRVL1H6y+XSeBGrySJ9ACVo='
232
- end
233
-
234
- it "should raise ArgumentError on empty shared_secret" do
235
- expect do
236
- @parameters.delete(:shared_secret)
237
- signature = Adyen::Form.calculate_signature(@parameters)
238
- end.to raise_error ArgumentError
239
- end
240
-
241
- it "should calculate the signature base string correctly for a recurring payment" do
242
- # Add the required recurrent payment attributes
243
- @parameters.merge!(:recurring_contract => 'DEFAULT', :shopper_reference => 'grasshopper52', :shopper_email => 'gras.shopper@somewhere.org')
244
-
245
- signature_string = Adyen::Form.calculate_signature_string(@parameters)
246
- signature_string.should == "10000GBP2007-10-20Internet Order 123454aD37dJATestMerchant2007-10-11T11:00:00Zgras.shopper@somewhere.orggrasshopper52DEFAULT"
247
- end
248
-
249
- it "should calculate the signature correctly for a recurring payment" do
250
- # Add the required recurrent payment attributes
251
- @parameters.merge!(:recurring_contract => 'DEFAULT', :shopper_reference => 'grasshopper52', :shopper_email => 'gras.shopper@somewhere.org')
252
-
253
- signature = Adyen::Form.calculate_signature(@parameters)
254
- signature.should == 'F2BQEYbE+EUhiRGuPtcD16Gm7JY='
255
- end
256
-
257
- context 'billing address' do
258
-
259
- it "should construct the signature base string correctly" do
260
- signature_string = Adyen::Form.calculate_billing_address_signature_string(@parameters[:billing_address])
261
- signature_string.should == "Alexanderplatz0815Berlin10119BerlinGermany"
262
- end
263
-
264
- it "should calculate the signature correctly" do
265
- signature = Adyen::Form.calculate_billing_address_signature(@parameters)
266
- signature.should == '5KQb7VJq4cz75cqp11JDajntCY4='
267
- end
268
-
269
- it "should raise ArgumentError on empty shared_secret" do
270
- expect do
271
- @parameters.delete(:shared_secret)
272
- signature = Adyen::Form.calculate_billing_address_signature(@parameters)
273
- end.to raise_error ArgumentError
274
- end
275
-
276
- end
277
-
278
- context 'shopper' do
279
-
280
- it "should construct the signature base string correctly" do
281
- signature_string = Adyen::Form.calculate_shopper_signature_string(@parameters[:shopper])
282
- signature_string.should == "JohnDoe1234512345"
283
- end
284
-
285
- it "should calculate the signature correctly" do
286
- signature = Adyen::Form.calculate_shopper_signature(@parameters)
287
- signature.should == 'rb2GEs1kGKuLh255a3QRPBYXmsQ='
288
- end
289
-
290
- it "should raise ArgumentError on empty shared_secret" do
291
- expect do
292
- @parameters.delete(:shared_secret)
293
- signature = Adyen::Form.calculate_shopper_signature(@parameters)
294
- end.to raise_error ArgumentError
295
- end
296
-
297
- end
298
-
299
- end
300
-
301
- describe "flatten" do
302
- let(:parameters) do
303
- {
304
- :billing_address => { :street => 'My Street'}
305
- }
306
- end
307
-
308
- it "returns empty hash for nil input" do
309
- Adyen::Form.flatten(nil).should == {}
310
- end
311
-
312
- it "flattens hash and prefixes keys" do
313
- Adyen::Form.flatten(parameters).should == {
314
- 'billingAddress.street' => 'My Street'
315
- }
316
- end
317
- end
318
- end