jsmestad-chargify 0.3.0.pre5 → 0.3.0.pre6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|