coinbase 0.0.1 → 4.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.

Potentially problematic release.


This version of coinbase might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +67 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +578 -0
  7. data/Rakefile +7 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +7 -0
  10. data/coinbase.gemspec +30 -0
  11. data/lib/coinbase/wallet/adapters/em_http.rb +64 -0
  12. data/lib/coinbase/wallet/adapters/net_http.rb +62 -0
  13. data/lib/coinbase/wallet/api_client.rb +659 -0
  14. data/lib/coinbase/wallet/api_errors.rb +112 -0
  15. data/lib/coinbase/wallet/api_response.rb +37 -0
  16. data/lib/coinbase/wallet/client.rb +98 -0
  17. data/lib/coinbase/wallet/models/account.rb +187 -0
  18. data/lib/coinbase/wallet/models/api_object.rb +46 -0
  19. data/lib/coinbase/wallet/models/checkout.rb +19 -0
  20. data/lib/coinbase/wallet/models/order.rb +12 -0
  21. data/lib/coinbase/wallet/models/transaction.rb +21 -0
  22. data/lib/coinbase/wallet/models/transfer.rb +13 -0
  23. data/lib/coinbase/wallet/models/user.rb +15 -0
  24. data/lib/coinbase/wallet/version.rb +5 -0
  25. data/lib/coinbase/wallet.rb +23 -156
  26. data/spec/account_spec.rb +193 -0
  27. data/spec/clients/client_spec.rb +34 -0
  28. data/spec/clients/oauth_client_spec.rb +56 -0
  29. data/spec/endpoints_spec.rb +346 -0
  30. data/spec/error_spec.rb +130 -0
  31. data/spec/models/api_object_spec.rb +63 -0
  32. data/spec/models/checkout_spec.rb +52 -0
  33. data/spec/models/current_user_spec.rb +29 -0
  34. data/spec/models/order_spec.rb +52 -0
  35. data/spec/models/request_spec.rb +47 -0
  36. data/spec/models/transfer_spec.rb +64 -0
  37. data/spec/models/user_spec.rb +24 -0
  38. data/spec/spec_helper.rb +13 -0
  39. metadata +72 -82
  40. data/lib/coinbase/address.rb +0 -127
  41. data/lib/coinbase/asset.rb +0 -20
  42. data/lib/coinbase/balance_map.rb +0 -48
  43. data/lib/coinbase/constants.rb +0 -38
  44. data/lib/coinbase/network.rb +0 -55
  45. data/lib/coinbase/transfer.rb +0 -153
  46. data/lib/coinbase.rb +0 -18
@@ -0,0 +1,346 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coinbase::Wallet do
4
+ before :all do
5
+ @client = Coinbase::Wallet::Client.new(api_key: 'api_key', api_secret: 'api_secret')
6
+ end
7
+
8
+ #
9
+ # Data API
10
+ #
11
+ it "gets currencies" do
12
+ stub_request(:get, "https://api.coinbase.com/v2/currencies")
13
+ .to_return(body: { data: mock_collection }.to_json)
14
+ expect(@client.currencies).to eq mock_collection
15
+ end
16
+
17
+ it "gets exchange rates" do
18
+ stub_request(:get, "https://api.coinbase.com/v2/exchange-rates")
19
+ .to_return(body: { data: mock_collection }.to_json)
20
+ expect(@client.exchange_rates).to eq mock_collection
21
+ end
22
+
23
+ it "gets buy price" do
24
+ stub_request(:get, "https://api.coinbase.com/v2/prices/buy")
25
+ .to_return(body: { data: mock_item }.to_json)
26
+ expect(@client.buy_price).to eq mock_item
27
+ end
28
+
29
+ it "gets sell price" do
30
+ stub_request(:get, "https://api.coinbase.com/v2/prices/sell")
31
+ .to_return(body: { data: mock_item }.to_json)
32
+ expect(@client.sell_price).to eq mock_item
33
+ end
34
+
35
+ it "gets spot price" do
36
+ stub_request(:get, "https://api.coinbase.com/v2/prices/spot")
37
+ .to_return(body: { data: mock_item }.to_json)
38
+ expect(@client.spot_price).to eq mock_item
39
+ end
40
+
41
+ it "gets time" do
42
+ stub_request(:get, "https://api.coinbase.com/v2/time")
43
+ .to_return(body: { data: mock_item }.to_json)
44
+ expect(@client.time).to eq mock_item
45
+ end
46
+
47
+ #
48
+ # Wallet API
49
+ #
50
+ it "gets user" do
51
+ stub_request(:get, "https://api.coinbase.com/v2/users/test")
52
+ .to_return(body: { data: mock_item }.to_json)
53
+ expect(@client.user('test')).to eq mock_item
54
+ end
55
+
56
+ it "gets current user" do
57
+ stub_request(:get, "https://api.coinbase.com/v2/user")
58
+ .to_return(body: { data: mock_item }.to_json)
59
+ expect(@client.current_user).to eq mock_item
60
+ end
61
+
62
+ it "gets authorization info" do
63
+ stub_request(:get, "https://api.coinbase.com/v2/user/auth")
64
+ .to_return(body: { data: mock_item }.to_json)
65
+ expect(@client.auth_info).to eq mock_item
66
+ end
67
+
68
+ it "updates current user" do
69
+ stub_request(:put, "https://api.coinbase.com/v2/user")
70
+ .to_return(body: { data: mock_item }.to_json)
71
+ expect(@client.update_current_user(name: "test")).to eq mock_item
72
+ end
73
+
74
+ it "gets accounts" do
75
+ stub_request(:get, "https://api.coinbase.com/v2/accounts")
76
+ .to_return(body: { data: mock_collection }.to_json)
77
+ expect(@client.accounts).to eq mock_collection
78
+ end
79
+
80
+ it "gets account" do
81
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test")
82
+ .to_return(body: { data: mock_item }.to_json)
83
+ expect(@client.account("test")).to eq mock_item
84
+ end
85
+
86
+ it "gets account" do
87
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/primary")
88
+ .to_return(body: { data: mock_item }.to_json)
89
+ expect(@client.primary_account).to eq mock_item
90
+ end
91
+
92
+ it "creates account" do
93
+ stub_request(:post, "https://api.coinbase.com/v2/accounts")
94
+ .to_return(body: { data: mock_item }.to_json)
95
+ expect(@client.create_account).to eq mock_item
96
+ end
97
+
98
+ it "changes primary account" do
99
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/primary")
100
+ .to_return(body: { data: mock_item }.to_json)
101
+ expect(@client.set_primary_account("test")).to eq mock_item
102
+ end
103
+
104
+ it "updates accounts" do
105
+ stub_request(:put, "https://api.coinbase.com/v2/accounts/test")
106
+ .to_return(body: { data: mock_item }.to_json)
107
+ expect(@client.update_account("test", name: "new name")).to eq mock_item
108
+ end
109
+
110
+ it "deletes accounts" do
111
+ stub_request(:delete, "https://api.coinbase.com/v2/accounts/test")
112
+ .to_return(body: { data: mock_item }.to_json)
113
+ expect(@client.delete_account("test")).to eq mock_item
114
+ end
115
+
116
+ it "gets addresses" do
117
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test/addresses")
118
+ .to_return(body: { data: mock_collection }.to_json)
119
+ expect(@client.addresses("test")).to eq mock_collection
120
+ end
121
+
122
+ it "gets address" do
123
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test1/addresses/test2")
124
+ .to_return(body: { data: mock_item }.to_json)
125
+ expect(@client.address("test1", "test2")).to eq mock_item
126
+ end
127
+
128
+ it "creates address" do
129
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/addresses")
130
+ .to_return(body: { data: mock_item }.to_json)
131
+ expect(@client.create_address("test1")).to eq mock_item
132
+ end
133
+
134
+ it "gets transactions" do
135
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test/transactions")
136
+ .to_return(body: { data: mock_collection }.to_json)
137
+ expect(@client.transactions("test")).to eq mock_collection
138
+ end
139
+
140
+ it "gets transaction" do
141
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test1/transactions/test2")
142
+ .to_return(body: { data: mock_item }.to_json)
143
+ expect(@client.transaction("test1", "test2")).to eq mock_item
144
+ end
145
+
146
+ it "sends money" do
147
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/transactions")
148
+ .to_return(body: { data: mock_item }.to_json)
149
+ expect(@client.send("test", amount: 10, to: 'example@coinbase.com')).to eq mock_item
150
+ end
151
+
152
+ it "transfers money" do
153
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/transactions")
154
+ .to_return(body: { data: mock_item }.to_json)
155
+ expect(@client.transfer("test", amount: 10, to: 'example@coinbase.com')).to eq mock_item
156
+ end
157
+
158
+ it "requests money" do
159
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/transactions")
160
+ .to_return(body: { data: mock_item }.to_json)
161
+ expect(@client.request("test", amount: 10, currency: 'BTC', to: 'example@coinbase.com')).to eq mock_item
162
+ end
163
+
164
+ it "completes request" do
165
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/transactions/test2/complete")
166
+ .to_return(body: { data: mock_item }.to_json)
167
+ expect(@client.complete_request("test1", "test2")).to eq mock_item
168
+ end
169
+
170
+ it "re-sends request" do
171
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/transactions/test2/resend")
172
+ .to_return(body: { data: mock_item }.to_json)
173
+ expect(@client.resend_request("test1", "test2")).to eq mock_item
174
+ end
175
+
176
+ it "cancels request" do
177
+ stub_request(:delete, "https://api.coinbase.com/v2/accounts/test1/transactions/test2")
178
+ .to_return(body: { data: mock_item }.to_json)
179
+ expect(@client.cancel_request("test1", "test2")).to eq mock_item
180
+ end
181
+
182
+ it "lists buys" do
183
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test/buys")
184
+ .to_return(body: { data: mock_collection }.to_json)
185
+ expect(@client.list_buys("test")).to eq mock_collection
186
+ end
187
+
188
+ it "lists buy" do
189
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test1/buys/test2")
190
+ .to_return(body: { data: mock_item }.to_json)
191
+ expect(@client.list_buy("test1", "test2")).to eq mock_item
192
+ end
193
+
194
+ it "buys bitcoin" do
195
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/buys")
196
+ .to_return(body: { data: mock_item }.to_json)
197
+ expect(@client.buy("test", amount: 10, currency: 'BTC')).to eq mock_item
198
+ end
199
+
200
+ it "commits buy" do
201
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/buys/test2/commit")
202
+ .to_return(body: { data: mock_item }.to_json)
203
+ expect(@client.commit_buy("test1", "test2")).to eq mock_item
204
+ end
205
+
206
+ it "lists sells" do
207
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test/sells")
208
+ .to_return(body: { data: mock_collection }.to_json)
209
+ expect(@client.list_sells("test")).to eq mock_collection
210
+ end
211
+
212
+ it "lists sell" do
213
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test1/sells/test2")
214
+ .to_return(body: { data: mock_item }.to_json)
215
+ expect(@client.list_sell("test1", "test2")).to eq mock_item
216
+ end
217
+
218
+ it "sells bitcoin" do
219
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/sells")
220
+ .to_return(body: { data: mock_item }.to_json)
221
+ expect(@client.sell("test", amount: 10, currency: 'BTC')).to eq mock_item
222
+ end
223
+
224
+ it "commits sell" do
225
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/sells/test2/commit")
226
+ .to_return(body: { data: mock_item }.to_json)
227
+ expect(@client.commit_sell("test1", "test2")).to eq mock_item
228
+ end
229
+
230
+ it "lists deposits" do
231
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test/deposits")
232
+ .to_return(body: { data: mock_collection }.to_json)
233
+ expect(@client.list_deposits("test")).to eq mock_collection
234
+ end
235
+
236
+ it "lists deposit" do
237
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test1/deposits/test2")
238
+ .to_return(body: { data: mock_item }.to_json)
239
+ expect(@client.list_deposit("test1", "test2")).to eq mock_item
240
+ end
241
+
242
+ it "deposits bitcoin" do
243
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/deposits")
244
+ .to_return(body: { data: mock_item }.to_json)
245
+ expect(@client.deposit("test", amount: 10, currency: 'BTC')).to eq mock_item
246
+ end
247
+
248
+ it "commits deposit" do
249
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/deposits/test2/commit")
250
+ .to_return(body: { data: mock_item }.to_json)
251
+ expect(@client.commit_deposit("test1", "test2")).to eq mock_item
252
+ end
253
+
254
+ it "lists withdrawals" do
255
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test/withdrawals")
256
+ .to_return(body: { data: mock_collection }.to_json)
257
+ expect(@client.list_withdrawals("test")).to eq mock_collection
258
+ end
259
+
260
+ it "lists withdrawal" do
261
+ stub_request(:get, "https://api.coinbase.com/v2/accounts/test1/withdrawals/test2")
262
+ .to_return(body: { data: mock_item }.to_json)
263
+ expect(@client.list_withdrawal("test1", "test2")).to eq mock_item
264
+ end
265
+
266
+ it "withdrawals bitcoin" do
267
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test/withdrawals")
268
+ .to_return(body: { data: mock_item }.to_json)
269
+ expect(@client.withdraw("test", amount: 10, currency: 'BTC')).to eq mock_item
270
+ end
271
+
272
+ it "commits withdrawal" do
273
+ stub_request(:post, "https://api.coinbase.com/v2/accounts/test1/withdrawals/test2/commit")
274
+ .to_return(body: { data: mock_item }.to_json)
275
+ expect(@client.commit_withdrawal("test1", "test2")).to eq mock_item
276
+ end
277
+
278
+ it "gets payment methods" do
279
+ stub_request(:get, "https://api.coinbase.com/v2/payment-methods")
280
+ .to_return(body: { data: mock_collection }.to_json)
281
+ expect(@client.payment_methods).to eq mock_collection
282
+ end
283
+
284
+ #
285
+ # Merchant API
286
+ #
287
+ it "gets merchant" do
288
+ stub_request(:get, "https://api.coinbase.com/v2/merchants/test")
289
+ .to_return(body: { data: mock_item }.to_json)
290
+ expect(@client.merchant('test')).to eq mock_item
291
+ end
292
+
293
+ it "gets merchant orders" do
294
+ stub_request(:get, "https://api.coinbase.com/v2/orders")
295
+ .to_return(body: { data: mock_collection }.to_json)
296
+ expect(@client.orders).to eq mock_collection
297
+ end
298
+
299
+ it "gets merchant order" do
300
+ stub_request(:get, "https://api.coinbase.com/v2/orders/test")
301
+ .to_return(body: { data: mock_item }.to_json)
302
+ expect(@client.order("test")).to eq mock_item
303
+ end
304
+
305
+ it "creates an order" do
306
+ stub_request(:post, "https://api.coinbase.com/v2/orders")
307
+ .to_return(body: { data: mock_item }.to_json)
308
+ expect(@client.create_order(name: "test", amount: 10, currency: "BTC")).to eq mock_item
309
+ end
310
+
311
+ it "refunds merchant order" do
312
+ stub_request(:post, "https://api.coinbase.com/v2/orders/test/refund")
313
+ .to_return(body: { data: mock_item }.to_json)
314
+ expect(@client.refund_order("test", currency: "BTC")).to eq mock_item
315
+ end
316
+
317
+ it "gets checkouts" do
318
+ stub_request(:get, "https://api.coinbase.com/v2/checkouts")
319
+ .to_return(body: { data: mock_collection }.to_json)
320
+ expect(@client.checkouts).to eq mock_collection
321
+ end
322
+
323
+ it "gets checkout" do
324
+ stub_request(:get, "https://api.coinbase.com/v2/checkouts/test")
325
+ .to_return(body: { data: mock_item }.to_json)
326
+ expect(@client.checkout("test")).to eq mock_item
327
+ end
328
+
329
+ it "creates checkout" do
330
+ stub_request(:post, "https://api.coinbase.com/v2/checkouts")
331
+ .to_return(body: { data: mock_item }.to_json)
332
+ expect(@client.create_checkout(name: "test", amount: 10, currency: "BTC")).to eq mock_item
333
+ end
334
+
335
+ it "gets checkout orders" do
336
+ stub_request(:get, "https://api.coinbase.com/v2/checkouts/test/orders")
337
+ .to_return(body: { data: mock_collection }.to_json)
338
+ expect(@client.checkout_orders("test")).to eq mock_collection
339
+ end
340
+
341
+ it "creates checkout order" do
342
+ stub_request(:post, "https://api.coinbase.com/v2/checkouts/test/orders")
343
+ .to_return(body: { data: mock_item }.to_json)
344
+ expect(@client.create_checkout_order("test")).to eq mock_item
345
+ end
346
+ end
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coinbase::Wallet do
4
+ before :all do
5
+ @client = Coinbase::Wallet::Client.new(api_key: 'api_key', api_secret: 'api_secret')
6
+ end
7
+
8
+ it "passes" do
9
+ expect(1).to eq(1)
10
+ end
11
+
12
+ it "handles param_required" do
13
+ stub_request(:get, /.*/)
14
+ .to_return(body: { errors: [{ id: 'param_required', message: 'test' }] }.to_json,
15
+ status: 400)
16
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::ParamRequiredError
17
+ end
18
+
19
+ it "handles invalid_request" do
20
+ stub_request(:get, /.*/)
21
+ .to_return(body: { errors: [{ id: 'invalid_request', message: 'test' }] }.to_json,
22
+ status: 400)
23
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::InvalidRequestError
24
+ end
25
+
26
+ it "handles personal_details_required" do
27
+ stub_request(:get, /.*/)
28
+ .to_return(body: { errors: [{ id: 'personal_details_required', message: 'test' }] }.to_json,
29
+ status: 400)
30
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::PersonalDetailsRequiredError
31
+ end
32
+
33
+ it "handles obscure 400" do
34
+ stub_request(:get, /.*/)
35
+ .to_return(body: { errors: [{ id: 'obscure_400', message: 'test' }] }.to_json,
36
+ status: 400)
37
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::BadRequestError
38
+ end
39
+
40
+ it "handles authentication_error" do
41
+ stub_request(:get, /.*/)
42
+ .to_return(body: { errors: [{ id: 'authentication_error', message: 'test' }] }.to_json,
43
+ status: 401)
44
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::AuthenticationError
45
+ end
46
+
47
+ it "handles unverified_email" do
48
+ stub_request(:get, /.*/)
49
+ .to_return(body: { errors: [{ id: 'unverified_email', message: 'test' }] }.to_json,
50
+ status: 401)
51
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::UnverifiedEmailError
52
+ end
53
+
54
+ it "handles invalid_token" do
55
+ stub_request(:get, /.*/)
56
+ .to_return(body: { errors: [{ id: 'invalid_token', message: 'test' }] }.to_json,
57
+ status: 401)
58
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::InvalidTokenError
59
+ end
60
+
61
+ it "handles revoked_token" do
62
+ stub_request(:get, /.*/)
63
+ .to_return(body: { errors: [{ id: 'revoked_token', message: 'test' }] }.to_json,
64
+ status: 401)
65
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::RevokedTokenError
66
+ end
67
+
68
+ it "handles expired_token" do
69
+ stub_request(:get, /.*/)
70
+ .to_return(body: { errors: [{ id: 'expired_token', message: 'test' }] }.to_json,
71
+ status: 401)
72
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::ExpiredTokenError
73
+ end
74
+
75
+ it "handles obscure 401" do
76
+ stub_request(:get, /.*/)
77
+ .to_return(body: { errors: [{ id: 'obscure_401', message: 'test' }] }.to_json,
78
+ status: 401)
79
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::AuthenticationError
80
+ end
81
+
82
+ it "handles 402" do
83
+ stub_request(:get, /.*/)
84
+ .to_return(body: { errors: [{ id: '402', message: 'test' }] }.to_json,
85
+ status: 402)
86
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::TwoFactorRequiredError
87
+ end
88
+
89
+ it "handles 403" do
90
+ stub_request(:get, /.*/)
91
+ .to_return(body: { errors: [{ id: '403', message: 'test' }] }.to_json,
92
+ status: 403)
93
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::InvalidScopeError
94
+ end
95
+
96
+ it "handles 404" do
97
+ stub_request(:get, /.*/)
98
+ .to_return(body: { errors: [{ id: '404', message: 'test' }] }.to_json,
99
+ status: 404)
100
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::NotFoundError
101
+ end
102
+
103
+ it "handles 422" do
104
+ stub_request(:get, /.*/)
105
+ .to_return(body: { errors: [{ id: '422', message: 'test' }] }.to_json,
106
+ status: 422)
107
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::ValidationError
108
+ end
109
+
110
+ it "handles 429" do
111
+ stub_request(:get, /.*/)
112
+ .to_return(body: { errors: [{ id: '429', message: 'test' }] }.to_json,
113
+ status: 429)
114
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::RateLimitError
115
+ end
116
+
117
+ it "handles 500" do
118
+ stub_request(:get, /.*/)
119
+ .to_return(body: { errors: [{ id: '500', message: 'test' }] }.to_json,
120
+ status: 500)
121
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::InternalServerError
122
+ end
123
+
124
+ it "handles 503" do
125
+ stub_request(:get, /.*/)
126
+ .to_return(body: { errors: [{ id: '503', message: 'test' }] }.to_json,
127
+ status: 503)
128
+ expect { @client.primary_account }.to raise_error Coinbase::Wallet::ServiceUnavailableError
129
+ end
130
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coinbase::Wallet::APIObject do
4
+ before :all do
5
+ @object_data = {
6
+ 'id' => '2bbf394c-193b-5b2a-9155-3b4732659ede',
7
+ 'name' => 'My Wallet',
8
+ 'primary' => true,
9
+ 'type' => 'wallet',
10
+ 'currency' => 'BTC',
11
+ 'balance' => {
12
+ 'amount' => '39.59000000',
13
+ 'currency' => 'BTC'
14
+ },
15
+ 'native_balance' => {
16
+ 'amount' => '395.90',
17
+ 'currency' => 'USD'
18
+ },
19
+ 'created_at' => '2015-01-31T20:49:02Z',
20
+ 'updated_at' => '2015-01-31T20:49:02Z',
21
+ 'resource' => 'account',
22
+ 'resource_path' => '/v2/accounts/2bbf394c-193b-5b2a-9155-3b4732659ede'
23
+ }
24
+
25
+ @client = Coinbase::Wallet::Client.new(api_key: 'api_key', api_secret: 'api_secret')
26
+ @object = Coinbase::Wallet::APIObject.new(@client, @object_data)
27
+ end
28
+
29
+ it 'should access attributes' do
30
+ expect(@object.id).to eq @object_data['id']
31
+ expect(@object.balance.currency).to eq @object_data['balance']['currency']
32
+ expect(@object.primary).to eq @object_data['primary']
33
+ end
34
+
35
+ it 'should convert hashes to APIObjects' do
36
+ expect(@object.balance.class).to eq Coinbase::Wallet::APIObject
37
+ end
38
+
39
+ it 'should convert amounts to BigDecimal' do
40
+ expect(@object.balance.amount.class).to eq BigDecimal
41
+ expect(@object.native_balance.amount.to_f).to eq 395.90
42
+ end
43
+
44
+ it 'should convert timestamps to Time' do
45
+ expect(@object.created_at.class).to eq Time
46
+ end
47
+
48
+ describe '#update' do
49
+ it 'should update object' do
50
+ @object.update({'id' => '1234'})
51
+ expect(@object.id).to eq '1234'
52
+ end
53
+ end
54
+
55
+ describe '#refresh!' do
56
+ it 'should fetch new data for object' do
57
+ stub_request(:get, 'https://api.coinbase.com' + @object_data['resource_path'])
58
+ .to_return(body: { data: { id: 'new_id' } }.to_json)
59
+ @object.refresh!
60
+ expect(@object.id).to eq 'new_id'
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coinbase::Wallet::Checkout do
4
+ before :all do
5
+ @object_data = {
6
+ 'id' => 'ffc93ba1-874d-5c55-853c-53c9c4814b1e',
7
+ 'embed_code' => 'af0b52802ad7b36806e307b2d294e3b4',
8
+ 'type' => 'order',
9
+ 'name' => 'My Checkout',
10
+ 'description' => nil,
11
+ 'amount' => {
12
+ 'amount' => '99.00000000',
13
+ 'currency' => 'BTC'
14
+ },
15
+ 'style' => 'buy_now_large',
16
+ 'customer_defined_amount' => false,
17
+ 'amount_presets' => [],
18
+ 'success_url' => nil,
19
+ 'cancel_url' => nil,
20
+ 'info_url' => nil,
21
+ 'auto_redirect' => false,
22
+ 'collect_shipping_address' => false,
23
+ 'collect_email' => false,
24
+ 'collect_phone_number' => false,
25
+ 'collect_country' => false,
26
+ 'metadata' => {},
27
+ 'created_at' => '2015-01-31T20:49:02Z',
28
+ 'updated_at' => '2015-01-31T20:49:02Z',
29
+ 'resource' => 'checkout',
30
+ 'resource_path' => '/v2/checkouts/ffc93ba1-874d-5c55-853c-53c9c4814b1e'
31
+ }
32
+
33
+ @client = Coinbase::Wallet::Client.new(api_key: 'api_key', api_secret: 'api_secret')
34
+ @object = Coinbase::Wallet::Checkout.new(@client, @object_data)
35
+ end
36
+
37
+ describe '#orders' do
38
+ it 'should get latest order' do
39
+ stub_request(:get, 'https://api.coinbase.com' + @object_data['resource_path'] + '/orders')
40
+ .to_return(body: { data: mock_item }.to_json)
41
+ expect(@object.orders).to eq mock_item
42
+ end
43
+ end
44
+
45
+ describe '#create_order' do
46
+ it 'should create a new order' do
47
+ stub_request(:post, 'https://api.coinbase.com' + @object_data['resource_path'] + '/orders')
48
+ .to_return(body: { data: mock_item }.to_json)
49
+ expect(@object.create_order).to eq mock_item
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coinbase::Wallet::CurrentUser do
4
+ before :all do
5
+ @user_data = {
6
+ 'id' => '9da7a204-544e-5fd1-9a12-61176c5d4cd8',
7
+ 'name' => 'User One',
8
+ 'username' => 'user1',
9
+ 'profile_location' => nil,
10
+ 'profile_bio' => nil,
11
+ 'profile_url' => 'https://coinbase.com/user1',
12
+ 'avatar_url' => 'https://images.coinbase.com/avatar?h=vR%2FY8igBoPwuwGren5JMwvDNGpURAY%2F0nRIOgH%2FY2Qh%2BQ6nomR3qusA%2Bh6o2%0Af9rH&s=128',
13
+ 'resource' => 'user',
14
+ 'resource_path' => '/v2/user'
15
+ }
16
+
17
+ @client = Coinbase::Wallet::Client.new(api_key: 'api_key', api_secret: 'api_secret')
18
+ @user = Coinbase::Wallet::CurrentUser.new(@client, @user_data)
19
+ end
20
+
21
+ describe '#update!' do
22
+ it 'should update new data for object' do
23
+ stub_request(:put, 'https://api.coinbase.com' + @user_data['resource_path'])
24
+ .to_return(body: { data: { name: 'james smith' } }.to_json)
25
+ @user.update!(name: 'james smith')
26
+ expect(@user.name).to eq 'james smith'
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coinbase::Wallet::Order do
4
+ before :all do
5
+ @object_data = {
6
+ 'id' => '0fdfb26e-bd26-5e1c-b055-7b935e57fa33',
7
+ 'code' => '66BEOV2A',
8
+ 'status' => 'paid',
9
+ 'type' => 'order',
10
+ 'name' => 'Order #123',
11
+ 'description' => 'Sample order',
12
+ 'amount' => {
13
+ 'amount' => '10.00',
14
+ 'currency' => 'USD'
15
+ },
16
+ 'payout_amount' => nil,
17
+ 'bitcoin_address' => 'mymZkiXhQNd6VWWG7VGSVdDX9bKmviti3U',
18
+ 'bitcoin_amount' => {
19
+ 'amount' => '1.00000000',
20
+ 'currency' => 'BTC'
21
+ },
22
+ 'bitcoin_uri' => 'bitcoin:mrNo5ntJfWP8BGjR2MkAxEgoE8NDu4CM3g?amount=1.00&r=https://www.coinbase.com/r/555b9570a54d75860e00041d',
23
+ 'receipt_url' => 'https://www.coinbase.com/orders/d5d3e516dae19ca5b444fe56405ee917/receipt',
24
+ 'expires_at' => '2015-01-31T20:49:02Z',
25
+ 'mispaid_at' => nil,
26
+ 'paid_at' => '2015-01-31T20:49:02Z',
27
+ 'refund_address' => 'n3z9tkPHcMcUwGBbyjipT1RxJ3qXK4CKNQ',
28
+ 'transaction' => {
29
+ 'id' => 'aee1de26-9d08-56bf-8c51-7f8e6a23e046',
30
+ 'resource' => 'transaction'
31
+ },
32
+ 'refunds' => [],
33
+ 'mispayments' => [],
34
+ 'metadata' => {},
35
+ 'created_at' => '2015-01-31T20:49:02Z',
36
+ 'updated_at' => '2015-01-31T20:49:02Z',
37
+ 'resource' => 'order',
38
+ 'resource_path' => '/v2/orders/0fdfb26e-bd26-5e1c-b055-7b935e57fa33'
39
+ }
40
+
41
+ @client = Coinbase::Wallet::Client.new(api_key: 'api_key', api_secret: 'api_secret')
42
+ @object = Coinbase::Wallet::Order.new(@client, @object_data)
43
+ end
44
+
45
+ describe '#refund!' do
46
+ it 'should refund an order' do
47
+ stub_request(:post, 'https://api.coinbase.com' + @object_data['resource_path'] + '/refund')
48
+ .to_return(body: { data: mock_item }.to_json)
49
+ expect(@object.refund!).to eq mock_item
50
+ end
51
+ end
52
+ end