gocardless 1.11.2 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 417cec8542edd246281e1e82b45294ad06d09a5e
4
- data.tar.gz: 2dae626c784514a1b722dbb348bd782e954f7c46
3
+ metadata.gz: 994ce7a109fb1c42f0f66f94e7fb38cff7ea1197
4
+ data.tar.gz: 8ac64f43f760b62644faccb532fadc0f86b89413
5
5
  SHA512:
6
- metadata.gz: d47705fcf702d7fb7ed80a1e847b7953c4b235f6bb78d16961978c97166eaa9c9b1d790dde027e3a2cac7109170e5b2063e1fac1a4588a576aeb143314a68795
7
- data.tar.gz: b8c4cc2cc8ad7aebf8586a8f9b901e160116b03039c1c820b5c3bdab1848bddd233e061c07ded755d63f67f5df2ae096dad29169f2c1ad9ffc221ab8932eccf2
6
+ metadata.gz: 815fb08aef927dbdfc4f285534b4cea78e346949fb0cbee8a5c36ba2cd679f978ebfa5bc652dd5925854feaf17a3d977b7563d9a887cd69904de99c6c25b9c6e
7
+ data.tar.gz: 47e2766271e9d6df79f1909409c8f128632e4ff1d9476bc81b5bbd3e810eb8a4a14ac360475dd0459c534375151b8a073261ae5a2c40a3727726ae23903ea4f6
data/.travis.yml CHANGED
@@ -4,11 +4,8 @@ rvm:
4
4
  - 2.0.0
5
5
  - 1.9.3
6
6
  - 1.9.2
7
- - 1.8.7
8
- - jruby-18mode
9
7
  - jruby-19mode
10
8
  - rbx-2
11
- - ree
12
9
  notifications:
13
10
  email:
14
11
  recipients:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 1.12.0 - October 31, 2014
2
+
3
+ - Update Gem Dependencies
4
+ - Prevent setting bad GoCardless environments
5
+ - Fix timezone-brittle specs
6
+ - Upgrade RSpec & Convert specs to RSpec 3.1.7
7
+ - Handle nil signatures in signature_valid? method
8
+ - Stop testing against Ruby 1.8
9
+
10
+
1
11
  ## 1.11.2 - October 27, 2014
2
12
 
3
13
  - Use a constant time string comparison to avoid timing attacks
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ gemspec
4
4
 
5
5
  group :development do
6
6
  gem "guard", "~> 0.8.8"
7
+ gem "rspec", "~> 3.1"
7
8
  if RUBY_PLATFORM.downcase.include?("darwin")
8
9
  gem "guard-rspec", "~> 0.5.4"
9
10
  gem "rb-fsevent", "~> 0.9"
data/gocardless.gemspec CHANGED
@@ -1,13 +1,13 @@
1
1
  require File.expand_path('../lib/gocardless/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.add_runtime_dependency 'oauth2', '~> 0.7'
5
- gem.add_runtime_dependency 'multi_json', '~> 1.0'
4
+ gem.add_runtime_dependency 'oauth2', '~> 1.0'
5
+ gem.add_runtime_dependency 'multi_json', '~> 1.10'
6
6
 
7
7
  gem.add_development_dependency 'rspec', '~> 2.13'
8
- gem.add_development_dependency 'yard', '~> 0.7'
9
- gem.add_development_dependency 'activesupport', '~> 3.1'
10
- gem.add_development_dependency 'rake', '~> 10.0'
8
+ gem.add_development_dependency 'yard', '~> 0.8'
9
+ gem.add_development_dependency 'activesupport', '~> 3.2'
10
+ gem.add_development_dependency 'rake', '~> 10.3'
11
11
 
12
12
  gem.authors = ['Harry Marr', 'Tom Blomfield']
13
13
  gem.description = %q{A Ruby wrapper for the GoCardless API}
data/lib/gocardless.rb CHANGED
@@ -12,8 +12,7 @@ module GoCardless
12
12
  require 'gocardless/payout'
13
13
 
14
14
  class << self
15
- attr_accessor :environment
16
- attr_reader :account_details, :client
15
+ attr_reader :account_details, :environment, :client
17
16
 
18
17
  def account_details=(details)
19
18
  raise ClientError.new("You must provide a token") unless details[:token]
@@ -21,6 +20,16 @@ module GoCardless
21
20
  @client = Client.new(details)
22
21
  end
23
22
 
23
+ def environment=(gc_env)
24
+ valid_environments = GoCardless::Client::BASE_URLS.keys
25
+ if !gc_env.nil? && !valid_environments.include?(gc_env)
26
+ raise ClientError.new("The GoCardless environment must be one of " +
27
+ valid_environments.join(", "))
28
+ end
29
+
30
+ @environment = gc_env
31
+ end
32
+
24
33
  %w(new_subscription_url new_pre_authorization_url new_bill_url confirm_resource webhook_valid?).each do |name|
25
34
  class_eval <<-EOM
26
35
  def #{name}(*args)
@@ -418,6 +418,7 @@ module GoCardless
418
418
  def signature_valid?(params)
419
419
  params = params.clone
420
420
  signature = params.delete(:signature)
421
+ return false unless signature
421
422
  Utils.secure_compare(sign_params(params)[:signature], signature)
422
423
  end
423
424
 
@@ -1,3 +1,3 @@
1
1
  module GoCardless
2
- VERSION = '1.11.2'.freeze
2
+ VERSION = '1.12.0'.freeze
3
3
  end
data/spec/bill_spec.rb CHANGED
@@ -13,28 +13,28 @@ describe GoCardless::Bill do
13
13
  bill.source_type = :subscription
14
14
  stub_get(client, :id => 123)
15
15
  source = bill.source
16
- source.should be_a GoCardless::Subscription
17
- source.id.should == 123
16
+ expect(source).to be_a GoCardless::Subscription
17
+ expect(source.id).to eq(123)
18
18
  end
19
19
 
20
20
  it "source setter works" do
21
21
  bill.source = GoCardless::Subscription.new(:id => 123)
22
- bill.source_id.should == 123
23
- bill.source_type.should.to_s == 'subscription'
22
+ expect(bill.source_id).to eq(123)
23
+ expect(bill.source_type.to_s).to eq('subscription')
24
24
  end
25
25
 
26
26
  it "should be able to be retried" do
27
- client.should_receive(:api_post).with('/bills/123/retry')
27
+ expect(client).to receive(:api_post).with('/bills/123/retry')
28
28
  bill.retry!
29
29
  end
30
30
 
31
31
  it "should be able to be cancelled" do
32
- client.should_receive(:api_put).with('/bills/123/cancel')
32
+ expect(client).to receive(:api_put).with('/bills/123/cancel')
33
33
  bill.cancel!
34
34
  end
35
35
 
36
36
  it "should be able to be refunded" do
37
- client.should_receive(:api_post).with('/bills/123/refund')
37
+ expect(client).to receive(:api_post).with('/bills/123/refund')
38
38
  bill.refund!
39
39
  end
40
40
 
data/spec/client_spec.rb CHANGED
@@ -10,36 +10,36 @@ describe GoCardless::Client do
10
10
  describe ".base_url" do
11
11
  it "and_return the correct url for the production environment" do
12
12
  GoCardless.environment = :production
13
- GoCardless::Client.base_url.should == 'https://gocardless.com'
13
+ expect(GoCardless::Client.base_url).to eq('https://gocardless.com')
14
14
  end
15
15
 
16
16
  it "and_return the correct url for the sandbox environment" do
17
17
  GoCardless.environment = :sandbox
18
- GoCardless::Client.base_url.should == 'https://sandbox.gocardless.com'
18
+ expect(GoCardless::Client.base_url).to eq('https://sandbox.gocardless.com')
19
19
  end
20
20
 
21
21
  it "and_return the correct url when it's set manually" do
22
22
  GoCardless::Client.base_url = 'https://abc.gocardless.com'
23
- GoCardless::Client.base_url.should == 'https://abc.gocardless.com'
23
+ expect(GoCardless::Client.base_url).to eq('https://abc.gocardless.com')
24
24
  end
25
25
  end
26
26
 
27
27
  describe "#new" do
28
28
  it "without an app id should raise an error" do
29
- lambda do
29
+ expect do
30
30
  GoCardless::Client.new({:app_secret => @app_secret})
31
- end.should raise_exception(GoCardless::ClientError)
31
+ end.to raise_exception(GoCardless::ClientError)
32
32
  end
33
33
 
34
34
  it "without an app_secret should raise an error" do
35
- lambda do
35
+ expect do
36
36
  GoCardless::Client.new({:app_id => @app_id})
37
- end.should raise_exception(GoCardless::ClientError)
37
+ end.to raise_exception(GoCardless::ClientError)
38
38
  end
39
39
 
40
40
  it "does not raise an error if the credentials are provided as environment variables" do
41
- ENV.should_receive(:[]).with('GOCARDLESS_APP_ID').and_return(@app_id)
42
- ENV.should_receive(:[]).with('GOCARDLESS_APP_SECRET').and_return(@app_secret)
41
+ expect(ENV).to receive(:[]).with('GOCARDLESS_APP_ID').and_return(@app_id)
42
+ expect(ENV).to receive(:[]).with('GOCARDLESS_APP_SECRET').and_return(@app_secret)
43
43
 
44
44
  GoCardless::Client.new
45
45
  end
@@ -50,7 +50,7 @@ describe GoCardless::Client do
50
50
  :app_secret => @app_secret,
51
51
  :merchant_id => 'xyz'
52
52
  })
53
- client.send('merchant_id').should == 'xyz'
53
+ expect(client.send('merchant_id')).to eq('xyz')
54
54
  end
55
55
  end
56
56
 
@@ -60,15 +60,15 @@ describe GoCardless::Client do
60
60
 
61
61
  describe "#authorize_url" do
62
62
  it "fails without a redirect uri" do
63
- lambda { @client.authorize_url }.should raise_exception(ArgumentError)
63
+ expect { @client.authorize_url }.to raise_exception(ArgumentError)
64
64
  end
65
65
 
66
66
  it "generates the authorize url correctly" do
67
67
  url = URI.parse(@client.authorize_url(:redirect_uri => @redirect_uri))
68
68
  query = CGI.parse(url.query)
69
- query['response_type'].first.should == 'code'
70
- query['redirect_uri'].first.should == @redirect_uri
71
- query['client_id'].first.should == @app_id
69
+ expect(query['response_type'].first).to eq('code')
70
+ expect(query['redirect_uri'].first).to eq(@redirect_uri)
71
+ expect(query['client_id'].first).to eq(@app_id)
72
72
  end
73
73
 
74
74
  it "includes the cancel uri if present" do
@@ -78,14 +78,14 @@ describe GoCardless::Client do
78
78
  :cancel_uri => cancel_uri
79
79
  ))
80
80
  query = CGI.parse(url.query)
81
- query['cancel_uri'].first.should == cancel_uri
81
+ expect(query['cancel_uri'].first).to eq(cancel_uri)
82
82
  end
83
83
 
84
84
  it "encodes prefilling parameters correctly" do
85
85
  params = {:merchant => {:user => {:email => "a@b.com"}}}
86
86
  url = @client.authorize_url(params.merge(:redirect_uri => @redirect_uri))
87
87
  encoded_key = GoCardless::Utils.percent_encode('merchant[user][email]')
88
- URI.parse(url).query.should match /#{encoded_key}=a%40b\.com/
88
+ expect(URI.parse(url).query).to match /#{encoded_key}=a%40b\.com/
89
89
  end
90
90
  end
91
91
 
@@ -93,9 +93,9 @@ describe GoCardless::Client do
93
93
  access_token_url = "#{GoCardless::Client.base_url}/oauth/access_token"
94
94
 
95
95
  it "fails without a redirect uri" do
96
- lambda do
96
+ expect do
97
97
  @client.fetch_access_token('code', {})
98
- end.should raise_exception(ArgumentError)
98
+ end.to raise_exception(ArgumentError)
99
99
  end
100
100
 
101
101
  describe "with valid params" do
@@ -104,12 +104,12 @@ describe GoCardless::Client do
104
104
  double(:params => {'scope' => 'manage_merchant:x'}, :token => 'abc')
105
105
  end
106
106
 
107
- before { oauth_client.auth_code.stub(:get_token).and_return(fake_token) }
107
+ before { allow(oauth_client.auth_code).to receive(:get_token).and_return(fake_token) }
108
108
 
109
109
  it "calls correct method with correct args" do
110
110
  auth_code = 'fakecode'
111
111
 
112
- oauth_client.auth_code.should_receive(:get_token).with(
112
+ expect(oauth_client.auth_code).to receive(:get_token).with(
113
113
  auth_code, hash_including(:redirect_uri => @redirect_uri)
114
114
  ).and_return(fake_token)
115
115
 
@@ -117,15 +117,15 @@ describe GoCardless::Client do
117
117
  end
118
118
 
119
119
  it "sets @access_token" do
120
- @client.instance_variable_get(:@access_token).should be_nil
120
+ expect(@client.instance_variable_get(:@access_token)).to be_nil
121
121
  @client.fetch_access_token('code', {:redirect_uri => @redirect_uri})
122
- @client.instance_variable_get(:@access_token).should == fake_token
122
+ expect(@client.instance_variable_get(:@access_token)).to eq(fake_token)
123
123
  end
124
124
 
125
125
  it "sets @merchant_id" do
126
- @client.instance_variable_get(:@merchant_id).should be_nil
126
+ expect(@client.instance_variable_get(:@merchant_id)).to be_nil
127
127
  @client.fetch_access_token('code', {:redirect_uri => @redirect_uri})
128
- @client.instance_variable_get(:@merchant_id).should == 'x'
128
+ expect(@client.instance_variable_get(:@merchant_id)).to eq('x')
129
129
  end
130
130
  end
131
131
  end
@@ -137,11 +137,11 @@ describe GoCardless::Client do
137
137
  token.params['scope'] = 'a:1 b:2'
138
138
  @client.instance_variable_set(:@access_token, token)
139
139
 
140
- @client.scoped_access_token.should == 'TOKEN123 a:1 b:2'
140
+ expect(@client.scoped_access_token).to eq('TOKEN123 a:1 b:2')
141
141
  end
142
142
 
143
143
  it "and_return nil when there's no token" do
144
- @client.scoped_access_token.should be_nil
144
+ expect(@client.scoped_access_token).to be_nil
145
145
  end
146
146
  end
147
147
 
@@ -152,31 +152,31 @@ describe GoCardless::Client do
152
152
  token.params['scope'] = 'a:1 b:2'
153
153
  @client.instance_variable_set(:@access_token, token)
154
154
 
155
- @client.unscoped_access_token.should == 'TOKEN123'
155
+ expect(@client.unscoped_access_token).to eq('TOKEN123')
156
156
  end
157
157
 
158
158
  it "and_return nil when there's no token" do
159
- @client.unscoped_access_token.should be_nil
159
+ expect(@client.unscoped_access_token).to be_nil
160
160
  end
161
161
  end
162
162
 
163
163
  describe "#access_token" do
164
- before { @client.stub(:warn) }
164
+ before { allow(@client).to receive(:warn) }
165
165
  it "serializes access token correctly" do
166
166
  oauth_client = @client.instance_variable_get(:@oauth_client)
167
167
  token = OAuth2::AccessToken.new(oauth_client, 'TOKEN123')
168
168
  token.params['scope'] = 'a:1 b:2'
169
169
  @client.instance_variable_set(:@access_token, token)
170
170
 
171
- @client.access_token.should == 'TOKEN123 a:1 b:2'
171
+ expect(@client.access_token).to eq('TOKEN123 a:1 b:2')
172
172
  end
173
173
 
174
174
  it "and_return nil when there's no token" do
175
- @client.access_token.should be_nil
175
+ expect(@client.access_token).to be_nil
176
176
  end
177
177
 
178
178
  it "issues a deprecation warning" do
179
- @client.should_receive(:warn)
179
+ expect(@client).to receive(:warn)
180
180
  @client.access_token
181
181
  end
182
182
  end
@@ -188,44 +188,44 @@ describe GoCardless::Client do
188
188
  token.params['scope'] = 'a:1 b:2'
189
189
  @client.instance_variable_set(:@access_token, token)
190
190
 
191
- @client.scope.should == 'a:1 b:2'
191
+ expect(@client.scope).to eq('a:1 b:2')
192
192
  end
193
193
 
194
194
  it "and_return nil when there's no token" do
195
- @client.scope.should be_nil
195
+ expect(@client.scope).to be_nil
196
196
  end
197
197
  end
198
198
 
199
199
  describe "#access_token=" do
200
- before { @client.stub(:warn) }
200
+ before { allow(@client).to receive(:warn) }
201
201
 
202
202
  it "deserializes access token correctly" do
203
203
  @client.access_token = 'TOKEN123 a:1 b:2'
204
204
  token = @client.instance_variable_get(:@access_token)
205
- token.token.should == 'TOKEN123'
206
- token.params['scope'].should == 'a:1 b:2'
205
+ expect(token.token).to eq('TOKEN123')
206
+ expect(token.params['scope']).to eq('a:1 b:2')
207
207
  end
208
208
 
209
209
  it "pulls out the merchant_id when present" do
210
210
  @client.access_token = 'TOKEN123 manage_merchant:xyz'
211
- @client.send('merchant_id').should == 'xyz'
211
+ expect(@client.send('merchant_id')).to eq('xyz')
212
212
  end
213
213
 
214
214
  it "issues a deprecation warning when the scope is present" do
215
- @client.should_receive(:warn)
215
+ expect(@client).to receive(:warn)
216
216
  @client.access_token = 'TOKEN123 manage_merchant:xyz'
217
217
  end
218
218
 
219
219
  it "doesn't issue a deprecation warning when the scope is missing" do
220
- @client.should_receive(:warn).never
220
+ expect(@client).to receive(:warn).never
221
221
  @client.access_token = 'TOKEN123'
222
222
  end
223
223
 
224
224
  it "ignores 'bearer' if it is present at the start of the string" do
225
225
  @client.access_token = 'Bearer TOKEN manage_merchant:123'
226
226
  token = @client.instance_variable_get(:@access_token)
227
- token.token.should == 'TOKEN'
228
- token.params['scope'].should == 'manage_merchant:123'
227
+ expect(token.token).to eq('TOKEN')
228
+ expect(token.params['scope']).to eq('manage_merchant:123')
229
229
  end
230
230
  end
231
231
 
@@ -234,10 +234,10 @@ describe GoCardless::Client do
234
234
  @client.access_token = 'TOKEN123'
235
235
  token = @client.instance_variable_get(:@access_token)
236
236
  r = double
237
- r.stub(:parsed)
238
- token.should_receive(:get) do |p, o|
237
+ allow(r).to receive(:parsed)
238
+ expect(token).to receive(:get) { |p, o|
239
239
  expect(p).to satisfy { |v| v =~ %r|/api/v1/test| }
240
- end.and_return(r)
240
+ }.and_return(r)
241
241
  @client.api_get('/test')
242
242
  end
243
243
 
@@ -251,10 +251,10 @@ describe GoCardless::Client do
251
251
  @client.access_token = 'TOKEN123'
252
252
  token = @client.instance_variable_get(:@access_token)
253
253
  r = double
254
- r.stub(:parsed)
255
- token.should_receive(:post) do |p,opts|
254
+ allow(r).to receive(:parsed)
255
+ expect(token).to receive(:post) { |p,opts|
256
256
  expect(opts[:body]).to eq('{"a":1}')
257
- end.and_return(r)
257
+ }.and_return(r)
258
258
  @client.api_post('/test', {:a => 1})
259
259
  end
260
260
 
@@ -268,10 +268,10 @@ describe GoCardless::Client do
268
268
  @client.access_token = 'TOKEN123'
269
269
  token = @client.instance_variable_get(:@access_token)
270
270
  r = double
271
- r.stub(:parsed)
272
- token.should_receive(:delete) do |p,opts|
271
+ allow(r).to receive(:parsed)
272
+ expect(token).to receive(:delete) { |p,opts|
273
273
  expect(opts[:body]).to eq('{"a":1}')
274
- end.and_return(r)
274
+ }.and_return(r)
275
275
  @client.api_delete('/test', {:a => 1})
276
276
  end
277
277
 
@@ -285,15 +285,15 @@ describe GoCardless::Client do
285
285
  @client.access_token = 'TOKEN'
286
286
  @client.merchant_id = '123'
287
287
  response = double
288
- response.should_receive(:parsed)
288
+ expect(response).to receive(:parsed)
289
289
 
290
290
  token = @client.instance_variable_get(:@access_token)
291
291
  merchant_url = '/api/v1/merchants/123'
292
- token.should_receive(:get) do |p,o|
292
+ expect(token).to receive(:get) { |p,o|
293
293
  expect(p).to eq(merchant_url)
294
- end.and_return response
294
+ }.and_return response
295
295
 
296
- GoCardless::Merchant.stub(:new_with_client)
296
+ allow(GoCardless::Merchant).to receive(:new_with_client)
297
297
 
298
298
  @client.merchant
299
299
  end
@@ -302,15 +302,15 @@ describe GoCardless::Client do
302
302
  @client.access_token = 'TOKEN'
303
303
  @client.merchant_id = '123'
304
304
  response = double
305
- response.should_receive(:parsed).and_return({:name => 'test', :id => 123})
305
+ expect(response).to receive(:parsed).and_return({:name => 'test', :id => 123})
306
306
 
307
307
  token = @client.instance_variable_get(:@access_token)
308
- token.should_receive(:get).and_return response
308
+ expect(token).to receive(:get).and_return response
309
309
 
310
310
  merchant = @client.merchant
311
- merchant.should be_an_instance_of GoCardless::Merchant
312
- merchant.id.should == 123
313
- merchant.name.should == 'test'
311
+ expect(merchant).to be_an_instance_of GoCardless::Merchant
312
+ expect(merchant.id).to eq(123)
313
+ expect(merchant.name).to eq('test')
314
314
  end
315
315
  end
316
316
 
@@ -321,8 +321,8 @@ describe GoCardless::Client do
321
321
  @client.merchant_id = '123'
322
322
  stub_get(@client, {:id => 123})
323
323
  obj = @client.send(resource, 123)
324
- obj.should be_a GoCardless.const_get(GoCardless::Utils.camelize(resource))
325
- obj.id.should == 123
324
+ expect(obj).to be_a GoCardless.const_get(GoCardless::Utils.camelize(resource))
325
+ expect(obj.id).to eq(123)
326
326
  end
327
327
  end
328
328
  end
@@ -331,7 +331,7 @@ describe GoCardless::Client do
331
331
  @client.instance_variable_set(:@app_secret, 'testsecret')
332
332
  params = {:test => true}
333
333
  sig = '6e4613b729ce15c288f70e72463739feeb05fc0b89b55d248d7f259b5367148b'
334
- @client.send(:sign_params, params)[:signature].should == sig
334
+ expect(@client.send(:sign_params, params)[:signature]).to eq(sig)
335
335
  end
336
336
 
337
337
  describe "#signature_valid?" do
@@ -339,12 +339,17 @@ describe GoCardless::Client do
339
339
 
340
340
  it "succeeds with a valid signature" do
341
341
  params = @client.send(:sign_params, @params)
342
- @client.send(:signature_valid?, params).should be_truthy
342
+ expect(@client.send(:signature_valid?, params)).to be_truthy
343
343
  end
344
344
 
345
345
  it "fails with an invalid signature" do
346
346
  params = {:signature => 'invalid'}.merge(@params)
347
- @client.send(:signature_valid?, params).should be_falsey
347
+ expect(@client.send(:signature_valid?, params)).to be_falsey
348
+ end
349
+
350
+ it "fails with a nil signature" do
351
+ params = {:signature => nil}.merge(@params)
352
+ expect(@client.send(:signature_valid?, params)).to be_falsey
348
353
  end
349
354
  end
350
355
 
@@ -358,7 +363,7 @@ describe GoCardless::Client do
358
363
  end
359
364
 
360
365
  it "doesn't confirm the resource when the signature is invalid" do
361
- @client.should_receive(:request).never
366
+ expect(@client).to receive(:request).never
362
367
  @client.confirm_resource({:signature => 'xxx'}.merge(@params)) rescue nil
363
368
  end
364
369
 
@@ -370,37 +375,37 @@ describe GoCardless::Client do
370
375
 
371
376
  it "confirms the resource when the signature is valid" do
372
377
  # Once for confirm, once to fetch result
373
- @client.should_receive(:request).twice.and_return(double(:parsed => {}))
378
+ expect(@client).to receive(:request).twice.and_return(double(:parsed => {}))
374
379
  @client.confirm_resource(@client.send(:sign_params, @params))
375
380
  end
376
381
 
377
382
  it "and_return the correct object when the signature is valid" do
378
- @client.stub(:request).and_return(double(:parsed => {}))
383
+ allow(@client).to receive(:request).and_return(double(:parsed => {}))
379
384
  subscription = GoCardless::Subscription.new_with_client @client
380
- GoCardless::Subscription.should_receive(:find_with_client).and_return subscription
385
+ expect(GoCardless::Subscription).to receive(:find_with_client).and_return subscription
381
386
 
382
387
  # confirm_resource should use the Subcription class because
383
388
  # the :response_type is set to subscription
384
389
  resource = @client.confirm_resource(@client.send(:sign_params, @params))
385
- resource.should be_a GoCardless::Subscription
390
+ expect(resource).to be_a GoCardless::Subscription
386
391
  end
387
392
 
388
393
  it "includes valid http basic credentials" do
389
- GoCardless::Subscription.stub(:find_with_client)
394
+ allow(GoCardless::Subscription).to receive(:find_with_client)
390
395
  auth = 'Basic YWJjOnh5eg=='
391
- @client.should_receive(:request) do |type, path, opts|
392
- opts.should include :headers
393
- opts[:headers].should include 'Authorization'
394
- opts[:headers]['Authorization'].should == auth
395
- end.once
396
+ expect(@client).to receive(:request) { |type, path, opts|
397
+ expect(opts).to include :headers
398
+ expect(opts[:headers]).to include 'Authorization'
399
+ expect(opts[:headers]['Authorization']).to eq(auth)
400
+ }.once
396
401
  @client.confirm_resource(@client.send(:sign_params, @params))
397
402
  end
398
403
 
399
404
  it "works with string params" do
400
- @client.stub(:request)
401
- GoCardless::Subscription.stub(:find_with_client)
405
+ allow(@client).to receive(:request)
406
+ allow(GoCardless::Subscription).to receive(:find_with_client)
402
407
  params = Hash[@params.dup.map { |k,v| [k.to_s, v] }]
403
- params.keys.each { |p| p.should be_a String }
408
+ params.keys.each { |p| expect(p).to be_a String }
404
409
  # No ArgumentErrors should be raised
405
410
  @client.confirm_resource(@client.send(:sign_params, params))
406
411
  end
@@ -436,9 +441,9 @@ describe GoCardless::Client do
436
441
  end
437
442
 
438
443
  it "rejects other params not required for the signature" do
439
- @client.should_receive(:signature_valid?) do |hash|
444
+ expect(@client).to receive(:signature_valid?) { |hash|
440
445
  !hash.keys.include?(:foo) && !hash.keys.include?('foo')
441
- end.and_return(true)
446
+ }.and_return(true)
442
447
 
443
448
  params = @client.send(:sign_params, @params).merge('foo' => 'bar')
444
449
  @client.response_params_valid?(params)
@@ -446,17 +451,17 @@ describe GoCardless::Client do
446
451
 
447
452
  it "and_return false when the signature is invalid" do
448
453
  params = {:signature => 'xxx'}.merge(@params)
449
- @client.response_params_valid?(params).should be_falsey
454
+ expect(@client.response_params_valid?(params)).to be_falsey
450
455
  end
451
456
 
452
457
  it "and_return true when the signature is valid" do
453
458
  params = @client.send(:sign_params, @params)
454
- @client.response_params_valid?(params).should be_truthy
459
+ expect(@client.response_params_valid?(params)).to be_truthy
455
460
  end
456
461
  end
457
462
 
458
463
  it "#generate_nonce should generate a random string" do
459
- @client.send(:generate_nonce).should_not == @client.send(:generate_nonce)
464
+ expect(@client.send(:generate_nonce)).not_to eq(@client.send(:generate_nonce))
460
465
  end
461
466
 
462
467
  describe "#new_limit_url" do
@@ -472,7 +477,7 @@ describe GoCardless::Client do
472
477
 
473
478
  it "should use the correct path" do
474
479
  url = @client.send(:new_limit_url, :test_limit, {})
475
- URI.parse(url).path.should == '/connect/test_limits/new'
480
+ expect(URI.parse(url).path).to eq('/connect/test_limits/new')
476
481
  end
477
482
 
478
483
  it "should include the params in the URL query" do
@@ -480,64 +485,64 @@ describe GoCardless::Client do
480
485
  url = @client.send(:new_limit_url, :subscription, params)
481
486
  url_params = get_params(url)
482
487
  params.each do |key, value|
483
- url_params["subscription[#{key}]"].should == value
488
+ expect(url_params["subscription[#{key}]"]).to eq(value)
484
489
  end
485
490
  end
486
491
 
487
492
  it "should include the state in the URL query" do
488
493
  params = { 'a' => '1', 'b' => '2', :state => "blah" }
489
494
  url = @client.send(:new_limit_url, :subscription, params)
490
- get_params(url)["state"].should == "blah"
495
+ expect(get_params(url)["state"]).to eq("blah")
491
496
  end
492
497
 
493
498
  it "should include the redirect_uri in the URL query" do
494
499
  params = { 'a' => '1', 'b' => '2', :redirect_uri => "http://www.google.com" }
495
500
  url = @client.send(:new_limit_url, :subscription, params)
496
- get_params(url)["redirect_uri"].should == "http://www.google.com"
501
+ expect(get_params(url)["redirect_uri"]).to eq("http://www.google.com")
497
502
  end
498
503
 
499
504
  it "should include the cancel_uri in the URL query" do
500
505
  params = { 'a' => '1', 'b' => '2', :cancel_uri => "http://www.google.com" }
501
506
  url = @client.send(:new_limit_url, :subscription, params)
502
- get_params(url)["cancel_uri"].should == "http://www.google.com"
507
+ expect(get_params(url)["cancel_uri"]).to eq("http://www.google.com")
503
508
  end
504
509
 
505
510
  it "should add merchant_id to the limit" do
506
511
  url = @client.send(:new_limit_url, :subscription, {})
507
- get_params(url)['subscription[merchant_id]'].should == @merchant_id
512
+ expect(get_params(url)['subscription[merchant_id]']).to eq(@merchant_id)
508
513
  end
509
514
 
510
515
  it "should include a valid signature" do
511
516
  params = get_params(@client.send(:new_limit_url, :subscription, :x => 1))
512
- params.key?('signature').should be_truthy
517
+ expect(params.key?('signature')).to be_truthy
513
518
  sig = params.delete('signature')
514
- sig.should == @client.send(:sign_params, params.clone)[:signature]
519
+ expect(sig).to eq(@client.send(:sign_params, params.clone)[:signature])
515
520
  end
516
521
 
517
522
  it "should include a nonce" do
518
523
  params = get_params(@client.send(:new_limit_url, :subscription, :x => 1))
519
- params['nonce'].should be_a String
524
+ expect(params['nonce']).to be_a String
520
525
  end
521
526
 
522
527
  it "should include a client_id" do
523
528
  params = get_params(@client.send(:new_limit_url, :subscription, :x => 1))
524
- params['client_id'].should == @client.instance_variable_get(:@app_id)
529
+ expect(params['client_id']).to eq(@client.instance_variable_get(:@app_id))
525
530
  end
526
531
 
527
532
  it "should include a timestamp" do
528
533
  # Time.now returning Pacific time
529
534
  time = Time.parse('Sat Jan 01 2011 00:00:00 -0800')
530
- Time.should_receive(:now).and_return time
535
+ expect(Time).to receive(:now).and_return time
531
536
  params = get_params(@client.send(:new_limit_url, :subscription, :x => 1))
532
537
  # Check that timezone is ISO formatted UTC
533
- params['timestamp'].should == "2011-01-01T08:00:00Z"
538
+ expect(params['timestamp']).to eq("2011-01-01T08:00:00Z")
534
539
  end
535
540
  end
536
541
 
537
542
  describe "#merchant_id" do
538
543
  it "and_return the merchant id when an access token is set" do
539
544
  @client.merchant_id = '123'
540
- @client.send(:merchant_id).should == '123'
545
+ expect(@client.send(:merchant_id)).to eq('123')
541
546
  end
542
547
 
543
548
  it "fails if there's no access token" do
@@ -549,26 +554,26 @@ describe GoCardless::Client do
549
554
 
550
555
  describe "#webhook_valid?" do
551
556
  it "and_return false when the webhook signature is invalid" do
552
- @client.webhook_valid?({:some => 'stuff', :signature => 'invalid'}).
553
- should be_falsey
557
+ expect(@client.webhook_valid?({:some => 'stuff', :signature => 'invalid'})).
558
+ to be_falsey
554
559
  end
555
560
 
556
561
  it "and_return true when the webhook signature is valid" do
557
562
  valid_signature = '175e814f0f64e5e86d41fb8fe06a857cedda715a96d3dc3d885e6d97dbeb7e49'
558
- @client.webhook_valid?({:some => 'stuff', :signature => valid_signature}).
559
- should be_truthy
563
+ expect(@client.webhook_valid?({:some => 'stuff', :signature => valid_signature})).
564
+ to be_truthy
560
565
  end
561
566
  end
562
567
 
563
568
  describe "base_url" do
564
569
  it "and_return a custom base URL when one has been set" do
565
570
  @client.base_url = 'http://test.com/'
566
- @client.base_url.should == 'http://test.com/'
571
+ expect(@client.base_url).to eq('http://test.com/')
567
572
  end
568
573
 
569
574
  it "and_return the default value when base_url is not set for the instance" do
570
- GoCardless::Client.stub(:base_url => 'http://gc.com/')
571
- @client.base_url.should == 'http://gc.com/'
575
+ allow(GoCardless::Client).to receive_messages(:base_url => 'http://gc.com/')
576
+ expect(@client.base_url).to eq('http://gc.com/')
572
577
  end
573
578
  end
574
579