rspreedly 0.1.11 → 0.1.14
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/Rakefile +70 -38
- data/lib/rspreedly.rb +2 -0
- data/lib/rspreedly/base.rb +2 -2
- data/lib/rspreedly/config.rb +23 -22
- data/lib/rspreedly/credit.rb +5 -0
- data/lib/rspreedly/payment_method.rb +5 -0
- data/lib/rspreedly/subscriber.rb +12 -2
- data/lib/rspreedly/subscription_plan.rb +9 -2
- data/lib/rspreedly/transaction.rb +39 -0
- data/rspreedly.gemspec +16 -81
- data/spec/base_spec.rb +23 -22
- data/spec/config_spec.rb +50 -50
- data/spec/fixtures/credit_not_valid.xml +4 -0
- data/spec/fixtures/credit_success.xml +0 -0
- data/spec/fixtures/no_transactions.xml +2 -0
- data/spec/fixtures/subscription_plan_list.xml +2 -2
- data/spec/fixtures/transactions.xml +63 -0
- data/spec/invoice_spec.rb +103 -68
- data/spec/spec_helper.rb +10 -27
- data/spec/subscriber_spec.rb +359 -198
- data/spec/subscription_plan_spec.rb +30 -5
- data/spec/transaction_spec.rb +28 -0
- metadata +78 -61
- data/.document +0 -5
- data/.gitignore +0 -5
- data/VERSION +0 -1
data/spec/spec_helper.rb
CHANGED
@@ -1,39 +1,22 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'spec'
|
3
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
4
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rspec'
|
6
|
+
require 'webmock/rspec'
|
5
7
|
require 'rspreedly'
|
6
8
|
|
7
|
-
|
9
|
+
RSpec.configure do |config|
|
8
10
|
config.before(:each) do
|
9
11
|
RSpreedly::Config.reset
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
|
-
def
|
14
|
-
|
15
|
-
File.read(response_file)
|
15
|
+
def spreedly_url(path)
|
16
|
+
"https://your-api-key:X@spreedly.com/api/v4/your-site-name#{path}"
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def stub_http_with_code(status = 200)
|
23
|
-
stub_http_response(:code => status)
|
24
|
-
end
|
25
|
-
|
26
|
-
def stub_http_response(opts={})
|
27
|
-
http_response = mock(:response)
|
28
|
-
|
29
|
-
http_response.stub!(:body).and_return(opts[:body] || "")
|
30
|
-
http_response.stub!(:message).and_return("")
|
31
|
-
http_response.stub!(:kind_of?).and_return(true)
|
32
|
-
http_response.stub!(:code).and_return(opts[:code] || 200)
|
33
|
-
http_response.stub!(:to_hash).and_return({})
|
34
|
-
|
35
|
-
mock_http = mock(:net_http, :null_object => true)
|
36
|
-
mock_http.stub!(:request).and_return(http_response)
|
37
|
-
|
38
|
-
Net::HTTP.stub!(:new).and_return(mock_http)
|
19
|
+
def fixture(file)
|
20
|
+
response_file = File.join(File.dirname(__FILE__), 'fixtures', file)
|
21
|
+
File.read(response_file)
|
39
22
|
end
|
data/spec/subscriber_spec.rb
CHANGED
@@ -6,88 +6,100 @@ describe RSpreedly::Subscriber do
|
|
6
6
|
it "should pass to RSpreedly::Subscriber.all" do
|
7
7
|
RSpreedly::Subscriber.should_receive(:all)
|
8
8
|
RSpreedly::Subscriber.find(:all)
|
9
|
-
end
|
9
|
+
end
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should return nil with an id for a subscriber who doesn't exist" do
|
13
|
-
|
13
|
+
stub_request(:get, spreedly_url("/subscribers/42.xml")).
|
14
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
15
|
+
|
14
16
|
RSpreedly::Subscriber.find(42).should be_nil
|
15
17
|
end
|
16
18
|
|
17
19
|
it "should return a Subscriber with an id for an existing subscriber" do
|
18
|
-
|
20
|
+
stub_request(:get, spreedly_url("/subscribers/42.xml")).
|
21
|
+
to_return(:body => fixture("subscriber.xml"), :status => 200)
|
22
|
+
|
19
23
|
RSpreedly::Subscriber.find(42).should be_a(RSpreedly::Subscriber)
|
20
24
|
end
|
21
25
|
end
|
22
|
-
|
26
|
+
|
23
27
|
describe ".all" do
|
24
28
|
it "should return an empty array if there are no subscribers" do
|
25
|
-
|
29
|
+
stub_request(:get, spreedly_url("/subscribers.xml")).
|
30
|
+
to_return(:body => fixture("no_subscribers.xml"), :status => 200)
|
31
|
+
|
26
32
|
RSpreedly::Subscriber.all.should == []
|
27
33
|
end
|
28
|
-
|
34
|
+
|
29
35
|
it "should return an array of subscribers if there are any to find" do
|
30
|
-
|
36
|
+
stub_request(:get, spreedly_url("/subscribers.xml")).
|
37
|
+
to_return(:body => fixture("subscribers.xml"), :status => 200)
|
38
|
+
|
31
39
|
RSpreedly::Subscriber.all.size.should == 3 # there are 3 in the fixture
|
32
40
|
RSpreedly::Subscriber.all.select{|x| x.is_a?(RSpreedly::Subscriber )}.size.should == 3
|
33
41
|
end
|
34
42
|
end
|
35
|
-
|
43
|
+
|
36
44
|
describe ".destroy_all" do
|
37
45
|
it "should return true if successful" do
|
38
|
-
|
46
|
+
stub_request(:delete, spreedly_url("/subscribers.xml")).
|
47
|
+
to_return(:status => 200)
|
48
|
+
|
39
49
|
RSpreedly::Subscriber.destroy_all.should be_true
|
40
|
-
end
|
50
|
+
end
|
41
51
|
end
|
42
|
-
|
52
|
+
|
43
53
|
describe "#to_xml" do
|
44
|
-
|
54
|
+
|
45
55
|
before(:each) do
|
46
56
|
# use the XML to build a subscriber
|
47
|
-
|
57
|
+
stub_request(:get, spreedly_url("/subscribers/42.xml")).
|
58
|
+
to_return(:body => fixture("subscriber.xml"), :status => 200)
|
59
|
+
|
48
60
|
@subscriber = RSpreedly::Subscriber.find(42)
|
49
61
|
end
|
50
|
-
|
51
|
-
it "should strip fields the API can't handle" do
|
62
|
+
|
63
|
+
it "should strip fields the API can't handle" do
|
52
64
|
fields = [
|
53
|
-
:active, :active_until, :card_expires_before_next_auto_renew,
|
54
|
-
:created_at, :eligible_for_free_trial, :feature_level,
|
55
|
-
:grace_until, :in_grace_period, :lifetime_subscription,
|
56
|
-
:on_trial, :ready_to_renew, :recurring,
|
57
|
-
:store_credit, :store_credit_currency_code, :subscription_plan_name,
|
65
|
+
:active, :active_until, :card_expires_before_next_auto_renew,
|
66
|
+
:created_at, :eligible_for_free_trial, :feature_level,
|
67
|
+
:grace_until, :in_grace_period, :lifetime_subscription,
|
68
|
+
:on_trial, :ready_to_renew, :recurring,
|
69
|
+
:store_credit, :store_credit_currency_code, :subscription_plan_name,
|
58
70
|
:token, :updated_at
|
59
71
|
]
|
60
|
-
|
72
|
+
|
61
73
|
xml = @subscriber.to_xml
|
62
74
|
fields.each do |field|
|
63
75
|
xml.should_not =~ /<#{field}>/
|
64
|
-
end
|
76
|
+
end
|
65
77
|
end
|
66
|
-
|
78
|
+
|
67
79
|
it "should not strip fields the API can handle" do
|
68
80
|
fields = [
|
69
|
-
:billing_first_name,
|
70
|
-
:billing_last_name,
|
71
|
-
:customer_id, :email,
|
81
|
+
:billing_first_name,
|
82
|
+
:billing_last_name,
|
83
|
+
:customer_id, :email,
|
72
84
|
:screen_name
|
73
85
|
]
|
74
|
-
|
86
|
+
|
75
87
|
xml = @subscriber.to_xml
|
76
88
|
fields.each do |field|
|
77
89
|
xml.should =~ /<#{field}>/
|
78
|
-
end
|
90
|
+
end
|
79
91
|
end
|
80
92
|
end
|
81
|
-
|
93
|
+
|
82
94
|
describe "#new_record?" do
|
83
95
|
before(:each) do
|
84
96
|
@subscriber = RSpreedly::Subscriber.new
|
85
97
|
end
|
86
|
-
|
98
|
+
|
87
99
|
it "should return true if the subscriber doesn't have a token" do
|
88
100
|
@subscriber.new_record?.should be_true
|
89
101
|
end
|
90
|
-
|
102
|
+
|
91
103
|
it "should return false if the subscriber has a token" do
|
92
104
|
@subscriber.token = "something"
|
93
105
|
@subscriber.new_record?.should be_false
|
@@ -97,86 +109,100 @@ describe RSpreedly::Subscriber do
|
|
97
109
|
describe "#save" do
|
98
110
|
before(:each) do
|
99
111
|
@subscriber = RSpreedly::Subscriber.new
|
100
|
-
end
|
101
|
-
|
112
|
+
end
|
113
|
+
|
102
114
|
it "should call #create for a non existing subscriber" do
|
103
|
-
@subscriber.should_receive(:create)
|
115
|
+
@subscriber.should_receive(:create)
|
104
116
|
@subscriber.save
|
105
117
|
end
|
106
|
-
|
118
|
+
|
107
119
|
it "should call update for an existing subscriber" do
|
108
120
|
@subscriber.token = "something"
|
109
121
|
@subscriber.should_receive(:update)
|
110
|
-
@subscriber.save
|
122
|
+
@subscriber.save
|
111
123
|
end
|
112
124
|
end
|
113
|
-
|
125
|
+
|
114
126
|
describe "#save!" do
|
115
127
|
before(:each) do
|
116
128
|
@subscriber = RSpreedly::Subscriber.new
|
117
|
-
end
|
118
|
-
|
129
|
+
end
|
130
|
+
|
119
131
|
it "should call #create! for a non existing subscriber" do
|
120
|
-
@subscriber.should_receive(:create!)
|
132
|
+
@subscriber.should_receive(:create!)
|
121
133
|
@subscriber.save!
|
122
134
|
end
|
123
|
-
|
135
|
+
|
124
136
|
it "should call update! for an existing subscriber" do
|
125
137
|
@subscriber.token = "something"
|
126
138
|
@subscriber.should_receive(:update!)
|
127
|
-
@subscriber.save!
|
139
|
+
@subscriber.save!
|
128
140
|
end
|
129
|
-
end
|
141
|
+
end
|
130
142
|
|
131
143
|
describe "#create!" do
|
132
144
|
it "should return true if successful" do
|
133
|
-
|
145
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
146
|
+
to_return(:body => fixture("create_subscriber.xml"), :status => 201)
|
147
|
+
|
134
148
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42, :screen_name => "bob")
|
135
149
|
@subscriber.create!.should be_true
|
136
150
|
end
|
137
|
-
|
151
|
+
|
138
152
|
it "should raise a BadRequest error if the data is invalid" do
|
139
|
-
|
153
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
154
|
+
to_return(:body => fixture("invalid_subscriber.xml"), :status => 422)
|
155
|
+
|
140
156
|
@subscriber = RSpreedly::Subscriber.new
|
141
157
|
lambda{
|
142
158
|
@subscriber.create!
|
143
159
|
}.should raise_error(RSpreedly::Error::BadRequest)
|
144
160
|
end
|
145
|
-
|
161
|
+
|
146
162
|
it "should update the subscriber if successful" do
|
147
|
-
|
148
|
-
|
163
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
164
|
+
to_return(:body => fixture("create_subscriber.xml"), :status => 200)
|
165
|
+
|
166
|
+
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42, :screen_name => "bob")
|
149
167
|
lambda{
|
150
168
|
@subscriber.create!
|
151
169
|
}.should change(@subscriber, :token).to("6af9994a57e420345897b1abb4c27a9db27fa4d0")
|
152
|
-
end
|
153
|
-
|
170
|
+
end
|
171
|
+
|
154
172
|
it "should raise a Forbidden error if there is already a subscriber with that ID" do
|
155
|
-
|
173
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
174
|
+
to_return(:body => fixture("existing_subscriber.xml"), :status => 403)
|
175
|
+
|
156
176
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42, :screen_name => "bob")
|
157
177
|
lambda{
|
158
178
|
@subscriber.create!
|
159
|
-
}.should raise_error(RSpreedly::Error::Forbidden)
|
179
|
+
}.should raise_error(RSpreedly::Error::Forbidden)
|
160
180
|
end
|
161
181
|
end
|
162
182
|
|
163
183
|
describe "#create" do
|
164
184
|
it "should return true if successful" do
|
165
|
-
|
185
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
186
|
+
to_return(:body => fixture("create_subscriber.xml"), :status => 201)
|
187
|
+
|
166
188
|
@subscriber = RSpreedly::Subscriber.new
|
167
189
|
@subscriber.customer_id = 42
|
168
190
|
@subscriber.screen_name = "bob"
|
169
191
|
@subscriber.create.should be_true
|
170
192
|
end
|
171
|
-
|
193
|
+
|
172
194
|
it "should return nil if the data is invalid" do
|
173
|
-
|
195
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
196
|
+
to_return(:body => fixture("invalid_subscriber.xml"), :status => 422)
|
197
|
+
|
174
198
|
@subscriber = RSpreedly::Subscriber.new
|
175
199
|
@subscriber.create.should be_nil
|
176
200
|
end
|
177
|
-
|
201
|
+
|
178
202
|
it "should return nil if there is already a subscriber with that ID" do
|
179
|
-
|
203
|
+
stub_request(:post, spreedly_url("/subscribers.xml")).
|
204
|
+
to_return(:body => fixture("existing_subscriber.xml"), :status => 403)
|
205
|
+
|
180
206
|
@subscriber = RSpreedly::Subscriber.new
|
181
207
|
@subscriber.customer_id = 42
|
182
208
|
@subscriber.screen_name = "bob"
|
@@ -186,234 +212,339 @@ describe RSpreedly::Subscriber do
|
|
186
212
|
|
187
213
|
describe "#update!" do
|
188
214
|
before(:each) do
|
189
|
-
@subscriber = RSpreedly::Subscriber.new
|
215
|
+
@subscriber = RSpreedly::Subscriber.new
|
190
216
|
end
|
191
|
-
|
217
|
+
|
192
218
|
describe "with basic information" do
|
193
219
|
it "should return true if successful" do
|
194
|
-
|
220
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
221
|
+
to_return(:status => 200)
|
222
|
+
|
195
223
|
@subscriber.customer_id = 42
|
196
224
|
@subscriber.email = "new@email.com"
|
197
225
|
@subscriber.update!.should be_true
|
198
226
|
end
|
199
|
-
|
227
|
+
|
200
228
|
it "should raise NotFound if the subscriber doesn't exist" do
|
201
|
-
|
229
|
+
stub_request(:put, spreedly_url("/subscribers/400.xml")).
|
230
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
231
|
+
|
202
232
|
@subscriber.customer_id = 400
|
203
233
|
lambda{
|
204
234
|
@subscriber.update!
|
205
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
206
|
-
end
|
207
|
-
|
235
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
236
|
+
end
|
237
|
+
|
208
238
|
it "should raise BadRequest if the data is invalid" do
|
209
|
-
|
210
|
-
|
239
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
240
|
+
to_return(:body => fixture("invalid_update.xml"), :status => 422)
|
241
|
+
|
242
|
+
@subscriber.customer_id = 42
|
211
243
|
lambda{
|
212
244
|
@subscriber.update!
|
213
|
-
}.should raise_error(RSpreedly::Error::BadRequest)
|
245
|
+
}.should raise_error(RSpreedly::Error::BadRequest)
|
214
246
|
end
|
215
247
|
end
|
216
|
-
|
248
|
+
|
217
249
|
describe "with new_customer_id" do
|
218
250
|
it "should return true if successful" do
|
219
|
-
|
251
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
252
|
+
to_return(:status => 200)
|
253
|
+
|
220
254
|
@subscriber.customer_id = 42
|
221
255
|
@subscriber.new_customer_id = 43
|
222
256
|
@subscriber.email = "new@email.com"
|
223
257
|
@subscriber.update!.should be_true
|
224
258
|
end
|
225
|
-
|
259
|
+
|
226
260
|
it "should raise NotFound if the subscriber doesn't exist" do
|
227
|
-
|
261
|
+
stub_request(:put, spreedly_url("/subscribers/400.xml")).
|
262
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
263
|
+
|
228
264
|
@subscriber.customer_id = 400
|
229
265
|
@subscriber.new_customer_id = 401
|
230
266
|
lambda{
|
231
267
|
@subscriber.update!
|
232
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
233
|
-
end
|
234
|
-
|
268
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
269
|
+
end
|
270
|
+
|
235
271
|
it "should raise BadRequest if the data is invalid" do
|
236
|
-
|
237
|
-
|
272
|
+
stub_request(:put, spreedly_url("/subscribers/.xml")).
|
273
|
+
to_return(:body => fixture("invalid_update.xml"), :status => 422)
|
274
|
+
|
275
|
+
@subscriber.new_customer_id = 43
|
238
276
|
lambda{
|
239
277
|
@subscriber.update!
|
240
|
-
}.should raise_error(RSpreedly::Error::BadRequest)
|
241
|
-
end
|
278
|
+
}.should raise_error(RSpreedly::Error::BadRequest)
|
279
|
+
end
|
242
280
|
end
|
243
|
-
|
281
|
+
|
244
282
|
describe "with payment information" do
|
245
283
|
before(:each) do
|
246
|
-
@subscriber.customer_id = 42
|
284
|
+
@subscriber.customer_id = 42
|
247
285
|
@subscriber.payment_method = RSpreedly::PaymentMethod::CreditCard.new(:number => "1233445", :verification_value => "234")
|
248
286
|
end
|
249
|
-
|
287
|
+
|
250
288
|
it "should return true if successful" do
|
251
|
-
|
289
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
290
|
+
to_return(:status => 200)
|
291
|
+
|
252
292
|
@subscriber.update!.should be_true
|
253
293
|
end
|
254
|
-
|
294
|
+
|
255
295
|
it "should raise NotFound if the subscriber doesn't exist" do
|
256
|
-
|
296
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
297
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
298
|
+
|
257
299
|
lambda{
|
258
300
|
@subscriber.update!
|
259
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
260
|
-
end
|
261
|
-
|
301
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
302
|
+
end
|
303
|
+
|
262
304
|
it "should raise BadRequest if the data is invalid" do
|
263
|
-
|
305
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
306
|
+
to_return(:body => fixture("invalid_update.xml"), :status => 422)
|
307
|
+
|
264
308
|
lambda{
|
265
309
|
@subscriber.update!
|
266
|
-
}.should raise_error(RSpreedly::Error::BadRequest)
|
267
|
-
end
|
310
|
+
}.should raise_error(RSpreedly::Error::BadRequest)
|
311
|
+
end
|
268
312
|
|
269
313
|
it "should raise Forbidden if the data is invalid" do
|
270
|
-
|
314
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
315
|
+
to_return(:body => fixture("invalid_update.xml"), :status => 403)
|
316
|
+
|
271
317
|
lambda{
|
272
318
|
@subscriber.update!
|
273
|
-
}.should raise_error(RSpreedly::Error::Forbidden)
|
274
|
-
end
|
319
|
+
}.should raise_error(RSpreedly::Error::Forbidden)
|
320
|
+
end
|
275
321
|
end
|
276
322
|
end
|
277
|
-
|
323
|
+
|
278
324
|
describe "#update" do
|
279
325
|
before(:each) do
|
280
|
-
@subscriber = RSpreedly::Subscriber.new
|
281
|
-
end
|
282
|
-
|
326
|
+
@subscriber = RSpreedly::Subscriber.new
|
327
|
+
end
|
328
|
+
|
283
329
|
describe "with basic information" do
|
284
330
|
it "should return true if successful" do
|
285
|
-
|
331
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
332
|
+
to_return(:status => 200)
|
333
|
+
|
286
334
|
@subscriber.customer_id = 42
|
287
335
|
@subscriber.email = "new@email.com"
|
288
336
|
@subscriber.update!.should be_true
|
289
337
|
end
|
290
|
-
|
338
|
+
|
291
339
|
it "should return nil if the subscriber doesn't exist" do
|
292
|
-
|
340
|
+
stub_request(:put, spreedly_url("/subscribers/400.xml")).
|
341
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
342
|
+
|
293
343
|
@subscriber.customer_id = 400
|
294
344
|
@subscriber.update.should be_nil
|
295
|
-
end
|
296
|
-
|
345
|
+
end
|
346
|
+
|
297
347
|
it "should return nil if the data is invalid" do
|
298
|
-
|
299
|
-
|
348
|
+
stub_request(:put, spreedly_url("/subscribers/42.xml")).
|
349
|
+
to_return(:body => fixture("invalid_update.xml"), :status => 422)
|
350
|
+
|
351
|
+
@subscriber.customer_id = 42
|
300
352
|
@subscriber.update.should be_nil
|
301
353
|
end
|
302
|
-
end
|
354
|
+
end
|
303
355
|
end
|
304
|
-
|
356
|
+
|
305
357
|
describe "#destroy" do
|
306
358
|
before(:each) do
|
307
359
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42)
|
308
|
-
end
|
309
|
-
|
360
|
+
end
|
361
|
+
|
310
362
|
it "should return nil if the subscriber doesn't exist" do
|
311
|
-
|
363
|
+
stub_request(:delete, spreedly_url("/subscribers/42.xml")).
|
364
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
365
|
+
|
312
366
|
@subscriber.destroy.should be_nil
|
313
|
-
end
|
314
|
-
|
367
|
+
end
|
368
|
+
|
315
369
|
it "should return true if successful" do
|
316
|
-
|
370
|
+
stub_request(:delete, spreedly_url("/subscribers/42.xml")).
|
371
|
+
to_return(:status => 200)
|
372
|
+
|
317
373
|
@subscriber.destroy.should be_true
|
318
|
-
end
|
374
|
+
end
|
319
375
|
end
|
320
376
|
|
321
377
|
describe "#comp_subscription" do
|
322
378
|
before(:each) do
|
323
379
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42, :feature_level => "Lowly")
|
324
|
-
@subscription = RSpreedly::ComplimentarySubscription.new(:duration_quantity => 42, :duration_units => "months", :feature_level => "Pro")
|
380
|
+
@subscription = RSpreedly::ComplimentarySubscription.new(:duration_quantity => 42, :duration_units => "months", :feature_level => "Pro")
|
325
381
|
end
|
326
|
-
|
382
|
+
|
327
383
|
it "should return true if successful" do
|
328
|
-
|
384
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_subscriptions.xml")).
|
385
|
+
to_return(:body => fixture("complimentary_success.xml"), :status => 201)
|
386
|
+
|
329
387
|
@subscriber.comp_subscription(@subscription).should be_true
|
330
|
-
end
|
331
|
-
|
388
|
+
end
|
389
|
+
|
332
390
|
it "should update the subscriber if successful" do
|
333
|
-
|
391
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_subscriptions.xml")).
|
392
|
+
to_return(:body => fixture("complimentary_success.xml"), :status => 201)
|
393
|
+
|
334
394
|
lambda{
|
335
395
|
@subscriber.comp_subscription(@subscription)
|
336
396
|
}.should change(@subscriber, :feature_level).to("Pro")
|
337
397
|
end
|
338
|
-
|
398
|
+
|
339
399
|
it "should raise NotFound if the subscriber doesn't exist" do
|
340
|
-
|
400
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_subscriptions.xml")).
|
401
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
402
|
+
|
341
403
|
lambda{
|
342
404
|
@subscriber.comp_subscription(@subscription)
|
343
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
405
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
344
406
|
end
|
345
|
-
|
407
|
+
|
346
408
|
it "should raise BadRequest if validation fails on the subscription" do
|
347
|
-
|
409
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_subscriptions.xml")).
|
410
|
+
to_return(:body => fixture("complimentary_not_valid.xml"), :status => 422)
|
411
|
+
|
348
412
|
lambda{
|
349
413
|
@subscriber.comp_subscription(@subscription)
|
350
414
|
}.should raise_error(RSpreedly::Error::BadRequest)
|
351
415
|
end
|
352
|
-
|
416
|
+
|
353
417
|
it "should raise Forbidden if the subscriber is active" do
|
354
|
-
|
418
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_subscriptions.xml")).
|
419
|
+
to_return(:body => fixture("complimentary_failed_active.xml"), :status => 403)
|
420
|
+
|
355
421
|
lambda{
|
356
422
|
@subscriber.comp_subscription(@subscription)
|
357
|
-
}.should raise_error(RSpreedly::Error::Forbidden)
|
423
|
+
}.should raise_error(RSpreedly::Error::Forbidden)
|
358
424
|
end
|
359
425
|
end
|
360
426
|
|
361
427
|
describe "#comp_time_extension" do
|
362
428
|
before(:each) do
|
363
429
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42, :feature_level => "Lowly")
|
364
|
-
@subscription = RSpreedly::ComplimentaryTimeExtension.new(:duration_quantity => 42, :duration_units => "months")
|
430
|
+
@subscription = RSpreedly::ComplimentaryTimeExtension.new(:duration_quantity => 42, :duration_units => "months")
|
365
431
|
end
|
366
|
-
|
432
|
+
|
367
433
|
it "should return true if successful" do
|
368
|
-
|
434
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_time_extensions.xml")).
|
435
|
+
to_return(:body => fixture("complimentary_success.xml"), :status => 201)
|
436
|
+
|
369
437
|
@subscriber.comp_time_extension(@subscription).should be_true
|
370
|
-
end
|
371
|
-
|
438
|
+
end
|
439
|
+
|
372
440
|
it "should update the subscriber if successful" do
|
373
|
-
|
441
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_time_extensions.xml")).
|
442
|
+
to_return(:body => fixture("complimentary_success.xml"), :status => 201)
|
443
|
+
|
374
444
|
lambda{
|
375
445
|
@subscriber.comp_time_extension(@subscription)
|
376
446
|
}.should change(@subscriber, :active_until).to(Time.parse("Sun Feb 21 19:04:28 UTC 2010"))
|
377
447
|
end
|
378
|
-
|
448
|
+
|
379
449
|
it "should raise NotFound if the subscriber doesn't exist" do
|
380
|
-
|
450
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_time_extensions.xml")).
|
451
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
452
|
+
|
381
453
|
lambda{
|
382
454
|
@subscriber.comp_time_extension(@subscription)
|
383
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
455
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
384
456
|
end
|
385
|
-
|
457
|
+
|
386
458
|
it "should raise BadRequest if validation fails on the subscription" do
|
387
|
-
|
459
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_time_extensions.xml")).
|
460
|
+
to_return(:body => fixture("complimentary_not_valid.xml"), :status => 422)
|
461
|
+
|
388
462
|
lambda{
|
389
463
|
@subscriber.comp_time_extension(@subscription)
|
390
464
|
}.should raise_error(RSpreedly::Error::BadRequest)
|
391
465
|
end
|
392
|
-
|
466
|
+
|
393
467
|
it "should raise Forbidden if the subscriber is inactive" do
|
394
|
-
|
468
|
+
stub_request(:post, spreedly_url("/subscribers/42/complimentary_time_extensions.xml")).
|
469
|
+
to_return(:body => fixture("complimentary_failed_inactive.xml"), :status => 403)
|
470
|
+
|
395
471
|
lambda{
|
396
472
|
@subscriber.comp_time_extension(@subscription)
|
397
|
-
}.should raise_error(RSpreedly::Error::Forbidden)
|
473
|
+
}.should raise_error(RSpreedly::Error::Forbidden)
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
describe "#credit" do
|
478
|
+
before(:each) do
|
479
|
+
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42, :feature_level => "Lowly")
|
480
|
+
@credit_amount = 5
|
481
|
+
end
|
482
|
+
|
483
|
+
it "should return true if successful" do
|
484
|
+
stub_request(:post, spreedly_url("/subscribers/42/credit.xml")).
|
485
|
+
to_return(:body => fixture("credit_success.xml"), :status => 201)
|
486
|
+
|
487
|
+
@subscriber.credit(@credit_amount).should be_true
|
488
|
+
@subscriber.store_credit.should == @credit_amount
|
489
|
+
end
|
490
|
+
|
491
|
+
it "should raise NotFound if the subscriber doesn't exist" do
|
492
|
+
stub_request(:post, spreedly_url("/subscribers/42/credit.xml")).
|
493
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
494
|
+
|
495
|
+
lambda{
|
496
|
+
@subscriber.credit(@credit_amount)
|
497
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
498
|
+
end
|
499
|
+
|
500
|
+
it "should raise BadRequest if validation fails on the subscription" do
|
501
|
+
stub_request(:post, spreedly_url("/subscribers/42/credit.xml")).
|
502
|
+
to_return(:body => fixture("credit_not_valid.xml"), :status => 422)
|
503
|
+
|
504
|
+
lambda{
|
505
|
+
@subscriber.credit(@credit_amount)
|
506
|
+
}.should raise_error(RSpreedly::Error::BadRequest)
|
507
|
+
end
|
508
|
+
|
509
|
+
it "should increment store_credit" do
|
510
|
+
stub_request(:post, spreedly_url("/subscribers/42/credit.xml")).
|
511
|
+
to_return(:body => fixture("credit_success.xml"), :status => 201)
|
512
|
+
|
513
|
+
@subscriber.store_credit = 5
|
514
|
+
@subscriber.credit(5).should be_true
|
515
|
+
@subscriber.store_credit.should == 10
|
516
|
+
end
|
517
|
+
|
518
|
+
it "should decrement store_credit" do
|
519
|
+
stub_request(:post, spreedly_url("/subscribers/42/credit.xml")).
|
520
|
+
to_return(:body => fixture("credit_success.xml"), :status => 201)
|
521
|
+
|
522
|
+
@subscriber.store_credit = 5
|
523
|
+
@subscriber.credit(-5).should be_true
|
524
|
+
@subscriber.store_credit.should == 0
|
398
525
|
end
|
399
526
|
end
|
400
|
-
|
527
|
+
|
401
528
|
describe "#stop_auto_renew" do
|
402
529
|
before(:each) do
|
403
530
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42)
|
404
|
-
end
|
405
|
-
|
531
|
+
end
|
532
|
+
|
406
533
|
it "should return true if successful" do
|
407
|
-
|
534
|
+
stub_request(:post, spreedly_url("/subscribers/42/stop_auto_renew.xml")).
|
535
|
+
to_return(:status => 200)
|
536
|
+
|
408
537
|
@subscriber.stop_auto_renew.should be_true
|
409
|
-
end
|
410
|
-
|
538
|
+
end
|
539
|
+
|
411
540
|
it "should raise NotFound if the subscriber doesn't exist" do
|
412
|
-
|
541
|
+
stub_request(:post, spreedly_url("/subscribers/42/stop_auto_renew.xml")).
|
542
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
543
|
+
|
413
544
|
lambda{
|
414
545
|
@subscriber.stop_auto_renew
|
415
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
416
|
-
end
|
546
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
547
|
+
end
|
417
548
|
end
|
418
549
|
|
419
550
|
describe "#subscribe_to_free_trial" do
|
@@ -421,118 +552,148 @@ describe RSpreedly::Subscriber do
|
|
421
552
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42)
|
422
553
|
@plan = RSpreedly::SubscriptionPlan.new(:id => 2533)
|
423
554
|
end
|
424
|
-
|
555
|
+
|
425
556
|
it "should return true if successful" do
|
426
|
-
|
557
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
558
|
+
to_return(:body => fixture("free_plan_success.xml"), :status => 200)
|
559
|
+
|
427
560
|
@subscriber.subscribe_to_free_trial(@plan).should be_true
|
428
|
-
end
|
429
|
-
|
561
|
+
end
|
562
|
+
|
430
563
|
it "should update the subscriber if successful" do
|
431
|
-
|
564
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
565
|
+
to_return(:body => fixture("free_plan_success.xml"), :status => 200)
|
566
|
+
|
432
567
|
lambda{
|
433
568
|
@subscriber.subscribe_to_free_trial(@plan)
|
434
569
|
}.should change(@subscriber, :grace_until).to(Time.parse("2013-05-02T00:07:37Z"))
|
435
570
|
end
|
436
|
-
|
571
|
+
|
437
572
|
it "should raise NotFound if the subscriber doesn't exist" do
|
438
|
-
|
573
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
574
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
575
|
+
|
439
576
|
lambda{
|
440
577
|
@subscriber.subscribe_to_free_trial(@plan)
|
441
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
578
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
442
579
|
end
|
443
|
-
|
580
|
+
|
444
581
|
it "should raise NotFound if the plan doesn't exist" do
|
445
|
-
|
582
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
583
|
+
to_return(:body => fixture("plan_not_found.xml"), :status => 404)
|
584
|
+
|
446
585
|
lambda{
|
447
586
|
@subscriber.subscribe_to_free_trial(@plan)
|
448
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
449
|
-
end
|
450
|
-
|
587
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
588
|
+
end
|
589
|
+
|
451
590
|
it "should raise BadRequest if no plan is specified" do
|
452
|
-
|
591
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
592
|
+
to_return(:body => fixture("free_plan_not_set.xml"), :status => 422)
|
593
|
+
|
453
594
|
@plan.id = nil
|
454
595
|
lambda{
|
455
596
|
@subscriber.subscribe_to_free_trial(@plan)
|
456
597
|
}.should raise_error(RSpreedly::Error::BadRequest)
|
457
598
|
end
|
458
|
-
|
599
|
+
|
459
600
|
it "should raise Forbidden if the subscriber isn't elligable" do
|
460
|
-
|
601
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
602
|
+
to_return(:body => fixture("free_plan_not_elligable.xml"), :status => 403)
|
603
|
+
|
461
604
|
lambda{
|
462
605
|
@subscriber.subscribe_to_free_trial(@plan)
|
463
|
-
}.should raise_error(RSpreedly::Error::Forbidden)
|
464
|
-
end
|
606
|
+
}.should raise_error(RSpreedly::Error::Forbidden)
|
607
|
+
end
|
465
608
|
|
466
609
|
it "should raise Forbidden if the plan isn't a free trial" do
|
467
|
-
|
610
|
+
stub_request(:post, spreedly_url("/subscribers/42/subscribe_to_free_trial.xml")).
|
611
|
+
to_return(:body => fixture("free_plan_not_free.xml"), :status => 403)
|
612
|
+
|
468
613
|
lambda{
|
469
614
|
@subscriber.subscribe_to_free_trial(@plan)
|
470
|
-
}.should raise_error(RSpreedly::Error::Forbidden)
|
471
|
-
end
|
615
|
+
}.should raise_error(RSpreedly::Error::Forbidden)
|
616
|
+
end
|
472
617
|
end
|
473
618
|
|
474
619
|
describe "#allow_free_trial" do
|
475
620
|
before(:each) do
|
476
621
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42)
|
477
622
|
end
|
478
|
-
|
623
|
+
|
479
624
|
it "should return true if successful" do
|
480
|
-
|
625
|
+
stub_request(:post, spreedly_url("/subscribers/42/allow_free_trial.xml")).
|
626
|
+
to_return(:body => fixture("free_plan_success.xml"), :status => 200)
|
627
|
+
|
481
628
|
@subscriber.allow_free_trial.should be_true
|
482
|
-
end
|
483
|
-
|
629
|
+
end
|
630
|
+
|
484
631
|
it "should update the subscriber if successful" do
|
485
|
-
|
632
|
+
stub_request(:post, spreedly_url("/subscribers/42/allow_free_trial.xml")).
|
633
|
+
to_return(:body => fixture("free_plan_success.xml"), :status => 200)
|
634
|
+
|
486
635
|
lambda{
|
487
636
|
@subscriber.allow_free_trial
|
488
637
|
}.should change(@subscriber, :grace_until).to(Time.parse("2013-05-02T00:07:37Z"))
|
489
638
|
end
|
490
|
-
|
639
|
+
|
491
640
|
it "should raise NotFound if the subscriber doesn't exist" do
|
492
|
-
|
641
|
+
stub_request(:post, spreedly_url("/subscribers/42/allow_free_trial.xml")).
|
642
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
643
|
+
|
493
644
|
lambda{
|
494
645
|
@subscriber.allow_free_trial
|
495
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
646
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
496
647
|
end
|
497
648
|
end
|
498
|
-
|
649
|
+
|
499
650
|
describe "#grant_lifetime_subscription" do
|
500
|
-
|
651
|
+
|
501
652
|
before(:each) do
|
502
653
|
@subscriber = RSpreedly::Subscriber.new(:customer_id => 42)
|
503
|
-
end
|
504
|
-
|
654
|
+
end
|
655
|
+
|
505
656
|
it "should return true if successful" do
|
506
|
-
|
657
|
+
stub_request(:post, spreedly_url("/subscribers/42/lifetime_complimentary_subscriptions.xml")).
|
658
|
+
to_return(:body => fixture("lifetime_subscription_success.xml"), :status => 200)
|
659
|
+
|
507
660
|
@subscriber.grant_lifetime_subscription("Something").should be_true
|
508
|
-
end
|
509
|
-
|
661
|
+
end
|
662
|
+
|
510
663
|
it "should update the subscriber's lifetime_subscription if successful" do
|
511
|
-
|
664
|
+
stub_request(:post, spreedly_url("/subscribers/42/lifetime_complimentary_subscriptions.xml")).
|
665
|
+
to_return(:body => fixture("lifetime_subscription_success.xml"), :status => 200)
|
666
|
+
|
512
667
|
lambda{
|
513
668
|
@subscriber.grant_lifetime_subscription("Something")
|
514
669
|
}.should change(@subscriber, :lifetime_subscription).to(true)
|
515
670
|
end
|
516
|
-
|
671
|
+
|
517
672
|
it "should update the subscriber's feature_level if successful" do
|
518
|
-
|
673
|
+
stub_request(:post, spreedly_url("/subscribers/42/lifetime_complimentary_subscriptions.xml")).
|
674
|
+
to_return(:body => fixture("lifetime_subscription_success.xml"), :status => 200)
|
675
|
+
|
519
676
|
lambda{
|
520
677
|
@subscriber.grant_lifetime_subscription("Something")
|
521
678
|
}.should change(@subscriber, :feature_level).to("Something")
|
522
|
-
end
|
523
|
-
|
679
|
+
end
|
680
|
+
|
524
681
|
it "should raise NotFound if the subscriber doesn't exist" do
|
525
|
-
|
682
|
+
stub_request(:post, spreedly_url("/subscribers/42/lifetime_complimentary_subscriptions.xml")).
|
683
|
+
to_return(:body => fixture("subscriber_not_found.xml"), :status => 404)
|
684
|
+
|
526
685
|
lambda{
|
527
686
|
@subscriber.grant_lifetime_subscription("Something")
|
528
|
-
}.should raise_error(RSpreedly::Error::NotFound)
|
687
|
+
}.should raise_error(RSpreedly::Error::NotFound)
|
529
688
|
end
|
530
|
-
|
689
|
+
|
531
690
|
it "should raise BadRequest if the feature level is blank" do
|
532
|
-
|
691
|
+
stub_request(:post, spreedly_url("/subscribers/42/lifetime_complimentary_subscriptions.xml")).
|
692
|
+
to_return(:body => fixture("feature_level_blank.xml"), :status => 422)
|
693
|
+
|
533
694
|
lambda{
|
534
695
|
@subscriber.grant_lifetime_subscription("Something")
|
535
|
-
}.should raise_error(RSpreedly::Error::BadRequest)
|
696
|
+
}.should raise_error(RSpreedly::Error::BadRequest)
|
536
697
|
end
|
537
698
|
end
|
538
699
|
end
|