apruve 0.11.0 → 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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +33 -1
- data/README.md +26 -29
- data/lib/apruve.rb +6 -2
- data/lib/apruve/client.rb +2 -2
- data/lib/apruve/error.rb +4 -3
- data/lib/apruve/resources.rb +7 -5
- data/lib/apruve/resources/invoice.rb +69 -0
- data/lib/apruve/resources/invoice_item.rb +7 -0
- data/lib/apruve/resources/merchant.rb +11 -0
- data/lib/apruve/resources/order.rb +81 -0
- data/lib/apruve/resources/{line_item.rb → order_item.rb} +1 -1
- data/lib/apruve/resources/subscription.rb +1 -1
- data/lib/apruve/resources/webhook_endpoint.rb +33 -0
- data/lib/apruve/version.rb +1 -1
- data/spec/apruve/apruve_spec.rb +5 -5
- data/spec/apruve/resources/{payment_item_spec.rb → invoice_item_spec.rb} +5 -4
- data/spec/apruve/resources/invoice_spec.rb +291 -0
- data/spec/apruve/resources/merchant_spec.rb +56 -0
- data/spec/apruve/resources/{line_item_spec.rb → order_item_spec.rb} +2 -2
- data/spec/apruve/resources/order_spec.rb +220 -0
- data/spec/apruve/resources/payment_request_spec.rb +19 -0
- data/spec/apruve/resources/subscription_adjustment_spec.rb +10 -10
- data/spec/apruve/resources/subscription_spec.rb +6 -6
- data/spec/apruve/resources/webhook_endpoint_spec.rb +137 -0
- data/spec/spec_helper.rb +3 -0
- metadata +21 -14
- data/lib/apruve/resources/payment.rb +0 -43
- data/lib/apruve/resources/payment_item.rb +0 -7
- data/lib/apruve/resources/payment_request.rb +0 -59
- data/spec/apruve/resources/payment_spec.rb +0 -129
@@ -1,5 +1,5 @@
|
|
1
1
|
module Apruve
|
2
|
-
class
|
2
|
+
class OrderItem < Apruve::ApruveObject
|
3
3
|
attr_accessor :id, :title, :amount_cents, :price_ea_cents, :quantity, :description, :merchant_notes,
|
4
4
|
:variant_info, :sku, :vendor, :view_product_url, :plan_code, :line_item_api_url,
|
5
5
|
:subscription_url
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Apruve
|
2
|
+
class WebhookEndpoint < Apruve::ApruveObject
|
3
|
+
attr_accessor :id, :version, :url, :merchant_id
|
4
|
+
|
5
|
+
def self.find(merchant_id, id)
|
6
|
+
response = Apruve.get("merchants/#{merchant_id}/webhook_endpoints/#{id}")
|
7
|
+
logger.debug response.body
|
8
|
+
WebhookEndpoint.new(response.body.merge(merchant_id: merchant_id))
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.where(merchant_id)
|
12
|
+
response = Apruve.get("merchants/#{merchant_id}/webhook_endpoints")
|
13
|
+
logger.debug response.body
|
14
|
+
ret = []
|
15
|
+
response.body.each do |i|
|
16
|
+
ret << WebhookEndpoint.new(i.merge(merchant_id: merchant_id))
|
17
|
+
end
|
18
|
+
ret
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy!
|
22
|
+
response = Apruve.delete("merchants/#{merchant_id}/webhook_endpoints/#{id}")
|
23
|
+
logger.debug response.body
|
24
|
+
response.status
|
25
|
+
end
|
26
|
+
|
27
|
+
def create!
|
28
|
+
response = Apruve.post("merchants/#{merchant_id}/webhook_endpoints", {webhook_endpoint: self}.to_json )
|
29
|
+
logger.debug response.body
|
30
|
+
initialize response.body
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/apruve/version.rb
CHANGED
data/spec/apruve/apruve_spec.rb
CHANGED
@@ -8,35 +8,35 @@ describe 'Apruve' do
|
|
8
8
|
|
9
9
|
describe '#js' do
|
10
10
|
describe 'test' do
|
11
|
-
let (:script_tag) { '<script type="text/javascript" src="https://test.apruve.com/js/apruve.js"></script>' }
|
11
|
+
let (:script_tag) { '<script type="text/javascript" src="https://test.apruve.com/js/v4/apruve.js"></script>' }
|
12
12
|
it 'should print the tag' do
|
13
13
|
Apruve.configure(nil, 'test')
|
14
14
|
expect(Apruve.js).to eq script_tag
|
15
15
|
end
|
16
16
|
end
|
17
17
|
describe 'prod' do
|
18
|
-
let (:script_tag) { '<script type="text/javascript" src="http://localhost:3000/js/apruve.js"></script>' }
|
18
|
+
let (:script_tag) { '<script type="text/javascript" src="http://localhost:3000/js/v4/apruve.js"></script>' }
|
19
19
|
it 'should print the tag' do
|
20
20
|
Apruve.configure(nil)
|
21
21
|
expect(Apruve.js).to eq script_tag
|
22
22
|
end
|
23
23
|
end
|
24
24
|
describe 'local' do
|
25
|
-
let (:script_tag) { '<script type="text/javascript" src="https://www.apruve.com/js/apruve.js"></script>' }
|
25
|
+
let (:script_tag) { '<script type="text/javascript" src="https://www.apruve.com/js/v4/apruve.js"></script>' }
|
26
26
|
it 'should print the tag' do
|
27
27
|
Apruve.configure(nil, 'prod')
|
28
28
|
expect(Apruve.js).to eq script_tag
|
29
29
|
end
|
30
30
|
end
|
31
31
|
describe 'compact' do
|
32
|
-
let (:script_tag) { '<script type="text/javascript" src="http://localhost:3000/js/apruve.js?display=compact"></script>' }
|
32
|
+
let (:script_tag) { '<script type="text/javascript" src="http://localhost:3000/js/v4/apruve.js?display=compact"></script>' }
|
33
33
|
it 'should print the tag' do
|
34
34
|
Apruve.configure(nil)
|
35
35
|
expect(Apruve.js('compact')).to eq script_tag
|
36
36
|
end
|
37
37
|
end
|
38
38
|
describe 'overrides' do
|
39
|
-
let (:script_tag) { '<script type="text/javascript" src="mailto://google.com:4567/js/apruve.js"></script>' }
|
39
|
+
let (:script_tag) { '<script type="text/javascript" src="mailto://google.com:4567/js/v4/apruve.js"></script>' }
|
40
40
|
it 'should print the tag' do
|
41
41
|
Apruve.configure(nil, 'prod', {scheme: 'mailto', host: 'google.com', port: 4567})
|
42
42
|
expect(Apruve.js).to eq script_tag
|
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Apruve::
|
4
|
-
let (:
|
5
|
-
subject {
|
3
|
+
describe Apruve::InvoiceItem do
|
4
|
+
let (:invoice_item) {Apruve::InvoiceItem.new}
|
5
|
+
subject { invoice_item }
|
6
6
|
|
7
7
|
it { should respond_to(:title) }
|
8
|
-
it {
|
8
|
+
it { should_not respond_to(:amount_cents) }
|
9
9
|
it { should respond_to(:price_ea_cents) }
|
10
|
+
it { should respond_to(:price_total_cents) }
|
10
11
|
it { should respond_to(:quantity) }
|
11
12
|
it { should respond_to(:description) }
|
12
13
|
it { should respond_to(:variant_info) }
|
@@ -0,0 +1,291 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Apruve::Invoice do
|
4
|
+
before :each do
|
5
|
+
Apruve.configure('f5fbe71d68772d1f562ed6f598b995b3', 'local')
|
6
|
+
end
|
7
|
+
|
8
|
+
let (:amount_cents) { 12340 }
|
9
|
+
let (:notes) { 'notes from merchant' }
|
10
|
+
let (:order_id) { '9999' }
|
11
|
+
let (:invoice) do
|
12
|
+
Apruve::Invoice.new(
|
13
|
+
order_id: order_id,
|
14
|
+
amount_cents: amount_cents,
|
15
|
+
)
|
16
|
+
end
|
17
|
+
subject { invoice }
|
18
|
+
|
19
|
+
it { should respond_to(:id) }
|
20
|
+
it { should respond_to(:order_id) }
|
21
|
+
it { should respond_to(:status) }
|
22
|
+
it { should respond_to(:amount_cents) }
|
23
|
+
it { should respond_to(:currency) }
|
24
|
+
it { should respond_to(:merchant_notes) }
|
25
|
+
it { should respond_to(:merchant_invoice_id) }
|
26
|
+
it { should respond_to(:shipping_cents) }
|
27
|
+
it { should respond_to(:tax_cents) }
|
28
|
+
it { should respond_to(:invoice_items) }
|
29
|
+
it { should respond_to(:created_at) }
|
30
|
+
it { should respond_to(:opened_at) }
|
31
|
+
it { should respond_to(:due_at) }
|
32
|
+
it { should respond_to(:final_state_at) }
|
33
|
+
it { should respond_to(:links) }
|
34
|
+
|
35
|
+
describe '#to_json' do
|
36
|
+
let(:expected) do
|
37
|
+
'{"order_id":"9999","amount_cents":12340,"invoice_items":[],"currency":"USD"}'
|
38
|
+
end
|
39
|
+
its(:to_json) { should eq expected }
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#validate' do
|
43
|
+
describe 'no errors' do
|
44
|
+
it 'should not raise' do
|
45
|
+
expect { invoice.validate }.not_to raise_error
|
46
|
+
end
|
47
|
+
end
|
48
|
+
describe 'errors' do
|
49
|
+
before :each do
|
50
|
+
invoice.amount_cents = nil
|
51
|
+
end
|
52
|
+
it 'should raise on no merchant_id' do
|
53
|
+
expect { invoice.validate }.to raise_error(Apruve::ValidationError, '["amount_cents must be set"]')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#find' do
|
59
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
60
|
+
describe 'success' do
|
61
|
+
let! (:stubs) do
|
62
|
+
faraday_stubs do |stub|
|
63
|
+
stub.get("/api/v4/invoices/#{id}") { [200, {}, '{}'] }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
it 'should do a get' do
|
67
|
+
Apruve::Invoice.find(id)
|
68
|
+
stubs.verify_stubbed_calls
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'not found' do
|
73
|
+
let! (:stubs) do
|
74
|
+
faraday_stubs do |stub|
|
75
|
+
stub.get("/api/v4/invoices/#{id}") { [404, {}, 'Not Found'] }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
it 'should raise' do
|
79
|
+
expect { Apruve::Invoice.find(id) }.to raise_error(Apruve::NotFound)
|
80
|
+
stubs.verify_stubbed_calls
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#save' do
|
86
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
87
|
+
let (:status) { 'pending' }
|
88
|
+
let (:api_url) { Faker::Internet.url }
|
89
|
+
let (:view_url) { Faker::Internet.url }
|
90
|
+
let (:response) do
|
91
|
+
{
|
92
|
+
id: id,
|
93
|
+
status: status,
|
94
|
+
api_url: api_url,
|
95
|
+
view_url: view_url
|
96
|
+
}
|
97
|
+
end
|
98
|
+
describe 'success' do
|
99
|
+
let! (:stubs) do
|
100
|
+
faraday_stubs do |stub|
|
101
|
+
stub.post(
|
102
|
+
"/api/v4/invoices",
|
103
|
+
invoice.to_json,
|
104
|
+
) { [200, {}, response.to_json] }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
it 'should do a post' do
|
108
|
+
invoice.save!
|
109
|
+
expect(invoice.id).to eq id
|
110
|
+
expect(invoice.status).to eq status
|
111
|
+
stubs.verify_stubbed_calls
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe 'invoice request not found' do
|
116
|
+
let! (:stubs) do
|
117
|
+
faraday_stubs do |stub|
|
118
|
+
stub.post(
|
119
|
+
"/api/v4/invoices",
|
120
|
+
invoice.to_json,
|
121
|
+
) { [404, {}, 'Not Found'] }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
it 'should raise' do
|
125
|
+
expect { invoice.save! }.to raise_error(Apruve::NotFound)
|
126
|
+
stubs.verify_stubbed_calls
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe '#issue' do
|
132
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
133
|
+
let (:status) { 'open' }
|
134
|
+
let (:api_url) { Faker::Internet.url }
|
135
|
+
let (:view_url) { Faker::Internet.url }
|
136
|
+
let (:response) do
|
137
|
+
{
|
138
|
+
id: id,
|
139
|
+
status: status,
|
140
|
+
api_url: api_url,
|
141
|
+
view_url: view_url
|
142
|
+
}
|
143
|
+
end
|
144
|
+
let (:invoice) { Apruve::Invoice.new({id: id, order_id: order_id, amount_cents: amount_cents})}
|
145
|
+
describe 'success' do
|
146
|
+
let! (:stubs) do
|
147
|
+
faraday_stubs do |stub|
|
148
|
+
stub.post("/api/v4/invoices/#{id}/issue") { [200, {}, response.to_json] }
|
149
|
+
end
|
150
|
+
end
|
151
|
+
it 'should do a post' do
|
152
|
+
invoice.issue!
|
153
|
+
expect(invoice.id).to eq id
|
154
|
+
expect(invoice.status).to eq status
|
155
|
+
stubs.verify_stubbed_calls
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe 'invoice request not found' do
|
160
|
+
let! (:stubs) do
|
161
|
+
faraday_stubs do |stub|
|
162
|
+
stub.post("/api/v4/invoices/#{id}/issue") { [404, {}, 'Not Found'] }
|
163
|
+
end
|
164
|
+
end
|
165
|
+
it 'should raise' do
|
166
|
+
expect { invoice.issue! }.to raise_error(Apruve::NotFound)
|
167
|
+
stubs.verify_stubbed_calls
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe '#update' do
|
173
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
174
|
+
let (:status) { 'pending' }
|
175
|
+
let (:api_url) { Faker::Internet.url }
|
176
|
+
let (:view_url) { Faker::Internet.url }
|
177
|
+
let (:response) do
|
178
|
+
{
|
179
|
+
id: id,
|
180
|
+
status: status,
|
181
|
+
api_url: api_url,
|
182
|
+
view_url: view_url
|
183
|
+
}
|
184
|
+
end
|
185
|
+
let (:invoice) { Apruve::Invoice.new({id: id, order_id: order_id, amount_cents: amount_cents})}
|
186
|
+
describe 'success' do
|
187
|
+
let! (:stubs) do
|
188
|
+
faraday_stubs do |stub|
|
189
|
+
stub.patch("/api/v4/invoices/#{id}", invoice.to_json) { [200, {}, response.to_json] }
|
190
|
+
end
|
191
|
+
end
|
192
|
+
it 'should do a patch' do
|
193
|
+
invoice.update!
|
194
|
+
expect(invoice.status).to eq status
|
195
|
+
stubs.verify_stubbed_calls
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe 'invoice request not found' do
|
200
|
+
let! (:stubs) do
|
201
|
+
faraday_stubs do |stub|
|
202
|
+
stub.patch("/api/v4/invoices/#{id}", invoice.to_json) { [404, {}, 'Not Found'] }
|
203
|
+
end
|
204
|
+
end
|
205
|
+
it 'should raise' do
|
206
|
+
expect { invoice.update! }.to raise_error(Apruve::NotFound)
|
207
|
+
stubs.verify_stubbed_calls
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe '#close' do
|
213
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
214
|
+
let (:status) { 'pending' }
|
215
|
+
let (:api_url) { Faker::Internet.url }
|
216
|
+
let (:view_url) { Faker::Internet.url }
|
217
|
+
let (:response) do
|
218
|
+
{
|
219
|
+
id: id,
|
220
|
+
status: status,
|
221
|
+
api_url: api_url,
|
222
|
+
view_url: view_url
|
223
|
+
}
|
224
|
+
end
|
225
|
+
let (:invoice) { Apruve::Invoice.new({id: id, order_id: order_id, amount_cents: amount_cents})}
|
226
|
+
describe 'success' do
|
227
|
+
let! (:stubs) do
|
228
|
+
faraday_stubs do |stub|
|
229
|
+
stub.post("/api/v4/invoices/#{id}/close") { [200, {}, response.to_json] }
|
230
|
+
end
|
231
|
+
end
|
232
|
+
it 'should do a post' do
|
233
|
+
invoice.close!
|
234
|
+
expect(invoice.status).to eq status
|
235
|
+
stubs.verify_stubbed_calls
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe 'invoice request not found' do
|
240
|
+
let! (:stubs) do
|
241
|
+
faraday_stubs do |stub|
|
242
|
+
stub.post("/api/v4/invoices/#{id}/close") { [404, {}, 'Not Found'] }
|
243
|
+
end
|
244
|
+
end
|
245
|
+
it 'should raise' do
|
246
|
+
expect { invoice.close! }.to raise_error(Apruve::NotFound)
|
247
|
+
stubs.verify_stubbed_calls
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
describe '#cancel' do
|
253
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
254
|
+
let (:status) { 'pending' }
|
255
|
+
let (:api_url) { Faker::Internet.url }
|
256
|
+
let (:view_url) { Faker::Internet.url }
|
257
|
+
let (:response) do
|
258
|
+
{
|
259
|
+
id: id,
|
260
|
+
status: status,
|
261
|
+
api_url: api_url,
|
262
|
+
view_url: view_url
|
263
|
+
}
|
264
|
+
end
|
265
|
+
let (:invoice) { Apruve::Invoice.new({id: id, order_id: order_id, amount_cents: amount_cents})}
|
266
|
+
describe 'success' do
|
267
|
+
let! (:stubs) do
|
268
|
+
faraday_stubs do |stub|
|
269
|
+
stub.post("/api/v4/invoices/#{id}/cancel") { [200, {}, response.to_json] }
|
270
|
+
end
|
271
|
+
end
|
272
|
+
it 'should do a post' do
|
273
|
+
invoice.cancel!
|
274
|
+
expect(invoice.status).to eq status
|
275
|
+
stubs.verify_stubbed_calls
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
describe 'invoice request not found' do
|
280
|
+
let! (:stubs) do
|
281
|
+
faraday_stubs do |stub|
|
282
|
+
stub.post("/api/v4/invoices/#{id}/cancel") { [404, {}, 'Not Found'] }
|
283
|
+
end
|
284
|
+
end
|
285
|
+
it 'should raise' do
|
286
|
+
expect { invoice.cancel! }.to raise_error(Apruve::NotFound)
|
287
|
+
stubs.verify_stubbed_calls
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Apruve::Merchant do
|
4
|
+
before :each do
|
5
|
+
Apruve.configure('f5fbe71d68772d1f562ed6f598b995b3', 'local')
|
6
|
+
end
|
7
|
+
|
8
|
+
let (:id) { '89ea2488fe0a5c7bb38aa7f9b088874a' }
|
9
|
+
let (:name) { 'A title' }
|
10
|
+
let (:web_url) { Faker::Internet.url }
|
11
|
+
let (:email) { Faker::Internet.email }
|
12
|
+
let (:phone) { '651-555-1234' }
|
13
|
+
let (:merchant) do
|
14
|
+
Apruve::Merchant.new(
|
15
|
+
id: id,
|
16
|
+
name: name,
|
17
|
+
web_url: web_url,
|
18
|
+
email: email,
|
19
|
+
phone: phone
|
20
|
+
)
|
21
|
+
end
|
22
|
+
subject { merchant }
|
23
|
+
|
24
|
+
# from line_item
|
25
|
+
it { should respond_to(:id) }
|
26
|
+
it { should respond_to(:name) }
|
27
|
+
it { should respond_to(:web_url) }
|
28
|
+
it { should respond_to(:email) }
|
29
|
+
it { should respond_to(:phone) }
|
30
|
+
|
31
|
+
describe '#find' do
|
32
|
+
describe 'success' do
|
33
|
+
let! (:stubs) do
|
34
|
+
faraday_stubs do |stub|
|
35
|
+
stub.get("/api/v4/merchants/#{id}") { [200, {}, '{}'] }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
it 'should do a get' do
|
39
|
+
Apruve::Merchant.find(id)
|
40
|
+
stubs.verify_stubbed_calls
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'not found' do
|
45
|
+
let! (:stubs) do
|
46
|
+
faraday_stubs do |stub|
|
47
|
+
stub.get("/api/v4/merchants/#{id}") { [404, {}, 'Not Found'] }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
it 'should raise' do
|
51
|
+
expect { Apruve::Merchant.find(id) }.to raise_error(Apruve::NotFound)
|
52
|
+
stubs.verify_stubbed_calls
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|