cloud_payments 0.0.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +12 -6
  3. data/Gemfile +2 -2
  4. data/README.md +88 -5
  5. data/Rakefile +1 -0
  6. data/cloud_payments.gemspec +8 -8
  7. data/config.ru +1 -0
  8. data/lib/cloud_payments.rb +6 -1
  9. data/lib/cloud_payments/client.rb +3 -2
  10. data/lib/cloud_payments/client/errors.rb +1 -0
  11. data/lib/cloud_payments/client/gateway_errors.rb +3 -1
  12. data/lib/cloud_payments/client/response.rb +2 -1
  13. data/lib/cloud_payments/client/serializer.rb +1 -0
  14. data/lib/cloud_payments/client/serializer/base.rb +9 -1
  15. data/lib/cloud_payments/client/serializer/multi_json.rb +1 -0
  16. data/lib/cloud_payments/config.rb +4 -0
  17. data/lib/cloud_payments/models.rb +8 -0
  18. data/lib/cloud_payments/models/like_subscription.rb +30 -0
  19. data/lib/cloud_payments/models/model.rb +9 -0
  20. data/lib/cloud_payments/models/on_fail.rb +31 -0
  21. data/lib/cloud_payments/models/on_kassa_receipt.rb +23 -0
  22. data/lib/cloud_payments/models/on_pay.rb +37 -0
  23. data/lib/cloud_payments/models/on_recurrent.rb +22 -0
  24. data/lib/cloud_payments/models/order.rb +14 -0
  25. data/lib/cloud_payments/models/secure3d.rb +1 -0
  26. data/lib/cloud_payments/models/subscription.rb +9 -32
  27. data/lib/cloud_payments/models/transaction.rb +13 -4
  28. data/lib/cloud_payments/namespaces.rb +12 -1
  29. data/lib/cloud_payments/namespaces/base.rb +2 -1
  30. data/lib/cloud_payments/namespaces/cards.rb +6 -0
  31. data/lib/cloud_payments/namespaces/kassa.rb +22 -0
  32. data/lib/cloud_payments/namespaces/orders.rb +15 -0
  33. data/lib/cloud_payments/namespaces/payments.rb +11 -0
  34. data/lib/cloud_payments/namespaces/subscriptions.rb +6 -0
  35. data/lib/cloud_payments/namespaces/tokens.rb +1 -0
  36. data/lib/cloud_payments/version.rb +2 -1
  37. data/lib/cloud_payments/webhooks.rb +42 -0
  38. data/spec/cloud_payments/client/response_spec.rb +3 -1
  39. data/spec/cloud_payments/client/serializer/multi_json_spec.rb +1 -0
  40. data/spec/cloud_payments/models/order_spec.rb +62 -0
  41. data/spec/cloud_payments/models/secure3d_spec.rb +1 -0
  42. data/spec/cloud_payments/models/subscription_spec.rb +1 -1
  43. data/spec/cloud_payments/models/transaction_spec.rb +25 -1
  44. data/spec/cloud_payments/namespaces/base_spec.rb +10 -3
  45. data/spec/cloud_payments/namespaces/cards_spec.rb +42 -2
  46. data/spec/cloud_payments/namespaces/kassa_spec.rb +43 -0
  47. data/spec/cloud_payments/namespaces/orders_spec.rb +57 -0
  48. data/spec/cloud_payments/namespaces/payments_spec.rb +119 -0
  49. data/spec/cloud_payments/namespaces/subscriptions_spec.rb +21 -1
  50. data/spec/cloud_payments/namespaces/tokens_spec.rb +1 -0
  51. data/spec/cloud_payments/namespaces_spec.rb +2 -1
  52. data/spec/cloud_payments/webhooks_spec.rb +272 -0
  53. data/spec/cloud_payments_spec.rb +27 -4
  54. data/spec/fixtures/apis/cards/post3ds/failed.yml +45 -0
  55. data/spec/fixtures/apis/cards/post3ds/successful.yml +48 -0
  56. data/spec/fixtures/apis/orders/cancel/failed.yml +6 -0
  57. data/spec/fixtures/apis/orders/cancel/successful.yml +6 -0
  58. data/spec/fixtures/apis/orders/create/successful.yml +20 -0
  59. data/spec/fixtures/apis/payments/find/failed.yml +45 -0
  60. data/spec/fixtures/apis/payments/find/failed_with_message.yml +6 -0
  61. data/spec/fixtures/apis/payments/find/successful.yml +48 -0
  62. data/spec/fixtures/apis/payments/get/failed.yml +46 -0
  63. data/spec/fixtures/apis/payments/get/failed_with_message.yml +6 -0
  64. data/spec/fixtures/apis/payments/get/refunded.yml +49 -0
  65. data/spec/fixtures/apis/payments/get/successful.yml +49 -0
  66. data/spec/fixtures/apis/subscriptions/find/successful.yml +4 -4
  67. data/spec/fixtures/apis/subscriptions/get/successful.yml +31 -0
  68. data/spec/spec_helper.rb +13 -24
  69. data/spec/support/examples.rb +1 -0
  70. data/spec/support/helpers.rb +3 -2
  71. metadata +62 -34
  72. data/spec/cloud_payments/client_spec.rb +0 -5
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CloudPayments::Secure3D do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CloudPayments::Subscription do
@@ -53,7 +54,6 @@ describe CloudPayments::Subscription do
53
54
 
54
55
  it_behaves_like :raise_without_attribute, :id
55
56
  it_behaves_like :raise_without_attribute, :account_id
56
- it_behaves_like :raise_without_attribute, :description
57
57
  it_behaves_like :raise_without_attribute, :email
58
58
  it_behaves_like :raise_without_attribute, :amount
59
59
  it_behaves_like :raise_without_attribute, :currency_code
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CloudPayments::Transaction do
@@ -33,11 +34,13 @@ describe CloudPayments::Transaction do
33
34
  card_type: 'Visa',
34
35
  card_type_code: 0,
35
36
  card_exp_date: '10/17',
37
+ issuer: 'Sberbank of Russia',
36
38
  issuer_bank_country: 'RU',
37
39
  status: 'Completed',
38
40
  status_code: 3,
39
41
  reason: 'Approved',
40
42
  reason_code: 0,
43
+ refunded: false,
41
44
  card_holder_message: 'Payment successful',
42
45
  name: 'CARDHOLDER NAME',
43
46
  token: 'a4e67841-abb0-42de-a364-d1d8f9f4b3c0'
@@ -71,12 +74,14 @@ describe CloudPayments::Transaction do
71
74
  specify{ expect(subject.card_type).to eq('Visa') }
72
75
  specify{ expect(subject.card_type_code).to eq(0) }
73
76
  specify{ expect(subject.card_exp_date).to eq('10/17') }
77
+ specify{ expect(subject.issuer).to eq('Sberbank of Russia') }
74
78
  specify{ expect(subject.issuer_bank_country).to eq('RU') }
75
79
  specify{ expect(subject.reason).to eq('Approved') }
76
80
  specify{ expect(subject.reason_code).to eq(0) }
77
81
  specify{ expect(subject.card_holder_message).to eq('Payment successful') }
78
82
  specify{ expect(subject.name).to eq('CARDHOLDER NAME') }
79
83
  specify{ expect(subject.token).to eq('a4e67841-abb0-42de-a364-d1d8f9f4b3c0') }
84
+ specify{ expect(subject.refunded).to eq(false) }
80
85
 
81
86
  context 'without any attributes' do
82
87
  let(:attributes){ {} }
@@ -110,9 +115,11 @@ describe CloudPayments::Transaction do
110
115
  it_behaves_like :not_raise_without_attribute, :ip_longitude, :ip_lng
111
116
  it_behaves_like :not_raise_without_attribute, :card_type_code
112
117
  it_behaves_like :not_raise_without_attribute, :card_exp_date
118
+ it_behaves_like :not_raise_without_attribute, :issuer
113
119
  it_behaves_like :not_raise_without_attribute, :issuer_bank_country
114
120
  it_behaves_like :not_raise_without_attribute, :reason
115
121
  it_behaves_like :not_raise_without_attribute, :reason_code
122
+ it_behaves_like :not_raise_without_attribute, :refunded
116
123
  it_behaves_like :not_raise_without_attribute, :card_holder_message
117
124
  it_behaves_like :not_raise_without_attribute, :name
118
125
  it_behaves_like :not_raise_without_attribute, :token
@@ -205,7 +212,7 @@ describe CloudPayments::Transaction do
205
212
  subject{ CloudPayments::Transaction.new(default_attributes.merge(attributes)) }
206
213
 
207
214
  describe '#subscription' do
208
- before{ stub_api_request('subscriptions/find/successful').perform }
215
+ before{ stub_api_request('subscriptions/get/successful').perform }
209
216
 
210
217
  context 'with subscription_id' do
211
218
  let(:attributes){ { subscription_id: 'sc_8cf8a9338fb' } }
@@ -250,5 +257,22 @@ describe CloudPayments::Transaction do
250
257
  specify{ expect(subject.ip_location).to be_nil }
251
258
  end
252
259
  end
260
+
261
+ describe '#refunded?' do
262
+ context do
263
+ let(:attributes) { { refunded: false } }
264
+ specify { expect(subject.refunded?).to be_falsey }
265
+ end
266
+
267
+ context do
268
+ let(:attributes) { { refunded: true } }
269
+ specify { expect(subject.refunded?).to be_truthy }
270
+ end
271
+
272
+ context do
273
+ let(:attributes) { { refunded: nil } }
274
+ specify { expect(subject.refunded?).to be_falsey }
275
+ end
276
+ end
253
277
  end
254
278
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  class TestNamespace < CloudPayments::Namespaces::Base
@@ -14,8 +15,8 @@ describe CloudPayments::Namespaces::Base do
14
15
  subject{ TestNamespace.new(CloudPayments.client) }
15
16
 
16
17
  def stub_api(path, body = '')
17
- url = "http://user:pass@localhost:9292#{path}"
18
- stub_request(:post, url).with(body: body, headers: headers)
18
+ url = "http://localhost:9292#{path}"
19
+ stub_request(:post, url).with(body: body, headers: headers, basic_auth: ['user', 'pass'])
19
20
  end
20
21
 
21
22
  describe '#request' do
@@ -63,7 +64,13 @@ describe CloudPayments::Namespaces::Base do
63
64
 
64
65
  context 'config.raise_banking_errors = true' do
65
66
  before { CloudPayments.config.raise_banking_errors = true }
66
- specify{ expect{ subject.request(:path, request_params) }.to raise_error(CloudPayments::Client::GatewayErrors::LostCard) }
67
+ specify do
68
+ begin
69
+ subject.request(:path, request_params)
70
+ rescue CloudPayments::Client::GatewayErrors::LostCard => err
71
+ expect(err).to be_a CloudPayments::Client::ReasonedGatewayError
72
+ end
73
+ end
67
74
  end
68
75
 
69
76
  context 'config.raise_banking_errors = false' do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CloudPayments::Namespaces::Cards do
@@ -13,11 +14,11 @@ describe CloudPayments::Namespaces::Cards do
13
14
  card_cryptogram_packet: '01492500008719030128SM'
14
15
  } }
15
16
 
16
- context do
17
+ describe '#charge' do
17
18
  context 'config.raise_banking_errors = false' do
18
19
  before { CloudPayments.config.raise_banking_errors = false }
19
20
 
20
- describe '#charge' do
21
+ context do
21
22
  before{ stub_api_request('cards/charge/successful').perform }
22
23
  specify{ expect(subject.charge(attributes)).to be_instance_of(CloudPayments::Transaction) }
23
24
  specify{ expect(subject.charge(attributes)).not_to be_required_secure3d }
@@ -116,4 +117,43 @@ describe CloudPayments::Namespaces::Cards do
116
117
  end
117
118
  end
118
119
  end
120
+
121
+ describe '#post3ds' do
122
+ let(:attributes){ { transaction_id: 12345, pa_res: 'AQ==' } }
123
+
124
+ context 'config.raise_banking_errors = false' do
125
+ before { CloudPayments.config.raise_banking_errors = false }
126
+
127
+ context do
128
+ before{ stub_api_request('cards/post3ds/successful').perform }
129
+ specify{ expect(subject.post3ds(attributes)).to be_instance_of(CloudPayments::Transaction) }
130
+ specify{ expect(subject.post3ds(attributes)).not_to be_required_secure3d }
131
+ specify{ expect(subject.post3ds(attributes)).to be_completed }
132
+ specify{ expect(subject.post3ds(attributes).id).to eq(12345) }
133
+ end
134
+
135
+ context do
136
+ before{ stub_api_request('cards/post3ds/failed').perform }
137
+ specify{ expect(subject.post3ds(attributes)).to be_instance_of(CloudPayments::Transaction) }
138
+ specify{ expect(subject.post3ds(attributes)).not_to be_required_secure3d }
139
+ specify{ expect(subject.post3ds(attributes)).to be_declined }
140
+ specify{ expect(subject.post3ds(attributes).id).to eq(12345) }
141
+ specify{ expect(subject.post3ds(attributes).reason).to eq('InsufficientFunds') }
142
+ end
143
+ end
144
+
145
+ context 'config.raise_banking_errors = true' do
146
+ before { CloudPayments.config.raise_banking_errors = true }
147
+
148
+ context do
149
+ before{ stub_api_request('cards/post3ds/successful').perform }
150
+ specify{ expect{ subject.post3ds(attributes) }.not_to raise_error }
151
+ end
152
+
153
+ context do
154
+ before{ stub_api_request('cards/post3ds/failed').perform }
155
+ specify{ expect{ subject.post3ds(attributes) }.to raise_error(CloudPayments::Client::GatewayErrors::InsufficientFunds) }
156
+ end
157
+ end
158
+ end
119
159
  end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # frozen_string_literal: true
4
+ require 'spec_helper'
5
+
6
+ describe CloudPayments::Namespaces::Kassa do
7
+ subject{ described_class.new(CloudPayments.client) }
8
+
9
+ describe '#receipt' do
10
+ let(:attributes) do
11
+ {
12
+ inn: '7708806666',
13
+ type: 'Income',
14
+ customer_receipt: {
15
+ items: [
16
+ {
17
+ amount: '13350.00',
18
+ label: 'Good Description',
19
+ price: '13350.00',
20
+ quantity: 1.0,
21
+ vat: 0
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ end
27
+
28
+ context do
29
+ before{ attributes.delete(:inn) }
30
+ specify{ expect{subject.receipt(attributes)}.to raise_error(described_class::InnNotProvided) }
31
+ end
32
+
33
+ context do
34
+ before{ attributes.delete(:type) }
35
+ specify{ expect{subject.receipt(attributes)}.to raise_error(described_class::TypeNotProvided) }
36
+ end
37
+
38
+ context do
39
+ before{ attributes.delete(:customer_receipt) }
40
+ specify{ expect{subject.receipt(attributes)}.to raise_error(described_class::CustomerReceiptNotProvided) }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # frozen_string_literal: true
4
+ require 'spec_helper'
5
+
6
+ describe CloudPayments::Namespaces::Orders do
7
+ subject{ described_class.new(CloudPayments.client) }
8
+
9
+ describe '#create' do
10
+ let(:attributes) do
11
+ {
12
+ amount: 10.0,
13
+ currency: 'RUB',
14
+ description: 'Оплата на сайте example.com',
15
+ email: 'client@test.local',
16
+ require_confirmation: true,
17
+ send_email: false,
18
+ invoice_id: 'invoice_100',
19
+ account_id: 'account_200',
20
+ phone: '+7(495)765-4321',
21
+ send_sms: false,
22
+ send_whats_app: false
23
+ }
24
+ end
25
+
26
+ context do
27
+ before{ stub_api_request('orders/create/successful').perform }
28
+
29
+ specify{ expect(subject.create(attributes)).to be_instance_of(CloudPayments::Order) }
30
+
31
+ context do
32
+ let(:sub){ subject.create(attributes) }
33
+
34
+ specify{ expect(sub.id).to eq('f2K8LV6reGE9WBFn') }
35
+ specify{ expect(sub.amount).to eq(10.0) }
36
+ specify{ expect(sub.currency).to eq('RUB') }
37
+ specify{ expect(sub.currency_code).to eq(0) }
38
+ specify{ expect(sub.email).to eq('client@test.local') }
39
+ specify{ expect(sub.description).to eq('Оплата на сайте example.com') }
40
+ specify{ expect(sub.require_confirmation).to eq(true) }
41
+ specify{ expect(sub.url).to eq('https://orders.cloudpayments.ru/d/f2K8LV6reGE9WBFn') }
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#cancel' do
47
+ context do
48
+ before{ stub_api_request('orders/cancel/successful').perform }
49
+ specify{ expect(subject.cancel('12345')).to be_truthy }
50
+ end
51
+
52
+ context do
53
+ before{ stub_api_request('orders/cancel/failed').perform }
54
+ specify{ expect{ subject.cancel('12345') }.to raise_error(CloudPayments::Client::GatewayError, 'Error message') }
55
+ end
56
+ end
57
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CloudPayments::Namespaces::Payments do
@@ -93,4 +94,122 @@ describe CloudPayments::Namespaces::Payments do
93
94
  end
94
95
  end
95
96
  end
97
+
98
+ describe '#get' do
99
+ let(:transaction_id) { 12345 }
100
+
101
+ context 'config.raise_banking_errors = false' do
102
+ before { CloudPayments.config.raise_banking_errors = false }
103
+
104
+ context 'transaction not found' do
105
+ before{ stub_api_request('payments/get/failed_with_message').perform }
106
+ specify{ expect{subject.get(transaction_id)}.to raise_error(CloudPayments::Client::GatewayError, 'Not found') }
107
+ end
108
+
109
+ context 'transaction is failed' do
110
+ before{ stub_api_request('payments/get/failed').perform }
111
+ specify{ expect(subject.get(transaction_id)).to be_instance_of(CloudPayments::Transaction) }
112
+ specify{ expect(subject.get(transaction_id)).not_to be_required_secure3d }
113
+ specify{ expect(subject.get(transaction_id)).to be_declined }
114
+ specify{ expect(subject.get(transaction_id).id).to eq(transaction_id) }
115
+ specify{ expect(subject.get(transaction_id).reason).to eq('InsufficientFunds') }
116
+ end
117
+
118
+ context 'transaction is successful' do
119
+ before{ stub_api_request('payments/get/successful').perform }
120
+ specify{ expect(subject.get(transaction_id)).to be_instance_of(CloudPayments::Transaction) }
121
+ specify{ expect(subject.get(transaction_id)).not_to be_required_secure3d }
122
+ specify{ expect(subject.get(transaction_id)).to be_completed }
123
+ specify{ expect(subject.get(transaction_id).id).to eq(transaction_id) }
124
+ specify{ expect(subject.get(transaction_id).reason).to eq('Approved') }
125
+ end
126
+
127
+ context 'transaction is refunded' do
128
+ before{ stub_api_request('payments/get/refunded').perform }
129
+ specify{ expect(subject.get(transaction_id)).to be_completed }
130
+ specify{ expect(subject.get(transaction_id)).to be_refunded }
131
+ end
132
+ end
133
+
134
+ context 'config.raise_banking_errors = true' do
135
+ before { CloudPayments.config.raise_banking_errors = true}
136
+
137
+ context 'transaction not found' do
138
+ before{ stub_api_request('payments/get/failed_with_message').perform }
139
+ specify{ expect{subject.get(transaction_id)}.to raise_error(CloudPayments::Client::GatewayError, 'Not found') }
140
+ end
141
+
142
+ context 'transaction is failed' do
143
+ before{ stub_api_request('payments/get/failed').perform }
144
+ specify{ expect{subject.get(transaction_id)}.to raise_error(CloudPayments::Client::GatewayErrors::InsufficientFunds) }
145
+ end
146
+
147
+ context 'transaction is successful' do
148
+ before{ stub_api_request('payments/get/successful').perform }
149
+ specify{ expect{subject.get(transaction_id)}.to_not raise_error }
150
+ specify{ expect(subject.get(transaction_id)).to be_instance_of(CloudPayments::Transaction) }
151
+ specify{ expect(subject.get(transaction_id)).not_to be_required_secure3d }
152
+ specify{ expect(subject.get(transaction_id)).to be_completed }
153
+ specify{ expect(subject.get(transaction_id).id).to eq(transaction_id) }
154
+ specify{ expect(subject.get(transaction_id).reason).to eq('Approved') }
155
+ end
156
+ end
157
+ end
158
+
159
+ describe '#find' do
160
+ let(:invoice_id) { '1234567' }
161
+
162
+ context 'config.raise_banking_errors = false' do
163
+ before { CloudPayments.config.raise_banking_errors = false }
164
+
165
+ context 'payment is not found' do
166
+ before{ stub_api_request('payments/find/failed_with_message').perform }
167
+ specify{ expect{subject.find(invoice_id)}.to raise_error(CloudPayments::Client::GatewayError, 'Not found') }
168
+ end
169
+
170
+ context 'payment is failed' do
171
+ before{ stub_api_request('payments/find/failed').perform }
172
+ specify{ expect(subject.find(invoice_id)).to be_instance_of(CloudPayments::Transaction) }
173
+ specify{ expect(subject.find(invoice_id)).not_to be_required_secure3d }
174
+ specify{ expect(subject.find(invoice_id)).to be_declined }
175
+ specify{ expect(subject.find(invoice_id).id).to eq(12345) }
176
+ specify{ expect(subject.find(invoice_id).invoice_id).to eq(invoice_id) }
177
+ specify{ expect(subject.find(invoice_id).reason).to eq('InsufficientFunds') }
178
+ end
179
+
180
+ context 'transaction is successful' do
181
+ before{ stub_api_request('payments/find/successful').perform }
182
+ specify{ expect(subject.find(invoice_id)).to be_instance_of(CloudPayments::Transaction) }
183
+ specify{ expect(subject.find(invoice_id)).not_to be_required_secure3d }
184
+ specify{ expect(subject.find(invoice_id)).to be_completed }
185
+ specify{ expect(subject.find(invoice_id).id).to eq(12345) }
186
+ specify{ expect(subject.find(invoice_id).invoice_id).to eq(invoice_id) }
187
+ specify{ expect(subject.find(invoice_id).reason).to eq('Approved') }
188
+ end
189
+ end
190
+
191
+ context 'config.raise_banking_errors = true' do
192
+ before { CloudPayments.config.raise_banking_errors = true}
193
+
194
+ context 'payment is not found' do
195
+ before{ stub_api_request('payments/find/failed_with_message').perform }
196
+ specify{ expect{subject.find(invoice_id)}.to raise_error(CloudPayments::Client::GatewayError, 'Not found') }
197
+ end
198
+
199
+ context 'payment is failed' do
200
+ before{ stub_api_request('payments/find/failed').perform }
201
+ specify{ expect{subject.find(invoice_id)}.to raise_error(CloudPayments::Client::GatewayErrors::InsufficientFunds) }
202
+ end
203
+
204
+ context 'transaction is successful' do
205
+ before{ stub_api_request('payments/find/successful').perform }
206
+ specify{ expect(subject.find(invoice_id)).to be_instance_of(CloudPayments::Transaction) }
207
+ specify{ expect(subject.find(invoice_id)).not_to be_required_secure3d }
208
+ specify{ expect(subject.find(invoice_id)).to be_completed }
209
+ specify{ expect(subject.find(invoice_id).id).to eq(12345) }
210
+ specify{ expect(subject.find(invoice_id).invoice_id).to eq(invoice_id) }
211
+ specify{ expect(subject.find(invoice_id).reason).to eq('Approved') }
212
+ end
213
+ end
214
+ end
96
215
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CloudPayments::Namespaces::Subscriptions do
@@ -5,7 +6,7 @@ describe CloudPayments::Namespaces::Subscriptions do
5
6
 
6
7
  describe '#find' do
7
8
  context do
8
- before{ stub_api_request('subscriptions/find/successful').perform }
9
+ before{ stub_api_request('subscriptions/get/successful').perform }
9
10
 
10
11
  specify{ expect(subject.find('sc_8cf8a9338fb')).to be_instance_of(CloudPayments::Subscription) }
11
12
 
@@ -21,6 +22,25 @@ describe CloudPayments::Namespaces::Subscriptions do
21
22
  end
22
23
  end
23
24
 
25
+ describe '#find_all' do
26
+ context do
27
+ before{ stub_api_request('subscriptions/find/successful').perform }
28
+
29
+ specify{ expect(subject.find_all("user@example.com")).to be_instance_of(Array) }
30
+ specify{ expect(subject.find_all("user@example.com").first).to be_instance_of(CloudPayments::Subscription) }
31
+
32
+ context do
33
+ let(:sub){ subject.find_all("user@example.com").first }
34
+
35
+ specify{ expect(sub.id).to eq('sc_8cf8a9338fb') }
36
+ specify{ expect(sub.account_id).to eq('user@example.com') }
37
+ specify{ expect(sub.description).to eq('Monthly subscription') }
38
+ specify{ expect(sub.started_at).to eq(DateTime.parse('2014-08-09T11:49:41')) }
39
+ specify{ expect(sub).to be_active }
40
+ end
41
+ end
42
+ end
43
+
24
44
  describe '#create' do
25
45
  let(:attributes){ {
26
46
  token: '477BBA133C182267F',