paypal-sdk-rest 0.6.0 → 0.6.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.
@@ -1,8 +1,8 @@
1
- test: &default
2
- client_id: EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM
3
- client_secret: EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM
4
- mode: sandbox
5
-
6
- development:
7
- <<: *default
8
-
1
+ test: &default
2
+ client_id: EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM
3
+ client_secret: EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM
4
+ mode: sandbox
5
+
6
+ development:
7
+ <<: *default
8
+
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ describe "Invoice" do
4
+
5
+ InvoiceAttributes = {
6
+ "merchant_info" => {
7
+ "email" => "PPX.DevNet-facilitator@gmail.com"
8
+ },
9
+ "billing_info" => [ { "email" => "example@example.com" } ],
10
+ "items" => [
11
+ {
12
+ "name" => "Sutures",
13
+ "quantity" => 100,
14
+ "unit_price" => {
15
+ "currency" => "USD",
16
+ "value" => 5
17
+ }
18
+ }
19
+ ],
20
+ "note" => "Medical Invoice 16 Jul, 2013 PST"
21
+ }
22
+
23
+ it "create invoice" do
24
+ invoice = PayPal::SDK::REST::Invoice.new(InvoiceAttributes)
25
+ invoice.create.should be_true
26
+ end
27
+
28
+ it "list invoice" do
29
+ history = PayPal::SDK::REST::Invoice.get_all( :total_count_required =>true )
30
+ history.total_count.should_not be_nil
31
+ end
32
+
33
+ it "get invoice" do
34
+ invoice = PayPal::SDK::REST::Invoice.find("INV2-P6VJ-36HG-BBVT-M2MA")
35
+ invoice.should be_a PayPal::SDK::REST::Invoice
36
+ invoice.id.should eql "INV2-P6VJ-36HG-BBVT-M2MA"
37
+ end
38
+ end
data/spec/log/http.log CHANGED
@@ -0,0 +1,71 @@
1
+ opening connection to api.sandbox.paypal.com:443...
2
+ opened
3
+ starting SSL for api.sandbox.paypal.com:443...
4
+ SSL established
5
+ <- "POST /v1/invoicing/invoices HTTP/1.1\r\nAuthorization: Bearer 2.RUg7qbhqxLBDae7Si-exTRs8ztl0Tv1FWMAnd0XVo\r\nContent-Type: application/json\r\nUser-Agent: PayPalSDK/rest-sdk-ruby 0.6.1 (paypal-sdk-core 0.2.8; ruby 2.1.1p76-x86_64-darwin12.0)\r\nPaypal-Request-Id: 3f420816-6ba8-4831-be95-6337e8eeb209\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nHost: api.sandbox.paypal.com\r\nContent-Length: 243\r\n\r\n"
6
+ <- "{\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"items\":[{\"name\":\"Sutures\",\"quantity\":100.0,\"unit_price\":{\"currency\":\"USD\",\"value\":\"5\"}}],\"note\":\"Medical Invoice 16 Jul, 2013 PST\"}"
7
+ -> "HTTP/1.1 201 Created\r\n"
8
+ -> "Server: Apache-Coyote/1.1\r\n"
9
+ -> "PROXY_SERVER_INFO: host=slcsbjava2.slc.paypal.com;threadId=331\r\n"
10
+ -> "Paypal-Debug-Id: 31e03665acd13\r\n"
11
+ -> "Date: Fri, 04 Apr 2014 09:03:36 GMT\r\n"
12
+ -> "Location: https://api.sandbox.paypal.com/v1/invoicing/invoices/INV2-QZ3V-GKZS-MJNP-HGBQ\r\n"
13
+ -> "Content-Type: application/json\r\n"
14
+ -> "Transfer-Encoding: chunked\r\n"
15
+ -> "\r\n"
16
+ -> "1c6\r\n"
17
+ reading 454 bytes...
18
+ -> "{\"id\":\"INV2-QZ3V-GKZS-MJNP-HGBQ\",\"number\":\"0008\",\"status\":\"DRAFT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"items\":[{\"name\":\"Sutures\",\"quantity\":100.0,\"unit_price\":{\"currency\":\"USD\",\"value\":\"5.00\"}}],\"invoice_date\":\"2014-04-04 PDT\",\"tax_calculated_after_discount\":false,\"tax_inclusive\":false,\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"}}"
19
+ read 454 bytes
20
+ reading 2 bytes...
21
+ -> "\r\n"
22
+ read 2 bytes
23
+ -> "0\r\n"
24
+ -> "\r\n"
25
+ Conn keep-alive
26
+ opening connection to api.sandbox.paypal.com:443...
27
+ opened
28
+ starting SSL for api.sandbox.paypal.com:443...
29
+ SSL established
30
+ <- "GET /v1/invoicing/invoices/?total_count_required=true HTTP/1.1\r\nAuthorization: Bearer 2.RUg7qbhqxLBDae7Si-exTRs8ztl0Tv1FWMAnd0XVo\r\nContent-Type: application/json\r\nUser-Agent: PayPalSDK/rest-sdk-ruby 0.6.1 (paypal-sdk-core 0.2.8; ruby 2.1.1p76-x86_64-darwin12.0)\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nHost: api.sandbox.paypal.com\r\n\r\n"
31
+ -> "HTTP/1.1 200 OK\r\n"
32
+ -> "Server: Apache-Coyote/1.1\r\n"
33
+ -> "PROXY_SERVER_INFO: host=slcsbjava2.slc.paypal.com;threadId=331\r\n"
34
+ -> "Paypal-Debug-Id: 246eb331af4bd\r\n"
35
+ -> "Date: Fri, 04 Apr 2014 09:03:38 GMT\r\n"
36
+ -> "Content-Type: application/json\r\n"
37
+ -> "Transfer-Encoding: chunked\r\n"
38
+ -> "\r\n"
39
+ -> "f1c\r\n"
40
+ reading 3868 bytes...
41
+ -> "{\"total_count\":8,\"invoices\":[{\"id\":\"INV2-QZ3V-GKZS-MJNP-HGBQ\",\"number\":\"0008\",\"status\":\"DRAFT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\"},\"invoice_date\":\"2014-04-04 PDT\",\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-04 02:03:36 PDT\"}},{\"id\":\"INV2-KDSB-LFC9-7AH9-TP92\",\"number\":\"0007\",\"status\":\"DRAFT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\"},\"invoice_date\":\"2014-04-04 PDT\",\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-04 01:57:19 PDT\"}},{\"id\":\"INV2-YADT-86G3-KMHM-LV8B\",\"number\":\"0006\",\"status\":\"DRAFT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\"},\"invoice_date\":\"2014-04-04 PDT\",\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-04 01:55:44 PDT\"}},{\"id\":\"INV2-GH3A-3DWB-FCJZ-P97Q\",\"number\":\"0005\",\"status\":\"DRAFT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\",\"first_name\":\"Sally\",\"last_name\":\"Patient\",\"business_name\":\"Not applicable\"},\"invoice_date\":\"2014-04-03 PDT\",\"payment_term\":{\"due_date\":\"2014-05-18 PDT\"},\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-03 23:49:20 PDT\"}},{\"id\":\"INV2-9CAH-K5G7-2JPL-G4B4\",\"number\":\"0004\",\"status\":\"SENT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\",\"first_name\":\"Sally\",\"last_name\":\"Patient\",\"business_name\":\"Not applicable\"},\"invoice_date\":\"2014-04-03 PDT\",\"payment_term\":{\"due_date\":\"2014-05-18 PDT\"},\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-03 23:15:03 PDT\"}},{\"id\":\"INV2-CJL7-PF4G-BLQF-5FWG\",\"number\":\"0003\",\"status\":\"CANCELLED\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\",\"first_name\":\"Sally\",\"last_name\":\"Patient\",\"business_name\":\"Not applicable\"},\"invoice_date\":\"2014-04-03 PDT\",\"payment_term\":{\"due_date\":\"2014-05-18 PDT\"},\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-03 23:11:40 PDT\"}},{\"id\":\"INV2-VHEH-7Q5J-NV6F-RM6V\",\"number\":\"0002\",\"status\":\"SENT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\",\"first_name\":\"Sally\",\"last_name\":\"Patient\",\"business_name\":\"Not applicable\"},\"invoice_date\":\"2014-04-03 PDT\",\"payment_term\":{\"due_date\":\"2014-05-18 PDT\"},\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-03 22:52:23 PDT\"}},{\"id\":\"INV2-P6VJ-36HG-BBVT-M2MA\",\"number\":\"0001\",\"status\":\"SENT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\"},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"email\":\"example@example.com\",\"first_name\":\"Sally\",\"last_name\":\"Patient\",\"business_name\":\"Not applicable\"},\"invoice_date\":\"2014-04-03 PDT\",\"payment_term\":{\"due_date\":\"2014-05-18 PDT\"},\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-03 22:30:15 PDT\"}}]}"
42
+ read 3868 bytes
43
+ reading 2 bytes...
44
+ -> "\r\n"
45
+ read 2 bytes
46
+ -> "0\r\n"
47
+ -> "\r\n"
48
+ Conn keep-alive
49
+ opening connection to api.sandbox.paypal.com:443...
50
+ opened
51
+ starting SSL for api.sandbox.paypal.com:443...
52
+ SSL established
53
+ <- "GET /v1/invoicing/invoices/INV2-P6VJ-36HG-BBVT-M2MA HTTP/1.1\r\nAuthorization: Bearer 2.RUg7qbhqxLBDae7Si-exTRs8ztl0Tv1FWMAnd0XVo\r\nContent-Type: application/json\r\nUser-Agent: PayPalSDK/rest-sdk-ruby 0.6.1 (paypal-sdk-core 0.2.8; ruby 2.1.1p76-x86_64-darwin12.0)\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nHost: api.sandbox.paypal.com\r\n\r\n"
54
+ -> "HTTP/1.1 200 OK\r\n"
55
+ -> "Server: Apache-Coyote/1.1\r\n"
56
+ -> "PROXY_SERVER_INFO: host=slcsbjava4.slc.paypal.com;threadId=238\r\n"
57
+ -> "Paypal-Debug-Id: 64e62266afe5c\r\n"
58
+ -> "Date: Fri, 04 Apr 2014 09:03:40 GMT\r\n"
59
+ -> "Content-Type: application/json\r\n"
60
+ -> "Transfer-Encoding: chunked\r\n"
61
+ -> "\r\n"
62
+ -> "461\r\n"
63
+ reading 1121 bytes...
64
+ -> "{\"id\":\"INV2-P6VJ-36HG-BBVT-M2MA\",\"number\":\"0001\",\"status\":\"SENT\",\"merchant_info\":{\"email\":\"PPX.DevNet-facilitator@gmail.com\",\"first_name\":\"Dennis\",\"last_name\":\"Doctor\",\"business_name\":\"Medical Professionals, LLC\",\"phone\":{\"country_code\":\"1\",\"national_number\":\"5032141716\"},\"address\":{\"line1\":\"1234 Main St.\",\"city\":\"Portland\",\"state\":\"OR\",\"postal_code\":\"97217\",\"country_code\":\"US\"}},\"billing_info\":[{\"email\":\"example@example.com\"}],\"shipping_info\":{\"first_name\":\"Sally\",\"last_name\":\"Patient\",\"business_name\":\"Not applicable\",\"address\":{\"line1\":\"1234 Broad St.\",\"city\":\"Portland\",\"state\":\"OR\",\"postal_code\":\"97216\",\"country_code\":\"US\"}},\"items\":[{\"name\":\"Sutures\",\"quantity\":100.0,\"unit_price\":{\"currency\":\"USD\",\"value\":\"5.00\"}}],\"invoice_date\":\"2014-04-03 PDT\",\"payment_term\":{\"term_type\":\"NET_45\",\"due_date\":\"2014-05-18 PDT\"},\"tax_calculated_after_discount\":false,\"tax_inclusive\":false,\"note\":\"Medical Invoice 16 Jul, 2013 PST\",\"total_amount\":{\"currency\":\"USD\",\"value\":\"500.00\"},\"metadata\":{\"created_date\":\"2014-04-03 22:30:15 PDT\",\"first_sent_date\":\"2014-04-03 22:48:22 PDT\",\"last_sent_date\":\"2014-04-03 22:48:22 PDT\"}}"
65
+ read 1121 bytes
66
+ reading 2 bytes...
67
+ -> "\r\n"
68
+ read 2 bytes
69
+ -> "0\r\n"
70
+ -> "\r\n"
71
+ Conn keep-alive
@@ -1,272 +1,275 @@
1
- require 'spec_helper'
2
-
3
- describe "Payments" do
4
-
5
- PaymentAttributes = {
6
- "intent" => "sale",
7
- "payer" => {
8
- "payment_method" => "credit_card",
9
- "funding_instruments" => [ {
10
- "credit_card" => {
11
- "type" => "visa",
12
- "number" => "4417119669820331",
13
- "expire_month" => "11", "expire_year" => "2018",
14
- "cvv2" => "874",
15
- "first_name" => "Joe", "last_name" => "Shopper",
16
- "billing_address" => {
17
- "line1" => "52 N Main ST",
18
- "city" => "Johnstown",
19
- "state" => "OH",
20
- "postal_code" => "43210", "country_code" => "US" } } } ] },
21
- "transactions" => [ {
22
- "amount" => {
23
- "total" => "1.00",
24
- "currency" => "USD" },
25
- "description" => "This is the payment transaction description." } ] }
26
-
27
-
28
- it "Validate user-agent" do
29
- PayPal::SDK::REST::API.user_agent.should match "PayPalSDK/rest-sdk-ruby"
30
- end
31
-
32
- describe "Examples" do
33
- describe "REST" do
34
- it "Modifiy global configuration" do
35
- backup_config = PayPal::SDK::REST.api.config
36
- PayPal::SDK::REST.set_config( :client_id => "XYZ" )
37
- PayPal::SDK::REST.api.config.client_id.should eql "XYZ"
38
- PayPal::SDK::REST.set_config(backup_config)
39
- PayPal::SDK::REST.api.config.client_id.should_not eql "XYZ"
40
- end
41
- end
42
-
43
- describe "Payment" do
44
- it "Create" do
45
- payment = Payment.new(PaymentAttributes)
46
- # Create
47
- payment.create
48
- payment.error.should be_nil
49
- payment.id.should_not be_nil
50
- end
51
-
52
- it "Create with request_id" do
53
- payment = Payment.new(PaymentAttributes)
54
- payment.create
55
- payment.error.should be_nil
56
-
57
- request_id = payment.request_id
58
-
59
- new_payment = Payment.new(PaymentAttributes.merge( :request_id => request_id ))
60
- new_payment.create
61
- new_payment.error.should be_nil
62
-
63
- payment.id.should eql new_payment.id
64
-
65
- end
66
-
67
- it "Create with token" do
68
- api = API.new
69
- payment = Payment.new(PaymentAttributes.merge( :token => api.token ))
70
- Payment.api.should_not eql payment.api
71
- payment.create
72
- payment.error.should be_nil
73
- payment.id.should_not be_nil
74
- end
75
-
76
- it "Create with client_id and client_secret" do
77
- api = API.new
78
- payment = Payment.new(PaymentAttributes.merge( :client_id => api.config.client_id, :client_secret => api.config.client_secret))
79
- Payment.api.should_not eql payment.api
80
- payment.create
81
- payment.error.should be_nil
82
- payment.id.should_not be_nil
83
- end
84
-
85
- it "List" do
86
- payment_history = Payment.all( "count" => 5 )
87
- payment_history.error.should be_nil
88
- payment_history.count.should eql 5
89
- end
90
-
91
- it "Find" do
92
- payment_history = Payment.all( "count" => 1 )
93
- payment = Payment.find(payment_history.payments[0].id)
94
- payment.error.should be_nil
95
- end
96
-
97
- describe "Validation" do
98
-
99
- it "Create with empty values" do
100
- payment = Payment.new
101
- payment.create.should be_false
102
- end
103
-
104
- it "Find with invalid ID" do
105
- lambda {
106
- payment = Payment.find("Invalid")
107
- }.should raise_error PayPal::SDK::Core::Exceptions::ResourceNotFound
108
- end
109
-
110
- it "Find with nil" do
111
- lambda{
112
- payment = Payment.find(nil)
113
- }.should raise_error ArgumentError
114
- end
115
-
116
- it "Find with empty string" do
117
- lambda{
118
- payment = Payment.find("")
119
- }.should raise_error ArgumentError
120
- end
121
-
122
- it "Find record with expired token" do
123
- lambda {
124
- Payment.api.token
125
- Payment.api.token.sub!(/^/, "Expired")
126
- Payment.all(:count => 1)
127
- }.should_not raise_error
128
- end
129
- end
130
-
131
- describe "instance method" do
132
-
133
- it "Execute" do
134
- payment = Payment.find("PAY-2XC06729XY607624MKGTR3GQ")
135
- payment.execute( :payer_id => "TWLK53YN7GDM6" )
136
- # payment.error.should be_nil
137
- pending "Test with capybara"
138
- end
139
- end
140
-
141
- end
142
-
143
- describe "Sale" do
144
- before :each do
145
- @payment = Payment.new(PaymentAttributes)
146
- @payment.create
147
- @payment.should be_success
148
- end
149
-
150
- it "Find" do
151
- sale = Sale.find(@payment.transactions[0].related_resources[0].sale.id)
152
- sale.error.should be_nil
153
- sale.should be_a Sale
154
- end
155
-
156
- describe "instance method" do
157
- it "Refund" do
158
- sale = @payment.transactions[0].related_resources[0].sale
159
- refund = sale.refund( :amount => { :total => "1.00", :currency => "USD" } )
160
- refund.error.should be_nil
161
-
162
- refund = Refund.find(refund.id)
163
- refund.error.should be_nil
164
- refund.should be_a Refund
165
- end
166
- end
167
- end
168
-
169
- describe "Authorize" do
170
- before :each do
171
- @payment = Payment.new(PaymentAttributes.merge( :intent => "authorize" ))
172
- @payment.create
173
- @payment.error.should be_nil
174
- end
175
-
176
- it "Find" do
177
- authorize = Authorization.find(@payment.transactions[0].related_resources[0].authorization.id)
178
- authorize.error.should be_nil
179
- authorize.should be_a Authorization
180
- end
181
-
182
- it "Capture" do
183
- authorize = @payment.transactions[0].related_resources[0].authorization
184
- capture = authorize.capture({:amount => { :currency => "USD", :total => "1.00" } })
185
- capture.error.should be_nil
186
- end
187
-
188
- it "Void" do
189
- authorize = @payment.transactions[0].related_resources[0].authorization
190
- authorize.void()
191
- authorize.error.should be_nil
192
- end
193
-
194
- end
195
-
196
- describe "Capture" do
197
- before :each do
198
- @payment = Payment.new(PaymentAttributes.merge( :intent => "authorize" ))
199
- @payment.create
200
- @payment.error.should be_nil
201
- authorize = @payment.transactions[0].related_resources[0].authorization
202
- @capture = authorize.capture({:amount => { :currency => "USD", :total => "1.00" } })
203
- @capture.error.should be_nil
204
- end
205
-
206
- it "Find" do
207
- capture = Capture.find(@capture.id)
208
- capture.error.should be_nil
209
- capture.should be_a Capture
210
- end
211
-
212
- it "Refund" do
213
- refund = @capture.refund({})
214
- refund.error.should be_nil
215
- end
216
- end
217
-
218
- describe "CreditCard" do
219
- it "Create" do
220
- credit_card = CreditCard.new({
221
- "type" => "visa",
222
- "number" => "4417119669820331",
223
- "expire_month" => "11", "expire_year" => "2018",
224
- "cvv2" => "874",
225
- "first_name" => "Joe", "last_name" => "Shopper",
226
- "billing_address" => {
227
- "line1" => "52 N Main ST",
228
- "city" => "Johnstown",
229
- "state" => "OH",
230
- "postal_code" => "43210", "country_code" => "US" }})
231
- credit_card.create
232
- credit_card.error.should be_nil
233
- credit_card.id.should_not be_nil
234
-
235
- credit_card = CreditCard.find(credit_card.id)
236
- credit_card.should be_a CreditCard
237
- credit_card.error.should be_nil
238
- end
239
-
240
- it "Delete" do
241
- credit_card = CreditCard.new({
242
- "type" => "visa",
243
- "number" => "4417119669820331",
244
- "expire_month" => "11", "expire_year" => "2018" })
245
- credit_card.create.should be_true
246
- credit_card.delete.should be_true
247
- end
248
-
249
- describe "Validation" do
250
- it "Create" do
251
- credit_card = CreditCard.new({
252
- "type" => "visa",
253
- "number" => "4111111111111111" })
254
- credit_card.create
255
- credit_card.error.should_not be_nil
256
-
257
- credit_card.error.name.should eql "VALIDATION_ERROR"
258
- credit_card.error["name"].should eql "VALIDATION_ERROR"
259
-
260
- credit_card.error.details[0].field.should eql "expire_year"
261
- credit_card.error.details[0].issue.should eql "Required field missing"
262
- credit_card.error.details[1].field.should eql "expire_month"
263
- credit_card.error.details[1].issue.should eql "Required field missing"
264
-
265
- credit_card.error["details"][0]["issue"].should eql "Required field missing"
266
- end
267
- end
268
-
269
- end
270
-
271
- end
272
- end
1
+ require 'spec_helper'
2
+
3
+ describe "Payments" do
4
+
5
+ PaymentAttributes = {
6
+ "intent" => "sale",
7
+ "payer" => {
8
+ "payment_method" => "credit_card",
9
+ "funding_instruments" => [ {
10
+ "credit_card" => {
11
+ "type" => "visa",
12
+ "number" => "4417119669820331",
13
+ "expire_month" => "11", "expire_year" => "2018",
14
+ "cvv2" => "874",
15
+ "first_name" => "Joe", "last_name" => "Shopper",
16
+ "billing_address" => {
17
+ "line1" => "52 N Main ST",
18
+ "city" => "Johnstown",
19
+ "state" => "OH",
20
+ "postal_code" => "43210", "country_code" => "US" } } } ] },
21
+ "transactions" => [ {
22
+ "amount" => {
23
+ "total" => "1.00",
24
+ "currency" => "USD" },
25
+ "description" => "This is the payment transaction description." } ] }
26
+
27
+
28
+ it "Validate user-agent" do
29
+ PayPal::SDK::REST::API.user_agent.should match "PayPalSDK/rest-sdk-ruby"
30
+ end
31
+
32
+ describe "Examples" do
33
+ describe "REST" do
34
+ it "Modifiy global configuration" do
35
+ backup_config = PayPal::SDK::REST.api.config
36
+ PayPal::SDK::REST.set_config( :client_id => "XYZ" )
37
+ PayPal::SDK::REST.api.config.client_id.should eql "XYZ"
38
+ PayPal::SDK::REST.set_config(backup_config)
39
+ PayPal::SDK::REST.api.config.client_id.should_not eql "XYZ"
40
+ end
41
+ end
42
+
43
+ describe "Payment" do
44
+ it "Create" do
45
+ payment = Payment.new(PaymentAttributes)
46
+ # Create
47
+ payment.create
48
+ payment.error.should be_nil
49
+ payment.id.should_not be_nil
50
+ end
51
+
52
+ it "Create with request_id" do
53
+ payment = Payment.new(PaymentAttributes)
54
+ payment.create
55
+ payment.error.should be_nil
56
+
57
+ request_id = payment.request_id
58
+
59
+ new_payment = Payment.new(PaymentAttributes.merge( :request_id => request_id ))
60
+ new_payment.create
61
+ new_payment.error.should be_nil
62
+
63
+ payment.id.should eql new_payment.id
64
+
65
+ end
66
+
67
+ it "Create with token" do
68
+ api = API.new
69
+ payment = Payment.new(PaymentAttributes.merge( :token => api.token ))
70
+ Payment.api.should_not eql payment.api
71
+ payment.create
72
+ payment.error.should be_nil
73
+ payment.id.should_not be_nil
74
+ end
75
+
76
+ it "Create with client_id and client_secret" do
77
+ api = API.new
78
+ payment = Payment.new(PaymentAttributes.merge( :client_id => api.config.client_id, :client_secret => api.config.client_secret))
79
+ Payment.api.should_not eql payment.api
80
+ payment.create
81
+ payment.error.should be_nil
82
+ payment.id.should_not be_nil
83
+ end
84
+
85
+ it "List" do
86
+ payment_history = Payment.all( "count" => 5 )
87
+ payment_history.error.should be_nil
88
+ payment_history.count.should eql 5
89
+ end
90
+
91
+ it "Find" do
92
+ payment_history = Payment.all( "count" => 1 )
93
+ payment = Payment.find(payment_history.payments[0].id)
94
+ payment.error.should be_nil
95
+ end
96
+
97
+ describe "Validation" do
98
+
99
+ it "Create with empty values" do
100
+ payment = Payment.new
101
+ payment.create.should be_false
102
+ end
103
+
104
+ it "Find with invalid ID" do
105
+ lambda {
106
+ payment = Payment.find("Invalid")
107
+ }.should raise_error PayPal::SDK::Core::Exceptions::ResourceNotFound
108
+ end
109
+
110
+ it "Find with nil" do
111
+ lambda{
112
+ payment = Payment.find(nil)
113
+ }.should raise_error ArgumentError
114
+ end
115
+
116
+ it "Find with empty string" do
117
+ lambda{
118
+ payment = Payment.find("")
119
+ }.should raise_error ArgumentError
120
+ end
121
+
122
+ it "Find record with expired token" do
123
+ lambda {
124
+ Payment.api.token
125
+ Payment.api.token.sub!(/^/, "Expired")
126
+ Payment.all(:count => 1)
127
+ }.should_not raise_error
128
+ end
129
+ end
130
+
131
+ describe "instance method" do
132
+
133
+ it "Execute" do
134
+ pending "Test with capybara"
135
+ end
136
+ end
137
+
138
+ end
139
+
140
+ describe "Sale" do
141
+ before :each do
142
+ @payment = Payment.new(PaymentAttributes)
143
+ @payment.create
144
+ @payment.should be_success
145
+ end
146
+
147
+ it "Find" do
148
+ sale = Sale.find(@payment.transactions[0].related_resources[0].sale.id)
149
+ sale.error.should be_nil
150
+ sale.should be_a Sale
151
+ end
152
+
153
+ describe "instance method" do
154
+ it "Refund" do
155
+ sale = @payment.transactions[0].related_resources[0].sale
156
+ refund = sale.refund( :amount => { :total => "1.00", :currency => "USD" } )
157
+ refund.error.should be_nil
158
+
159
+ refund = Refund.find(refund.id)
160
+ refund.error.should be_nil
161
+ refund.should be_a Refund
162
+ end
163
+ end
164
+ end
165
+
166
+ describe "Authorize" do
167
+ before :each do
168
+ @payment = Payment.new(PaymentAttributes.merge( "intent" => "authorize" ))
169
+ @payment.create
170
+ @payment.error.should be_nil
171
+ end
172
+
173
+ it "Find" do
174
+ authorize = Authorization.find(@payment.transactions[0].related_resources[0].authorization.id)
175
+ authorize.error.should be_nil
176
+ authorize.should be_a Authorization
177
+ end
178
+
179
+ it "Capture" do
180
+ authorize = @payment.transactions[0].related_resources[0].authorization
181
+ capture = authorize.capture({:amount => { :currency => "USD", :total => "1.00" } })
182
+ capture.error.should be_nil
183
+ end
184
+
185
+ it "Void" do
186
+ authorize = @payment.transactions[0].related_resources[0].authorization
187
+ authorize.void()
188
+ authorize.error.should be_nil
189
+ end
190
+
191
+ it "Reauthorization" do
192
+ authorize = Authorization.find("7GH53639GA425732B");
193
+ authorize.amount = { :currency => "USD", :total => "1.00" }
194
+ authorize.reauthorize()
195
+ authorize.error.should_not be_nil
196
+ end
197
+ end
198
+
199
+ describe "Capture" do
200
+ before :each do
201
+ @payment = Payment.new(PaymentAttributes.merge( "intent" => "authorize" ))
202
+ @payment.create
203
+ @payment.error.should be_nil
204
+ authorize = @payment.transactions[0].related_resources[0].authorization
205
+ @capture = authorize.capture({:amount => { :currency => "USD", :total => "1.00" } })
206
+ @capture.error.should be_nil
207
+ end
208
+
209
+ it "Find" do
210
+ capture = Capture.find(@capture.id)
211
+ capture.error.should be_nil
212
+ capture.should be_a Capture
213
+ end
214
+
215
+ it "Refund" do
216
+ refund = @capture.refund({})
217
+ refund.error.should be_nil
218
+ end
219
+ end
220
+
221
+ describe "CreditCard" do
222
+ it "Create" do
223
+ credit_card = CreditCard.new({
224
+ "type" => "visa",
225
+ "number" => "4417119669820331",
226
+ "expire_month" => "11", "expire_year" => "2018",
227
+ "cvv2" => "874",
228
+ "first_name" => "Joe", "last_name" => "Shopper",
229
+ "billing_address" => {
230
+ "line1" => "52 N Main ST",
231
+ "city" => "Johnstown",
232
+ "state" => "OH",
233
+ "postal_code" => "43210", "country_code" => "US" }})
234
+ credit_card.create
235
+ credit_card.error.should be_nil
236
+ credit_card.id.should_not be_nil
237
+
238
+ credit_card = CreditCard.find(credit_card.id)
239
+ credit_card.should be_a CreditCard
240
+ credit_card.error.should be_nil
241
+ end
242
+
243
+ it "Delete" do
244
+ credit_card = CreditCard.new({
245
+ "type" => "visa",
246
+ "number" => "4417119669820331",
247
+ "expire_month" => "11", "expire_year" => "2018" })
248
+ credit_card.create.should be_true
249
+ credit_card.delete.should be_true
250
+ end
251
+
252
+ describe "Validation" do
253
+ it "Create" do
254
+ credit_card = CreditCard.new({
255
+ "type" => "visa",
256
+ "number" => "4111111111111111" })
257
+ credit_card.create
258
+ credit_card.error.should_not be_nil
259
+
260
+ credit_card.error.name.should eql "VALIDATION_ERROR"
261
+ credit_card.error["name"].should eql "VALIDATION_ERROR"
262
+
263
+ credit_card.error.details[0].field.should eql "expire_year"
264
+ credit_card.error.details[0].issue.should eql "Required field missing"
265
+ credit_card.error.details[1].field.should eql "expire_month"
266
+ credit_card.error.details[1].issue.should eql "Required field missing"
267
+
268
+ credit_card.error["details"][0]["issue"].should eql "Required field missing"
269
+ end
270
+ end
271
+
272
+ end
273
+
274
+ end
275
+ end