jsmestad-chargify 0.3.0.pre5 → 0.3.0.pre6
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.
- data/VERSION +1 -1
- data/jsmestad-chargify.gemspec +1 -1
- data/lib/chargify/base.rb +14 -13
- data/lib/chargify/customer.rb +32 -10
- data/lib/chargify/error.rb +1 -0
- data/lib/chargify/product.rb +14 -2
- data/lib/chargify/subscription.rb +93 -39
- data/spec/unit/chargify/customer_spec.rb +72 -24
- data/spec/unit/chargify/product_spec.rb +5 -0
- data/spec/unit/chargify/subscription_spec.rb +187 -69
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.0.
|
1
|
+
0.3.0.pre6
|
data/jsmestad-chargify.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jsmestad-chargify}
|
8
|
-
s.version = "0.3.0.
|
8
|
+
s.version = "0.3.0.pre6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Wynn Netherland", "Justin Smestad"]
|
data/lib/chargify/base.rb
CHANGED
@@ -26,19 +26,20 @@ module Chargify
|
|
26
26
|
raise(Chargify::Error::ConnectionFailed.new, "Failed to connect to payment gateway.")
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
29
|
+
|
30
|
+
case response.code.to_i
|
31
|
+
when 401
|
32
|
+
raise(Chargify::Error::AccessDenied.new(response), response.body)
|
33
|
+
when 403
|
34
|
+
raise(Chargify::Error::Forbidden.new(response), response.body)
|
35
|
+
when 422
|
36
|
+
raise(Chargify::Error::BadRequest.new(response), response.body)
|
37
|
+
when 404
|
38
|
+
raise(Chargify::Error::NotFound.new(response), response.body)
|
39
|
+
when 500
|
40
|
+
raise(Chargify::Error::ServerError.new(response), response.body)
|
41
|
+
when 504
|
42
|
+
raise(Chargify::Error::GatewayTimeout.new(response), response.body)
|
42
43
|
end
|
43
44
|
|
44
45
|
Chargify::Config.logger.debug("[CHARGIFY] Response from #{self.base_uri}#{path} was #{response.code}: #{response.body}") if Chargify::Config.debug
|
data/lib/chargify/customer.rb
CHANGED
@@ -9,13 +9,18 @@ module Chargify
|
|
9
9
|
customers.map{|c| Hashie::Mash.new c['customer']}
|
10
10
|
end
|
11
11
|
|
12
|
-
def find(id)
|
12
|
+
def find!(id)
|
13
13
|
return all if id == :all
|
14
14
|
|
15
15
|
request = api_request(:get, "/customers/#{id}.json")
|
16
|
-
|
17
|
-
response
|
18
|
-
|
16
|
+
response = Hashie::Mash.new(request)
|
17
|
+
response
|
18
|
+
end
|
19
|
+
|
20
|
+
def find(id)
|
21
|
+
find!(id)
|
22
|
+
rescue Chargify::Error::Base => e
|
23
|
+
return nil
|
19
24
|
end
|
20
25
|
|
21
26
|
# def find!(id)
|
@@ -23,11 +28,16 @@ module Chargify
|
|
23
28
|
# response = Hashie::Mash.new(request).customer
|
24
29
|
# end
|
25
30
|
|
26
|
-
def lookup(reference_id)
|
31
|
+
def lookup!(reference_id)
|
27
32
|
request = api_request(:get, "/customers/lookup.json?reference=#{reference_id}")
|
28
|
-
|
29
|
-
response
|
30
|
-
|
33
|
+
response = Hashie::Mash.new(request)
|
34
|
+
response.customer
|
35
|
+
end
|
36
|
+
|
37
|
+
def lookup(reference_id)
|
38
|
+
lookup!(reference_id)
|
39
|
+
rescue Chargify::Error::Base => e
|
40
|
+
return nil
|
31
41
|
end
|
32
42
|
|
33
43
|
#
|
@@ -37,12 +47,18 @@ module Chargify
|
|
37
47
|
# * organization (Optional) Company/Organization name
|
38
48
|
# * reference (Optional, but encouraged) The unique identifier used within your own application for this customer
|
39
49
|
#
|
40
|
-
def create(info={})
|
50
|
+
def create!(info={})
|
41
51
|
result = api_request(:post, "/customers.json", :body => {:customer => info})
|
42
52
|
created = true if result.code == 201
|
43
53
|
response = Hashie::Mash.new(result)
|
44
54
|
(response.customer || response).update(:success? => created)
|
45
55
|
end
|
56
|
+
|
57
|
+
def create(info={})
|
58
|
+
create!(info)
|
59
|
+
rescue Chargify::Error::Base => e
|
60
|
+
return false
|
61
|
+
end
|
46
62
|
|
47
63
|
#
|
48
64
|
# * first_name (Required)
|
@@ -51,7 +67,7 @@ module Chargify
|
|
51
67
|
# * organization (Optional) Company/Organization name
|
52
68
|
# * reference (Optional, but encouraged) The unique identifier used within your own application for this customer
|
53
69
|
#
|
54
|
-
def update(info={})
|
70
|
+
def update!(info={})
|
55
71
|
info.stringify_keys!
|
56
72
|
chargify_id = info.delete('id')
|
57
73
|
result = api_request(:put, "/customers/#{chargify_id}.json", :body => {:customer => info})
|
@@ -60,6 +76,12 @@ module Chargify
|
|
60
76
|
return response.customer unless response.customer.to_a.empty?
|
61
77
|
response
|
62
78
|
end
|
79
|
+
|
80
|
+
def update(info={})
|
81
|
+
update!(info)
|
82
|
+
rescue Chargify::Error::Base => e
|
83
|
+
return false
|
84
|
+
end
|
63
85
|
|
64
86
|
def subscriptions(id)
|
65
87
|
subscriptions = api_request(:get, "/customers/#{id}/subscriptions.json")
|
data/lib/chargify/error.rb
CHANGED
@@ -13,6 +13,7 @@ module Chargify
|
|
13
13
|
class Forbidden < Base; end # 403 errors
|
14
14
|
class BadRequest < Base; end # 422 errors
|
15
15
|
class NotFound < Base; end # 404 errors
|
16
|
+
class ServerError < Base; end # 500 errors
|
16
17
|
class GatewayTimeout < Base; end # 504 errors
|
17
18
|
class ConnectionFailed < Base; end
|
18
19
|
|
data/lib/chargify/product.rb
CHANGED
@@ -8,14 +8,26 @@ module Chargify
|
|
8
8
|
result.map{|p| Hashie::Mash.new p['product']}
|
9
9
|
end
|
10
10
|
|
11
|
-
def find(id)
|
11
|
+
def find!(id)
|
12
12
|
return all if id == :all
|
13
13
|
|
14
14
|
result = api_request(:get, "/products/#{id}.json")
|
15
15
|
Hashie::Mash.new(result).product
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
|
+
def find(id)
|
19
|
+
find!(id)
|
20
|
+
rescue Chargify::Error::Base => e
|
21
|
+
return nil
|
22
|
+
end
|
23
|
+
|
18
24
|
def find_by_handle(handle)
|
25
|
+
find_by_handle!(handle)
|
26
|
+
rescue Chargify::Error::Base => e
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def find_by_handle!(handle)
|
19
31
|
result = api_request(:get, "/products/handle/#{handle}.json")
|
20
32
|
Hashie::Mash.new(result).product
|
21
33
|
end
|
@@ -3,88 +3,142 @@ module Chargify
|
|
3
3
|
|
4
4
|
class << self
|
5
5
|
|
6
|
-
def find(id)
|
6
|
+
def find!(id)
|
7
7
|
result = api_request(:get, "/subscriptions/#{id}.json")
|
8
|
-
return nil if result.code != 200
|
9
8
|
Hashie::Mash.new(result).subscription
|
10
9
|
end
|
10
|
+
|
11
|
+
def find(id)
|
12
|
+
find!(id)
|
13
|
+
rescue Chargify::Error::Base => e
|
14
|
+
return nil
|
15
|
+
end
|
11
16
|
|
12
|
-
|
13
|
-
# response.success? -> true if response code is 201, false otherwise
|
14
|
-
def create(subscription_attributes={})
|
17
|
+
def create!(subscription_attributes={})
|
15
18
|
result = api_request(:post, "/subscriptions.json", :body => {:subscription => subscription_attributes})
|
16
|
-
created = true if result.code == 201
|
17
19
|
response = Hashie::Mash.new(result)
|
18
|
-
|
20
|
+
response.subscription
|
21
|
+
end
|
22
|
+
|
23
|
+
def create(subscription_attributes={})
|
24
|
+
create!(subscription_attributes)
|
25
|
+
rescue Chargify::Error::Base => e
|
26
|
+
return false
|
19
27
|
end
|
20
28
|
|
21
|
-
|
22
|
-
# response.success? -> true if response code is 200, false otherwise
|
23
|
-
def update(sub_id, subscription_attributes = {})
|
29
|
+
def update!(sub_id, subscription_attributes={})
|
24
30
|
result = api_request(:put, "/subscriptions/#{sub_id}.json", :body => {:subscription => subscription_attributes})
|
25
|
-
updated = true if result.code == 200
|
26
31
|
response = Hashie::Mash.new(result)
|
27
|
-
|
32
|
+
response.subscription
|
33
|
+
end
|
34
|
+
|
35
|
+
def update(sub_id, subscription_attributes={})
|
36
|
+
update!(sub_id, subscription_attributes)
|
37
|
+
rescue Chargify::Error::Base => e
|
38
|
+
return false
|
28
39
|
end
|
29
40
|
|
30
|
-
|
31
|
-
# response.success? -> true if response code is 200, false otherwise
|
32
|
-
def cancel(sub_id, message="")
|
41
|
+
def cancel!(sub_id, message="")
|
33
42
|
result = api_request(:delete, "/subscriptions/#{sub_id}.json", :body => {:subscription => {:cancellation_message => message} })
|
34
|
-
|
35
|
-
|
36
|
-
|
43
|
+
true if result.code == 200
|
44
|
+
end
|
45
|
+
|
46
|
+
def cancel(sub_id, message="")
|
47
|
+
cancel!(sub_id, message)
|
48
|
+
rescue Chargify::Error::Base => e
|
49
|
+
return false
|
37
50
|
end
|
38
51
|
|
39
|
-
def reactivate(sub_id)
|
52
|
+
def reactivate!(sub_id)
|
40
53
|
result = api_request(:put, "/subscriptions/#{sub_id}/reactivate.json", :body => "")
|
41
|
-
|
42
|
-
response
|
43
|
-
|
54
|
+
response = Hashie::Mash.new(result)
|
55
|
+
response.subscription
|
56
|
+
end
|
57
|
+
|
58
|
+
def reactivate(sub_id)
|
59
|
+
reactivate!(sub_id)
|
60
|
+
rescue Chargify::Error::Base => e
|
61
|
+
return false
|
44
62
|
end
|
45
63
|
|
46
|
-
def charge(sub_id, subscription_attributes={})
|
64
|
+
def charge!(sub_id, subscription_attributes={})
|
47
65
|
result = api_request(:post, "/subscriptions/#{sub_id}/charges.json", :body => { :charge => subscription_attributes })
|
48
|
-
success = result.code == 201
|
49
|
-
result = {} if result.code == 404
|
50
|
-
|
51
66
|
response = Hashie::Mash.new(result)
|
52
|
-
|
67
|
+
response.charge
|
68
|
+
end
|
69
|
+
|
70
|
+
def charge(sub_id, subscription_attributes={})
|
71
|
+
charge!(sub_id, subscription_attributes)
|
72
|
+
rescue Chargify::Error::Base => e
|
73
|
+
return false
|
53
74
|
end
|
54
75
|
|
55
|
-
def migrate(sub_id, product_id)
|
76
|
+
def migrate!(sub_id, product_id)
|
56
77
|
result = api_request(:post, "/subscriptions/#{sub_id}/migrations.json", :body => {:product_id => product_id })
|
57
|
-
success = true if result.code == 200
|
58
78
|
response = Hashie::Mash.new(result)
|
59
|
-
|
79
|
+
response.subscription
|
80
|
+
end
|
81
|
+
|
82
|
+
def migrate(sub_id, product_id)
|
83
|
+
migrate!(sub_id, product_id)
|
84
|
+
rescue Chargify::Error::Base => e
|
85
|
+
return false
|
60
86
|
end
|
61
87
|
|
62
|
-
def transactions(sub_id, options={})
|
88
|
+
def transactions!(sub_id, options={})
|
63
89
|
result = api_request(:get, "/subscriptions/#{sub_id}/transactions.json", :query => options)
|
64
90
|
result.map{|t| Hashie::Mash.new t['transaction']}
|
65
91
|
end
|
92
|
+
|
93
|
+
def transactions(sub_id, options={})
|
94
|
+
transactions!(sub_id, options)
|
95
|
+
rescue Chargify::Error::Base => e
|
96
|
+
return false
|
97
|
+
end
|
66
98
|
|
67
|
-
def components(subscription_id)
|
99
|
+
def components!(subscription_id)
|
68
100
|
result = api_request(:get, "/subscriptions/#{subscription_id}/components.json")
|
69
101
|
result.map{|c| Hashie::Mash.new c['component']}
|
70
102
|
end
|
103
|
+
|
104
|
+
def components(subscription_id)
|
105
|
+
components!(subscription_id)
|
106
|
+
rescue Chargify::Error::Base => e
|
107
|
+
return false
|
108
|
+
end
|
71
109
|
|
72
|
-
def find_component(subscription_id, component_id)
|
73
|
-
result = get
|
110
|
+
def find_component!(subscription_id, component_id)
|
111
|
+
result = api_request(:get, "/subscriptions/#{subscription_id}/components/#{component_id}.json")
|
74
112
|
Hashie::Mash.new(result).component
|
75
113
|
end
|
114
|
+
|
115
|
+
def find_component(subscription_id, component_id)
|
116
|
+
find_component!(subscription_id, component_id)
|
117
|
+
rescue Chargify::Error::Base => e
|
118
|
+
return false
|
119
|
+
end
|
76
120
|
|
77
|
-
def update_component(subscription_id, component_id, quantity)
|
121
|
+
def update_component!(subscription_id, component_id, quantity)
|
78
122
|
result = api_request(:put, "/subscriptions/#{subscription_id}/components/#{component_id}.json", :body => {:component => {:allocated_quantity => quantity}})
|
79
|
-
result[:success?] = result.code == 200
|
80
123
|
Hashie::Mash.new(result)
|
81
124
|
end
|
125
|
+
|
126
|
+
def update_component(subscription_id, component_id, quantity)
|
127
|
+
update_component!(subscription_id, component_id, quantity)
|
128
|
+
rescue Chargify::Error::Base => e
|
129
|
+
return false
|
130
|
+
end
|
82
131
|
|
83
|
-
def component_usage(subscription_id, component_id)
|
132
|
+
def component_usage!(subscription_id, component_id)
|
84
133
|
result = api_request(:get, "/subscriptions/#{subscription_id}/components/#{component_id}/usages.json")
|
85
|
-
success = result.code == 200
|
86
134
|
response = Hashie::Mash.new(result)
|
87
|
-
response
|
135
|
+
response
|
136
|
+
end
|
137
|
+
|
138
|
+
def component_usage(subscription_id, component_id)
|
139
|
+
component_usage!(subscription_id, component_id)
|
140
|
+
rescue Chargify::Error::Base => e
|
141
|
+
return false
|
88
142
|
end
|
89
143
|
|
90
144
|
end
|
@@ -9,37 +9,59 @@ describe Chargify::Customer do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
describe '.find' do
|
12
|
+
describe '.find!' do
|
13
13
|
|
14
14
|
it 'should pass to Chargified::Customer.all' do
|
15
15
|
Chargify::Customer.should_receive(:all)
|
16
|
-
Chargify::Customer.find(:all)
|
16
|
+
Chargify::Customer.find!(:all)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should be able to be found by a <chargify_id>" do
|
20
20
|
stub_get "https://OU812:x@pengwynn.chargify.com/customers/16.json", "customer.json"
|
21
|
-
customer = Chargify::Customer.find(16)
|
22
|
-
customer.
|
21
|
+
customer = Chargify::Customer.find!(16)
|
22
|
+
customer.should be_a(Hashie::Mash)
|
23
23
|
end
|
24
24
|
|
25
|
-
it "should
|
25
|
+
it "should raise an error if nothing is found" do
|
26
26
|
stub_get "https://OU812:x@pengwynn.chargify.com/customers/16.json", "", 404
|
27
|
-
|
28
|
-
|
27
|
+
lambda {
|
28
|
+
Chargify::Customer.find!(16)
|
29
|
+
}.should raise_error(Chargify::Error::NotFound)
|
29
30
|
end
|
30
31
|
|
31
32
|
end
|
33
|
+
|
34
|
+
describe '.find' do
|
32
35
|
|
36
|
+
it "should return nil if nothing is found" do
|
37
|
+
stub_get "https://OU812:x@pengwynn.chargify.com/customers/16.json", "", 404
|
38
|
+
Chargify::Customer.find(16).should == nil
|
39
|
+
end
|
33
40
|
|
34
|
-
|
41
|
+
end
|
35
42
|
|
36
|
-
|
43
|
+
|
44
|
+
describe '.lookup!' do
|
45
|
+
|
46
|
+
it "should be able to be found by a <reference_id>" do
|
37
47
|
stub_get "https://OU812:x@pengwynn.chargify.com/customers/lookup.json?reference=bradleyjoyce", "customer.json"
|
48
|
+
customer = Chargify::Customer.lookup!("bradleyjoyce")
|
49
|
+
customer.should be_a(Hashie::Mash)
|
38
50
|
end
|
39
51
|
|
40
|
-
it "should
|
41
|
-
|
42
|
-
|
52
|
+
it "should raise an error if nothing is found" do
|
53
|
+
stub_get "https://OU812:x@pengwynn.chargify.com/customers/lookup.json?reference=bradleyjoyce", "", 404
|
54
|
+
lambda {
|
55
|
+
Chargify::Customer.lookup!("bradleyjoyce")
|
56
|
+
}.should raise_error(Chargify::Error::NotFound)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '.lookup' do
|
62
|
+
|
63
|
+
it 'should return nil if nothing is found' do
|
64
|
+
Chargify::Customer.lookup("bradleyjoyce") == nil
|
43
65
|
end
|
44
66
|
|
45
67
|
end
|
@@ -60,42 +82,68 @@ describe Chargify::Customer do
|
|
60
82
|
|
61
83
|
end
|
62
84
|
|
63
|
-
describe '.create' do
|
64
|
-
|
65
|
-
before do
|
66
|
-
stub_post "https://OU812:x@pengwynn.chargify.com/customers.json", "new_customer.json"
|
67
|
-
end
|
85
|
+
describe '.create!' do
|
68
86
|
|
69
87
|
it "should create a new customer" do
|
88
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/customers.json", "new_customer.json"
|
70
89
|
info = {
|
71
90
|
:first_name => "Wynn",
|
72
91
|
:last_name => "Netherland",
|
73
92
|
:email => "wynn@example.com"
|
74
93
|
}
|
75
|
-
customer = Chargify::Customer.create(info)
|
94
|
+
customer = Chargify::Customer.create!(info)
|
76
95
|
customer.first_name.should == "Wynn"
|
77
96
|
end
|
97
|
+
|
98
|
+
it "should raise an error if customer creation fails" do
|
99
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/customers.json", "", 422
|
100
|
+
lambda {
|
101
|
+
Chargify::Customer.create!
|
102
|
+
}.should raise_error(Chargify::Error::BadRequest)
|
103
|
+
end
|
78
104
|
|
79
105
|
end
|
80
|
-
|
81
|
-
describe '.
|
82
|
-
|
83
|
-
|
84
|
-
|
106
|
+
|
107
|
+
describe '.create' do
|
108
|
+
|
109
|
+
it "should return false if creation fails" do
|
110
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/customers.json", "", 422
|
111
|
+
Chargify::Customer.create.should == false
|
85
112
|
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
describe '.update!' do
|
86
117
|
|
87
118
|
it "should update a customer" do
|
119
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/customers/16.json", "new_customer.json"
|
88
120
|
info = {
|
89
121
|
:id => 16,
|
90
122
|
:first_name => "Wynn",
|
91
123
|
:last_name => "Netherland",
|
92
124
|
:email => "wynn@example.com"
|
93
125
|
}
|
94
|
-
customer = Chargify::Customer.update(info)
|
126
|
+
customer = Chargify::Customer.update!(info)
|
95
127
|
customer.first_name.should == "Wynn"
|
96
128
|
end
|
129
|
+
|
130
|
+
it "should raise an error if the customer cannot be found" do
|
131
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/customers/16.json", "", 404
|
132
|
+
lambda {
|
133
|
+
Chargify::Customer.update!(:id => 16)
|
134
|
+
}.should raise_error(Chargify::Error::NotFound)
|
135
|
+
end
|
97
136
|
|
98
137
|
end
|
138
|
+
|
139
|
+
describe '.update' do
|
140
|
+
|
141
|
+
it "should return false if the customer cannot be found" do
|
142
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/customers/16.json", "", 404
|
143
|
+
Chargify::Customer.update(:id => 16).should == false
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
99
147
|
|
100
148
|
describe '.subscriptions' do
|
101
149
|
|
@@ -19,6 +19,11 @@ describe Chargify::Product do
|
|
19
19
|
product = Chargify::Product.find(8)
|
20
20
|
product.accounting_code.should == 'TSMO'
|
21
21
|
end
|
22
|
+
|
23
|
+
it "should return nil if the product does not exist for a product" do
|
24
|
+
stub_get "https://OU812:x@pengwynn.chargify.com/products/99.json", "", 404
|
25
|
+
Chargify::Product.find(99).should == nil
|
26
|
+
end
|
22
27
|
|
23
28
|
end
|
24
29
|
|
@@ -9,23 +9,33 @@ describe Chargify::Subscription do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
describe '.find' do
|
12
|
+
describe '.find!' do
|
13
13
|
|
14
14
|
it "should return info for a subscription" do
|
15
15
|
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/13.json", "subscription.json"
|
16
|
-
subscription = Chargify::Subscription.find(13)
|
16
|
+
subscription = Chargify::Subscription.find!(13)
|
17
17
|
subscription.customer.reference.should == 'bradleyjoyce'
|
18
18
|
end
|
19
19
|
|
20
|
+
it "should throw a not found error if a subscription is not found" do
|
21
|
+
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/18.json", "subscription_not_found.json", 404
|
22
|
+
lambda {
|
23
|
+
Chargify::Subscription.find!(18)
|
24
|
+
}.should raise_error(Chargify::Error::NotFound)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.find' do
|
30
|
+
|
20
31
|
it "should return nil if a subscription is not found" do
|
21
32
|
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/18.json", "subscription_not_found.json", 404
|
22
|
-
|
23
|
-
subscription.should == nil
|
33
|
+
Chargify::Subscription.find(18).should == nil
|
24
34
|
end
|
25
35
|
|
26
36
|
end
|
27
37
|
|
28
|
-
describe '.create' do
|
38
|
+
describe '.create!' do
|
29
39
|
|
30
40
|
it "should create a customer subscription" do
|
31
41
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions.json", "subscription.json"
|
@@ -38,7 +48,7 @@ describe Chargify::Subscription do
|
|
38
48
|
:email => "wynn@example.com"
|
39
49
|
}
|
40
50
|
}
|
41
|
-
subscription = Chargify::Subscription.create(options)
|
51
|
+
subscription = Chargify::Subscription.create!(options)
|
42
52
|
subscription.customer.organization.should == 'Squeejee'
|
43
53
|
end
|
44
54
|
|
@@ -54,11 +64,12 @@ describe Chargify::Subscription do
|
|
54
64
|
},
|
55
65
|
:coupon_code => "EARLYBIRD"
|
56
66
|
}
|
57
|
-
subscription = Chargify::Subscription.create(options)
|
67
|
+
subscription = Chargify::Subscription.create!(options)
|
68
|
+
subscription.should be_a(Hashie::Mash)
|
58
69
|
#subscription.coupon.should == 'Squeejee'
|
59
70
|
end
|
60
71
|
|
61
|
-
it "should
|
72
|
+
it "should raise error to true when subscription is created successfully" do
|
62
73
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions.json", "subscription.json", 201
|
63
74
|
options = {
|
64
75
|
:product_handle => 'monthly',
|
@@ -69,12 +80,12 @@ describe Chargify::Subscription do
|
|
69
80
|
:email => "wynn@example.com"
|
70
81
|
}
|
71
82
|
}
|
72
|
-
subscription = Chargify::Subscription.create(options)
|
73
|
-
subscription.
|
83
|
+
subscription = Chargify::Subscription.create!(options)
|
84
|
+
subscription.should be_a(Hashie::Mash)
|
74
85
|
end
|
75
86
|
|
76
|
-
it "should
|
77
|
-
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions.json", "subscription.json",
|
87
|
+
it "should raise error to nil when subscription is not created successfully" do
|
88
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions.json", "subscription.json", 422
|
78
89
|
options = {
|
79
90
|
:product_handle => 'monthly',
|
80
91
|
:customer_reference => 'bradleyjoyce',
|
@@ -84,8 +95,10 @@ describe Chargify::Subscription do
|
|
84
95
|
:email => "wynn@example.com"
|
85
96
|
}
|
86
97
|
}
|
87
|
-
|
88
|
-
|
98
|
+
lambda {
|
99
|
+
Chargify::Subscription.create!(options)
|
100
|
+
}.should raise_error(Chargify::Error::BadRequest)
|
101
|
+
|
89
102
|
end
|
90
103
|
|
91
104
|
it "should raise UnexpectedResponseError when reponse is invalid JSON" do
|
@@ -100,12 +113,31 @@ describe Chargify::Subscription do
|
|
100
113
|
}
|
101
114
|
}
|
102
115
|
lambda {
|
103
|
-
Chargify::Subscription.create(options)
|
116
|
+
Chargify::Subscription.create!(options)
|
104
117
|
}.should raise_error(Chargify::Error::UnexpectedResponse)
|
105
118
|
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '.create' do
|
123
|
+
|
124
|
+
it "should return false if creation errors out" do
|
125
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions.json", "subscription.json", 422
|
126
|
+
options = {
|
127
|
+
:product_handle => 'monthly',
|
128
|
+
:customer_reference => 'bradleyjoyce',
|
129
|
+
:customer_attributes => {
|
130
|
+
:first_name => "Wynn",
|
131
|
+
:last_name => "Netherland",
|
132
|
+
:email => "wynn@example.com"
|
133
|
+
}
|
134
|
+
}
|
135
|
+
Chargify::Subscription.create(options).should == false
|
136
|
+
end
|
137
|
+
|
106
138
|
end
|
107
139
|
|
108
|
-
describe '.update' do
|
140
|
+
describe '.update!' do
|
109
141
|
|
110
142
|
it "should update a customer subscription" do
|
111
143
|
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "subscription.json"
|
@@ -118,11 +150,11 @@ describe Chargify::Subscription do
|
|
118
150
|
:email => "wynn@example.com"
|
119
151
|
}
|
120
152
|
}
|
121
|
-
subscription = Chargify::Subscription.update(123, options)
|
153
|
+
subscription = Chargify::Subscription.update!(123, options)
|
122
154
|
subscription.customer.organization.should == 'Squeejee'
|
123
155
|
end
|
124
156
|
|
125
|
-
it "should
|
157
|
+
it "should raise error to true when subscription is updated successfully" do
|
126
158
|
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "subscription.json", 200
|
127
159
|
options = {
|
128
160
|
:product_handle => 'monthly',
|
@@ -133,11 +165,11 @@ describe Chargify::Subscription do
|
|
133
165
|
:email => "wynn@example.com"
|
134
166
|
}
|
135
167
|
}
|
136
|
-
subscription = Chargify::Subscription.update(123, options)
|
137
|
-
subscription.
|
168
|
+
subscription = Chargify::Subscription.update!(123, options)
|
169
|
+
subscription.should be_a(Hashie::Mash)
|
138
170
|
end
|
139
171
|
|
140
|
-
it "should
|
172
|
+
it "should raise error to false when subscription is not updated successfully" do
|
141
173
|
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "subscription.json", 500
|
142
174
|
options = {
|
143
175
|
:product_handle => 'monthly',
|
@@ -148,64 +180,91 @@ describe Chargify::Subscription do
|
|
148
180
|
:email => "wynn@example.com"
|
149
181
|
}
|
150
182
|
}
|
151
|
-
|
152
|
-
|
183
|
+
|
184
|
+
lambda {
|
185
|
+
Chargify::Subscription.update!(123, options)
|
186
|
+
}.should raise_error(Chargify::Error::ServerError)
|
153
187
|
end
|
154
188
|
|
155
189
|
end
|
190
|
+
|
191
|
+
describe '.update' do
|
192
|
+
|
193
|
+
it "should return false if subscription update fails" do
|
194
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "subscription.json", 500
|
195
|
+
options = {
|
196
|
+
:product_handle => 'monthly',
|
197
|
+
:customer_reference => 'bradleyjoyce',
|
198
|
+
:customer_attributes => {
|
199
|
+
:first_name => "Wynn",
|
200
|
+
:last_name => "Netherland",
|
201
|
+
:email => "wynn@example.com"
|
202
|
+
}
|
203
|
+
}
|
204
|
+
Chargify::Subscription.update(123, options)
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
156
208
|
|
157
|
-
describe '.reactivate' do
|
209
|
+
describe '.reactivate!' do
|
158
210
|
|
159
211
|
it "should reactivate a subscription" do
|
160
212
|
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/reactivate.json", "subscription.json", 200
|
161
|
-
subscription = Chargify::Subscription.reactivate(123)
|
162
|
-
|
213
|
+
subscription = Chargify::Subscription.reactivate!(123)
|
163
214
|
subscription.state.should == "active"
|
164
215
|
end
|
165
216
|
|
166
|
-
it "should
|
167
|
-
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/reactivate.json", "subscription_not_found.json",
|
168
|
-
|
169
|
-
|
170
|
-
|
217
|
+
it "should raise error to nil when subscription is not reactivated successfully" do
|
218
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/reactivate.json", "subscription_not_found.json", 422
|
219
|
+
lambda {
|
220
|
+
Chargify::Subscription.reactivate!(123)
|
221
|
+
}.should raise_error(Chargify::Error::BadRequest)
|
171
222
|
end
|
172
223
|
|
173
|
-
it "should
|
224
|
+
it "should raise error to false when subscription is reactivated successfully" do
|
174
225
|
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/reactivate.json", "subscription.json", 200
|
175
|
-
subscription = Chargify::Subscription.reactivate(123)
|
176
|
-
|
177
|
-
subscription.success?.should == true
|
226
|
+
subscription = Chargify::Subscription.reactivate!(123)
|
227
|
+
subscription.should be_a(Hashie::Mash)
|
178
228
|
end
|
179
229
|
|
180
230
|
end
|
231
|
+
|
232
|
+
describe '.reactivate' do
|
181
233
|
|
182
|
-
|
234
|
+
it "should return false if an error occurs" do
|
235
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/reactivate.json", "subscription_not_found.json", 422
|
236
|
+
Chargify::Subscription.reactivate(123).should == false
|
237
|
+
end
|
183
238
|
|
184
|
-
|
185
|
-
stub_delete "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "deleted_subscription.json", 200
|
186
|
-
subscription = Chargify::Subscription.cancel(123)
|
239
|
+
end
|
187
240
|
|
188
|
-
|
189
|
-
end
|
241
|
+
describe '.cancel!' do
|
190
242
|
|
191
|
-
it "should
|
243
|
+
it "should raise error to nil when subscription is not cancelled successfully" do
|
192
244
|
stub_delete "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "deleted_subscription.json", 500
|
193
|
-
|
194
|
-
|
195
|
-
|
245
|
+
|
246
|
+
lambda {
|
247
|
+
Chargify::Subscription.cancel!(123)
|
248
|
+
}.should raise_error(Chargify::Error::ServerError)
|
196
249
|
end
|
197
250
|
|
198
|
-
it "should
|
251
|
+
it "should raise error to true when subscription is cancelled successfully" do
|
199
252
|
stub_delete "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "deleted_subscription.json", 200
|
200
|
-
|
201
|
-
|
202
|
-
subscription.success?.should == true
|
253
|
+
Chargify::Subscription.cancel!(123).should == true
|
203
254
|
end
|
204
255
|
|
205
256
|
end
|
257
|
+
|
258
|
+
describe '.cancel' do
|
259
|
+
|
260
|
+
it "should return false if an error occurs" do
|
261
|
+
stub_delete "https://OU812:x@pengwynn.chargify.com/subscriptions/123.json", "deleted_subscription.json", 500
|
262
|
+
Chargify::Subscription.cancel(123).should == false
|
263
|
+
end
|
206
264
|
|
265
|
+
end
|
207
266
|
|
208
|
-
describe '.charge' do
|
267
|
+
describe '.charge!' do
|
209
268
|
|
210
269
|
before do
|
211
270
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/charges.json", "charge_subscription.json", 201
|
@@ -217,48 +276,75 @@ describe Chargify::Subscription do
|
|
217
276
|
end
|
218
277
|
|
219
278
|
it "should accept :amount as a parameter" do
|
220
|
-
subscription = Chargify::Subscription.charge(123, @options)
|
279
|
+
subscription = Chargify::Subscription.charge!(123, @options)
|
221
280
|
|
281
|
+
subscription.should be_a(Hashie::Mash)
|
222
282
|
subscription.amount_in_cents.should == @options[:amount]*100
|
223
|
-
subscription.success?.should == true
|
224
283
|
end
|
225
284
|
|
226
285
|
it "should accept :amount_in_cents as a parameter" do
|
227
|
-
subscription = Chargify::Subscription.charge(123, @options)
|
286
|
+
subscription = Chargify::Subscription.charge!(123, @options)
|
228
287
|
|
288
|
+
subscription.should be_a(Hashie::Mash)
|
229
289
|
subscription.amount_in_cents.should == @options[:amount_in_cents]
|
230
|
-
subscription.success?.should == true
|
231
290
|
end
|
232
291
|
|
233
292
|
it "should have success? as false if parameters are missing" do
|
234
293
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/charges.json", "charge_subscription_missing_parameters.json", 422
|
235
294
|
|
236
|
-
|
237
|
-
|
295
|
+
lambda {
|
296
|
+
Chargify::Subscription.charge!(123, {})
|
297
|
+
}.should raise_error(Chargify::Error::BadRequest)
|
238
298
|
end
|
239
299
|
|
240
300
|
it "should have success? as false if the subscription is not found" do
|
241
301
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/9999/charges.json", "", 404
|
242
302
|
|
243
|
-
|
244
|
-
|
303
|
+
lambda {
|
304
|
+
Chargify::Subscription.charge!(9999, @options)
|
305
|
+
}.should raise_error(Chargify::Error::NotFound)
|
245
306
|
end
|
246
307
|
|
247
308
|
end
|
309
|
+
|
310
|
+
describe '.charge' do
|
311
|
+
|
312
|
+
it "should return false if an error occurs" do
|
313
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/charges.json", "charge_subscription_missing_parameters.json", 422
|
314
|
+
Chargify::Subscription.charge(123, {}).should == false
|
315
|
+
end
|
316
|
+
|
317
|
+
end
|
248
318
|
|
249
|
-
describe '.migrate' do
|
319
|
+
describe '.migrate!' do
|
250
320
|
|
251
321
|
it "should migrate a subscription from one product to another" do
|
252
322
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/migrations.json", "migrate_subscription.json"
|
253
323
|
|
254
|
-
subscription = Chargify::Subscription.migrate(123, 354)
|
255
|
-
subscription.
|
324
|
+
subscription = Chargify::Subscription.migrate!(123, 354)
|
325
|
+
subscription.should be_a(Hashie::Mash)
|
256
326
|
subscription.product.id.should == 354
|
257
327
|
end
|
328
|
+
|
329
|
+
it "should throw an error if one occurs" do
|
330
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/migrations.json", "", 422
|
331
|
+
lambda {
|
332
|
+
Chargify::Subscription.migrate!(123, 354)
|
333
|
+
}.should raise_error(Chargify::Error::BadRequest)
|
334
|
+
end
|
258
335
|
|
259
336
|
end
|
337
|
+
|
338
|
+
describe '.migrate' do
|
260
339
|
|
261
|
-
|
340
|
+
it "should return false if an error occurs" do
|
341
|
+
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/migrations.json", "", 422
|
342
|
+
Chargify::Subscription.migrate(123, 354).should == false
|
343
|
+
end
|
344
|
+
|
345
|
+
end
|
346
|
+
|
347
|
+
describe '.components!' do
|
262
348
|
|
263
349
|
it "should list components" do
|
264
350
|
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components.json", "components.json"
|
@@ -267,38 +353,70 @@ describe Chargify::Subscription do
|
|
267
353
|
components.last.allocated_quantity.should == 2
|
268
354
|
end
|
269
355
|
|
356
|
+
it "should throw an error if one occurs"
|
357
|
+
|
358
|
+
end
|
359
|
+
|
360
|
+
describe '.components' do
|
361
|
+
|
362
|
+
it 'should return false if an error occurs'
|
363
|
+
|
270
364
|
end
|
271
365
|
|
272
|
-
describe '.find_component' do
|
366
|
+
describe '.find_component!' do
|
273
367
|
|
274
368
|
it "should show a specific component" do
|
275
369
|
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components/16.json", "component.json"
|
276
|
-
component = Chargify::Subscription.find_component(123, 16)
|
370
|
+
component = Chargify::Subscription.find_component!(123, 16)
|
277
371
|
component.name.should == "Extra Rubies"
|
278
372
|
component.allocated_quantity.should == 42
|
279
373
|
end
|
280
374
|
|
375
|
+
it "should throw an error if one occurs"
|
376
|
+
|
377
|
+
end
|
378
|
+
|
379
|
+
describe '.find_component!' do
|
380
|
+
|
381
|
+
it 'should return false if an error occurs'
|
382
|
+
|
281
383
|
end
|
282
384
|
|
283
|
-
describe '.update_component' do
|
385
|
+
describe '.update_component!' do
|
284
386
|
|
285
387
|
it "should update the allocated_quantity for a component" do
|
286
388
|
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components/16.json", "component.json"
|
287
|
-
response = Chargify::Subscription.update_component(123, 16, 20_000_000)
|
288
|
-
response.
|
389
|
+
response = Chargify::Subscription.update_component!(123, 16, 20_000_000)
|
390
|
+
response.should be_a(Hashie::Mash)
|
289
391
|
end
|
392
|
+
|
393
|
+
it "should throw an error if one occurs"
|
290
394
|
|
291
395
|
end
|
292
396
|
|
293
|
-
describe '.
|
397
|
+
describe '.update_component' do
|
398
|
+
|
399
|
+
it 'should return false if an error occurs'
|
400
|
+
|
401
|
+
end
|
402
|
+
|
403
|
+
describe '.component_usage!' do
|
294
404
|
|
295
405
|
it "should list usage for a subscription" do
|
296
406
|
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components/456/usages.json", "list_metered_subscriptions.json", 200
|
297
407
|
|
298
408
|
subscription = Chargify::Subscription.component_usage(123, 456)
|
299
|
-
subscription.
|
409
|
+
subscription.should be_a(Hashie::Mash)
|
300
410
|
end
|
411
|
+
|
412
|
+
it "should throw an error if one occurs"
|
301
413
|
|
302
414
|
end
|
415
|
+
|
416
|
+
describe '.component_usage' do
|
417
|
+
|
418
|
+
it 'should return false if an error occurs'
|
419
|
+
|
420
|
+
end
|
303
421
|
|
304
422
|
end
|