arrow_payments 0.1.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 (46) hide show
  1. data/.gitignore +25 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +3 -0
  4. data/Gemfile +3 -0
  5. data/README.md +272 -0
  6. data/Rakefile +10 -0
  7. data/arrow_payments.gemspec +25 -0
  8. data/lib/arrow_payments.rb +25 -0
  9. data/lib/arrow_payments/address.rb +11 -0
  10. data/lib/arrow_payments/client.rb +57 -0
  11. data/lib/arrow_payments/client/customers.rb +45 -0
  12. data/lib/arrow_payments/client/payment_methods.rb +90 -0
  13. data/lib/arrow_payments/client/transactions.rb +64 -0
  14. data/lib/arrow_payments/configuration.rb +7 -0
  15. data/lib/arrow_payments/connection.rb +78 -0
  16. data/lib/arrow_payments/customer.rb +38 -0
  17. data/lib/arrow_payments/entity.rb +39 -0
  18. data/lib/arrow_payments/errors.rb +13 -0
  19. data/lib/arrow_payments/line_item.rb +10 -0
  20. data/lib/arrow_payments/payment_method.rb +19 -0
  21. data/lib/arrow_payments/recurring_billing.rb +30 -0
  22. data/lib/arrow_payments/transaction.rb +74 -0
  23. data/lib/arrow_payments/version.rb +3 -0
  24. data/spec/arrow_payments_spec.rb +40 -0
  25. data/spec/client_spec.rb +42 -0
  26. data/spec/configuration_spec.rb +24 -0
  27. data/spec/customer_spec.rb +29 -0
  28. data/spec/customers_spec.rb +160 -0
  29. data/spec/entity_spec.rb +55 -0
  30. data/spec/fixtures/complete_payment_method.json +37 -0
  31. data/spec/fixtures/customer.json +25 -0
  32. data/spec/fixtures/customers.json +133 -0
  33. data/spec/fixtures/headers/payment_method_complete.yml +9 -0
  34. data/spec/fixtures/headers/payment_method_start.yml +9 -0
  35. data/spec/fixtures/line_item.json +8 -0
  36. data/spec/fixtures/start_payment_method.json +6 -0
  37. data/spec/fixtures/transaction.json +29 -0
  38. data/spec/fixtures/transaction_capture.json +5 -0
  39. data/spec/fixtures/transactions.json +68 -0
  40. data/spec/line_item_spec.rb +17 -0
  41. data/spec/payment_method_spec.rb +16 -0
  42. data/spec/payment_methods_spec.rb +181 -0
  43. data/spec/recurring_billing_spec.rb +28 -0
  44. data/spec/spec_helper.rb +19 -0
  45. data/spec/transactions_spec.rb +101 -0
  46. metadata +225 -0
@@ -0,0 +1,25 @@
1
+ {
2
+ "Name": "First Supplies",
3
+ "Code": "First Supplies",
4
+ "PrimaryContact": "John Peoples",
5
+ "PrimaryContactPhone": "8325539616",
6
+ "PrimaryContactEmailAddress": "John.Peoples@arrow-test.com",
7
+ "PaymentMethods": [{
8
+ "ID": 12436,
9
+ "CardType": "Visa",
10
+ "Last4": "1111",
11
+ "CardholderFirstName": "Paola",
12
+ "CardholderLastName": "Chen",
13
+ "ExpirationMonth": 6,
14
+ "ExpirationYear": 2015,
15
+ "BillingStreet1": "7495 Center St.",
16
+ "BillingStreet2": null,
17
+ "BillingCity": "Chicago",
18
+ "BillingState": "IL",
19
+ "BillingZip": "60601"
20
+ }],
21
+ "RecurrentBilling": [],
22
+ "ID": 10162,
23
+ "Success": true,
24
+ "Message": null
25
+ }
@@ -0,0 +1,133 @@
1
+ [{
2
+ "Name": "First Supplies",
3
+ "Code": "First Supplies",
4
+ "PrimaryContact": "John Peoples",
5
+ "PrimaryContactPhone": "8325539616",
6
+ "PrimaryContactEmailAddress": "John.Peoples@arrow-test.com",
7
+ "PaymentMethods": null,
8
+ "RecurrentBilling": null,
9
+ "ID": 10162,
10
+ "Success": false,
11
+ "Message": null
12
+ }, {
13
+ "Name": "Modular Cycle Systems",
14
+ "Code": "Modular Cycle Systems",
15
+ "PrimaryContact": "Kim Ralls",
16
+ "PrimaryContactPhone": "2026266380",
17
+ "PrimaryContactEmailAddress": "Kim.Ralls@arrow-test.com",
18
+ "PaymentMethods": null,
19
+ "RecurrentBilling": null,
20
+ "ID": 10163,
21
+ "Success": false,
22
+ "Message": null
23
+ }, {
24
+ "Name": "Camping and Sports Store",
25
+ "Code": "Camping and Sports Store",
26
+ "PrimaryContact": "Juanita Zimmerman",
27
+ "PrimaryContactPhone": "2150722144",
28
+ "PrimaryContactEmailAddress": "Juanita.Zimmerman@arrow-test.com",
29
+ "PaymentMethods": null,
30
+ "RecurrentBilling": null,
31
+ "ID": 10164,
32
+ "Success": false,
33
+ "Message": null
34
+ }, {
35
+ "Name": "Every Bike Shop",
36
+ "Code": "Every Bike Shop",
37
+ "PrimaryContact": "Steven Whitehead",
38
+ "PrimaryContactPhone": "7382106362",
39
+ "PrimaryContactEmailAddress": "Steven.Whitehead@arrow-test.com",
40
+ "PaymentMethods": null,
41
+ "RecurrentBilling": null,
42
+ "ID": 10165,
43
+ "Success": false,
44
+ "Message": null
45
+ }, {
46
+ "Name": "Mechanical Products Ltd.",
47
+ "Code": "Mechanical Products Ltd.",
48
+ "PrimaryContact": "Vincent White",
49
+ "PrimaryContactPhone": "8919827226",
50
+ "PrimaryContactEmailAddress": "Vincent.White@arrow-test.com",
51
+ "PaymentMethods": null,
52
+ "RecurrentBilling": null,
53
+ "ID": 10166,
54
+ "Success": false,
55
+ "Message": null
56
+ }, {
57
+ "Name": "Immediate Repair Shop",
58
+ "Code": "Immediate Repair Shop",
59
+ "PrimaryContact": "Cristian Osorio",
60
+ "PrimaryContactPhone": "3070268109",
61
+ "PrimaryContactEmailAddress": "Cristian.Osorio@arrow-test.com",
62
+ "PaymentMethods": null,
63
+ "RecurrentBilling": null,
64
+ "ID": 10167,
65
+ "Success": false,
66
+ "Message": null
67
+ }, {
68
+ "Name": "Precision Gears Inc.",
69
+ "Code": "Precision Gears Inc.",
70
+ "PrimaryContact": "Lionel Penuchot",
71
+ "PrimaryContactPhone": "9274943653",
72
+ "PrimaryContactEmailAddress": "Lionel.Penuchot@arrow-test.com",
73
+ "PaymentMethods": null,
74
+ "RecurrentBilling": null,
75
+ "ID": 10168,
76
+ "Success": false,
77
+ "Message": null
78
+ }, {
79
+ "Name": "Refined Department Stores",
80
+ "Code": "Refined Department Stores",
81
+ "PrimaryContact": "Tim O\u0027Brien",
82
+ "PrimaryContactPhone": "3350573995",
83
+ "PrimaryContactEmailAddress": "Tim.OBrien@arrow-test.com",
84
+ "PaymentMethods": null,
85
+ "RecurrentBilling": null,
86
+ "ID": 10169,
87
+ "Success": false,
88
+ "Message": null
89
+ }, {
90
+ "Name": "Cross-Country Riding Supplies",
91
+ "Code": "Cross-Country Riding Supplies",
92
+ "PrimaryContact": "Suchitra Mohan",
93
+ "PrimaryContactPhone": "6370211901",
94
+ "PrimaryContactEmailAddress": "Suchitra.Mohan@arrow-test.com",
95
+ "PaymentMethods": null,
96
+ "RecurrentBilling": null,
97
+ "ID": 10170,
98
+ "Success": false,
99
+ "Message": null
100
+ }, {
101
+ "Name": "Leading Sales & Repair",
102
+ "Code": "Leading Sales & Repair",
103
+ "PrimaryContact": "Michelle Rector",
104
+ "PrimaryContactPhone": "9354104105",
105
+ "PrimaryContactEmailAddress": "Michelle.Rector@arrow-test.com",
106
+ "PaymentMethods": null,
107
+ "RecurrentBilling": null,
108
+ "ID": 10171,
109
+ "Success": false,
110
+ "Message": null
111
+ }, {
112
+ "Name": "sasha",
113
+ "Code": "1",
114
+ "PrimaryContact": "1",
115
+ "PrimaryContactPhone": "1",
116
+ "PrimaryContactEmailAddress": "1",
117
+ "PaymentMethods": null,
118
+ "RecurrentBilling": null,
119
+ "ID": 10204,
120
+ "Success": false,
121
+ "Message": null
122
+ }, {
123
+ "Name": "Rachel ",
124
+ "Code": "1234",
125
+ "PrimaryContact": "Rachel",
126
+ "PrimaryContactPhone": "(847) 345-7932",
127
+ "PrimaryContactEmailAddress": "racheleblau@gmail.com",
128
+ "PaymentMethods": null,
129
+ "RecurrentBilling": null,
130
+ "ID": 11630,
131
+ "Success": false,
132
+ "Message": null
133
+ }]
@@ -0,0 +1,9 @@
1
+ ---
2
+ cache-control: private
3
+ content-type: application/json; charset=utf-8
4
+ server: Microsoft-IIS/7.5
5
+ x-aspnet-version: 4.0.30319
6
+ x-powered-by: ASP.NET
7
+ date: Fri, 11 Jan 2013 21:33:39 GMT
8
+ connection: close
9
+ content-length: "662"
@@ -0,0 +1,9 @@
1
+ ---
2
+ cache-control: private
3
+ content-type: application/json; charset=utf-8
4
+ server: Microsoft-IIS/7.5
5
+ x-aspnet-version: 4.0.30319
6
+ x-powered-by: ASP.NET
7
+ date: Fri, 11 Jan 2013 21:33:38 GMT
8
+ connection: close
9
+ content-length: "104"
@@ -0,0 +1,8 @@
1
+ {
2
+ "ID": 12345,
3
+ "CommodityCode": "CODE",
4
+ "Description": "Product description",
5
+ "Price": 10.45,
6
+ "ProductCode": "PRODUCT_CODE",
7
+ "UnitOfMeasure": "EA"
8
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "FormPostUrl": "https://secure.nmi.com/api/v2/three-step/4i873m0s",
3
+ "ID": 0,
4
+ "Success": true,
5
+ "Message": null
6
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "Account": "API Demo",
3
+ "TransactionType": "sale",
4
+ "TransactionTime": "\/Date(1334766980057)\/",
5
+ "Level": 2,
6
+ "TotalAmount": 303.00,
7
+ "Description": null,
8
+ "TransactionSource": "API",
9
+ "Status": "Not Settled",
10
+ "CaptureAmount": 0,
11
+ "AuthorizationCode": "123456",
12
+ "PaymentMethodID": 0,
13
+ "CardholderFirstName": "line",
14
+ "CardholderLastName": "items",
15
+ "CardType": "Visa",
16
+ "CardLast4": "1111",
17
+ "CustomerPONumber": "1",
18
+ "TaxAmount": 1.00,
19
+ "ShippingAmount": 1.00,
20
+ "Billing": null,
21
+ "ShippingAddressID": 0,
22
+ "Shipping": null,
23
+ "CustomerID": 10162,
24
+ "CustomerName": "First Supplies",
25
+ "LineItems": null,
26
+ "ID": 40023,
27
+ "Success": true,
28
+ "Message": null
29
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "TransactionId": 10162,
3
+ "Success": true,
4
+ "Message": "Transaction Captured"
5
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "TransactionCount": 2,
3
+ "Transactions": [{
4
+ "Account": "API Demo",
5
+ "TransactionType": "sale",
6
+ "TransactionTime": "\/Date(1334766980057)\/",
7
+ "Level": 2,
8
+ "TotalAmount": 303.00,
9
+ "Description": null,
10
+ "TransactionSource": "API",
11
+ "Status": "Not Settled",
12
+ "CaptureAmount": 0,
13
+ "AuthorizationCode": "123456",
14
+ "PaymentMethodID": 0,
15
+ "CardholderFirstName": "line",
16
+ "CardholderLastName": "items",
17
+ "CardType": "Visa",
18
+ "CardLast4": "1111",
19
+ "CustomerPONumber": "1",
20
+ "TaxAmount": 1.00,
21
+ "ShippingAmount": 1.00,
22
+ "Billing": null,
23
+ "ShippingAddressID": 0,
24
+ "Shipping": null,
25
+ "CustomerID": 10162,
26
+ "CustomerName": "First Supplies",
27
+ "LineItems": null,
28
+ "ID": 40023,
29
+ "Success": true,
30
+ "Message": null
31
+ }, {
32
+ "Account": "API Demo",
33
+ "TransactionType": "sale",
34
+ "TransactionTime": "\/Date(1354824875023)\/",
35
+ "Level": 2,
36
+ "TotalAmount": 2002.00,
37
+ "Description": "Test",
38
+ "TransactionSource": "API",
39
+ "Status": "Not Settled",
40
+ "CaptureAmount": 0,
41
+ "AuthorizationCode": "123456",
42
+ "PaymentMethodID": 12436,
43
+ "CardholderFirstName": "Paola",
44
+ "CardholderLastName": "Chen",
45
+ "CardType": "Visa",
46
+ "CardLast4": "1111",
47
+ "CustomerPONumber": null,
48
+ "TaxAmount": 0.00,
49
+ "ShippingAmount": 0.00,
50
+ "Billing": {
51
+ "Address1": "7495 Center St.",
52
+ "Address2": null,
53
+ "City": "Chicago",
54
+ "State": "IL",
55
+ "Postal": "60601",
56
+ "Phone": null,
57
+ "Tag": "Chen"
58
+ },
59
+ "ShippingAddressID": 0,
60
+ "Shipping": null,
61
+ "CustomerID": 10162,
62
+ "CustomerName": "First Supplies",
63
+ "LineItems": null,
64
+ "ID": 391397,
65
+ "Success": true,
66
+ "Message": null
67
+ }]
68
+ }
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe ArrowPayments::LineItem do
4
+ it { should respond_to :id }
5
+ it { should respond_to :commodity_code }
6
+ it { should respond_to :description }
7
+ it { should respond_to :price }
8
+ it { should respond_to :product_code }
9
+ it { should respond_to :unit_of_measure }
10
+
11
+ describe '#to_source_hash' do
12
+ it 'returns a formatted hash' do
13
+ item = ArrowPayments::LineItem.new(json_fixture('line_item.json'))
14
+ item.to_source_hash.should eq(json_fixture('line_item.json'))
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe ArrowPayments::PaymentMethod do
4
+ it { should respond_to :id }
5
+ it { should respond_to :card_type }
6
+ it { should respond_to :last_digits }
7
+ it { should respond_to :first_name }
8
+ it { should respond_to :last_name }
9
+ it { should respond_to :expiration_month }
10
+ it { should respond_to :expiration_year }
11
+ it { should respond_to :address }
12
+ it { should respond_to :address2 }
13
+ it { should respond_to :city }
14
+ it { should respond_to :state }
15
+ it { should respond_to :zip }
16
+ end
@@ -0,0 +1,181 @@
1
+ require 'spec_helper'
2
+
3
+ describe ArrowPayments::PaymentMethods do
4
+ let(:client) { ArrowPayments.client }
5
+
6
+ before :all do
7
+ ArrowPayments::Configuration.api_key = 'foobar'
8
+ ArrowPayments::Configuration.merchant_id = 'foo'
9
+ ArrowPayments::Configuration.mode = 'sandbox'
10
+ end
11
+
12
+ describe '#start_payment_method' do
13
+ it 'raises error if customer does not exist' do
14
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/start").
15
+ with(
16
+ :body => "{\"CustomerId\":11843,\"BillingAddress\":{},\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
17
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
18
+ ).
19
+ to_return(:status => 404, :body => "", :headers => {:error => "Invalid customer"})
20
+
21
+ expect { client.start_payment_method(11843, {}) }.
22
+ to raise_error ArrowPayments::NotFound, "Invalid customer"
23
+ end
24
+
25
+ it 'raises error if address is not valid' do
26
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/start").
27
+ with(
28
+ :body => "{\"CustomerId\":11843,\"BillingAddress\":{},\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
29
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
30
+ ).
31
+ to_return(:status => 500, :body => "", :headers => {:error => "Something went wrong"})
32
+
33
+ expect { client.start_payment_method(11843, {}) }.
34
+ to raise_error ArrowPayments::Error
35
+ end
36
+
37
+ it 'returns submit form url' do
38
+ address = {
39
+ :address => '3128 N Broadway',
40
+ :address2 => "Upstairs",
41
+ :city => 'Chicago',
42
+ :state => 'IL',
43
+ :zip => '60657',
44
+ :phone => '123123123'
45
+ }
46
+
47
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/start").
48
+ with(
49
+ :body => "{\"CustomerId\":11843,\"BillingAddress\":{\"Address1\":\"3128 N Broadway\",\"Address2\":\"Upstairs\",\"City\":\"Chicago\",\"State\":\"IL\",\"Postal\":\"60657\",\"Phone\":\"123123123\"},\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
50
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
51
+ ).
52
+ to_return(:status => 200, :body => fixture('start_payment_method.json'), :headers => {})
53
+
54
+ url = client.start_payment_method(11843, address)
55
+ url.should eq('https://secure.nmi.com/api/v2/three-step/4i873m0s')
56
+ end
57
+ end
58
+
59
+ describe '#setup_payment_method' do
60
+ it 'return token to complete payment' do
61
+ url = 'https://secure.nmi.com/api/v2/three-step/4i873m0s'
62
+
63
+ card = {
64
+ :first_name => 'John',
65
+ :last_name => 'Doe',
66
+ :number => '4111111111111111',
67
+ :security_code => '123',
68
+ :expiration_month => 12,
69
+ :expiration_year => 14
70
+ }
71
+
72
+ stub_request(:post, "https://secure.nmi.com/api/v2/three-step/4i873m0s").
73
+ with(
74
+ :body => {"billing-cc-exp"=>"1214", "billing-cc-number"=>"4111111111111111", "billing-cvv"=>"123", "billing-first-name"=>"John", "billing-last-name"=>"Doe"},
75
+ :headers => {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}
76
+ ).
77
+ to_return(
78
+ :status => 200,
79
+ :body => "",
80
+ :headers => {:location => 'http://arrowdemo.cloudapp.net/api/echo?token-id=4i873m0s'}
81
+ )
82
+
83
+ token = client.setup_payment_method(url, card)
84
+ token.should eq('4i873m0s')
85
+ end
86
+ end
87
+
88
+ describe '#complete_payment_method' do
89
+ it 'returns a newly created payment method' do
90
+ token = '4i873m0s'
91
+
92
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/complete").
93
+ with(
94
+ :body => "{\"TokenID\":\"4i873m0s\",\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
95
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
96
+ ).
97
+ to_return(:status => 200, :body => fixture('complete_payment_method.json'), :headers => {})
98
+
99
+ card = client.complete_payment_method(token)
100
+ card.should be_a ArrowPayments::PaymentMethod
101
+ card.id.should eq(14240)
102
+ end
103
+ end
104
+
105
+ describe '#create_payment_method' do
106
+ it 'return a newly created payment method' do
107
+ customer_id = 11843
108
+
109
+ address = {
110
+ :address => '3128 N Broadway',
111
+ :address2 => "Upstairs",
112
+ :city => 'Chicago',
113
+ :state => 'IL',
114
+ :zip => '60657',
115
+ :phone => '123123123'
116
+ }
117
+
118
+ card = {
119
+ :first_name => 'John',
120
+ :last_name => 'Doe',
121
+ :number => '4111111111111111',
122
+ :security_code => '123',
123
+ :expiration_month => 12,
124
+ :expiration_year => 14
125
+ }
126
+
127
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/start").
128
+ with(
129
+ :body => "{\"CustomerId\":11843,\"BillingAddress\":{\"Address1\":\"3128 N Broadway\",\"Address2\":\"Upstairs\",\"City\":\"Chicago\",\"State\":\"IL\",\"Postal\":\"60657\",\"Phone\":\"123123123\"},\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
130
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
131
+ ).
132
+ to_return(:status => 200, :body => fixture('start_payment_method.json'), :headers => {})
133
+
134
+ stub_request(:post, "https://secure.nmi.com/api/v2/three-step/4i873m0s").
135
+ with(
136
+ :body => {"billing-cc-exp"=>"1214", "billing-cc-number"=>"4111111111111111", "billing-cvv"=>"123", "billing-first-name"=>"John", "billing-last-name"=>"Doe"},
137
+ :headers => {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'}
138
+ ).
139
+ to_return(
140
+ :status => 200,
141
+ :body => "",
142
+ :headers => {:location => 'http://arrowdemo.cloudapp.net/api/echo?token-id=4i873m0s'}
143
+ )
144
+
145
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/complete").
146
+ with(
147
+ :body => "{\"TokenID\":\"4i873m0s\",\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
148
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
149
+ ).
150
+ to_return(:status => 200, :body => fixture('complete_payment_method.json'), :headers => {})
151
+
152
+ card = client.create_payment_method(customer_id, address, card)
153
+ card.id.should eq(14240)
154
+ end
155
+ end
156
+
157
+ describe '#destroy_payment_method' do
158
+ it 'raises error if payment method does not exist' do
159
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/delete").
160
+ with(
161
+ :body => "{\"PaymentMethodId\":12345,\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
162
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
163
+ ).
164
+ to_return(:status => 404, :body => "", :headers => {:error => 'Payment Method Not Found'})
165
+
166
+ expect { client.delete_payment_method(12345) }.
167
+ to raise_error ArrowPayments::NotFound, 'Payment Method Not Found'
168
+ end
169
+
170
+ it 'returns true if payment methods was deleted' do
171
+ stub_request(:post, "http://demo.arrowpayments.com/api/paymentmethod/delete").
172
+ with(
173
+ :body => "{\"PaymentMethodId\":12345,\"ApiKey\":\"foobar\",\"MID\":\"foo\"}",
174
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}
175
+ ).
176
+ to_return(:status => 200, :body => {'Success' => true}.to_json, :headers => {})
177
+
178
+ client.delete_payment_method(12345).should be_true
179
+ end
180
+ end
181
+ end