saucy 0.10.8 → 0.10.9
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/CHANGELOG.md +4 -0
- data/lib/saucy/subscription.rb +6 -7
- data/spec/models/subscription_spec.rb +14 -8
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/lib/saucy/subscription.rb
CHANGED
@@ -86,10 +86,10 @@ module Saucy
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def update_subscription_cache!
|
89
|
+
zone = ActiveSupport::TimeZone[Saucy::Configuration.merchant_account_time_zone]
|
89
90
|
flush_cache :subscription
|
90
91
|
update_attribute(:subscription_status, subscription.status)
|
91
|
-
update_attribute(:next_billing_date,
|
92
|
-
Saucy::Configuration.merchant_account_time_zone))
|
92
|
+
update_attribute(:next_billing_date, zone.parse(subscription.next_billing_date))
|
93
93
|
end
|
94
94
|
|
95
95
|
def changing_plan?(attributes)
|
@@ -198,9 +198,9 @@ module Saucy
|
|
198
198
|
def create_subscription
|
199
199
|
result = Braintree::Subscription.create(subscription_attributes)
|
200
200
|
if result.success?
|
201
|
+
zone = ActiveSupport::TimeZone[Saucy::Configuration.merchant_account_time_zone]
|
201
202
|
self.subscription_token = result.subscription.id
|
202
|
-
self.next_billing_date =
|
203
|
-
Saucy::Configuration.merchant_account_time_zone)
|
203
|
+
self.next_billing_date = zone.parse(result.subscription.next_billing_date)
|
204
204
|
self.subscription_status = result.subscription.status
|
205
205
|
else
|
206
206
|
false
|
@@ -226,10 +226,9 @@ module Saucy
|
|
226
226
|
def update_subscriptions!
|
227
227
|
recently_billed = where("next_billing_date <= ?", Time.now)
|
228
228
|
recently_billed.each do |account|
|
229
|
+
zone = ActiveSupport::TimeZone[Saucy::Configuration.merchant_account_time_zone]
|
229
230
|
account.subscription_status = account.subscription.status
|
230
|
-
account.next_billing_date = account.subscription.next_billing_date
|
231
|
-
account.next_billing_date = Time.parse(account.subscription.next_billing_date).in_time_zone(
|
232
|
-
Saucy::Configuration.merchant_account_time_zone)
|
231
|
+
account.next_billing_date = zone.parse(account.subscription.next_billing_date)
|
233
232
|
account.save!
|
234
233
|
if account.past_due?
|
235
234
|
BillingMailer.problem(account, account.subscription.transactions.last).deliver!
|
@@ -351,6 +351,9 @@ describe Account, "with a paid subscription" do
|
|
351
351
|
end
|
352
352
|
|
353
353
|
before do
|
354
|
+
@old_env_tz = ENV['TZ']
|
355
|
+
ENV['TZ'] = "Europe/Paris"
|
356
|
+
|
354
357
|
Saucy::Configuration.merchant_account_time_zone = "Eastern Time (US & Canada)"
|
355
358
|
subject.next_billing_date = "2011-08-15"
|
356
359
|
subject.save!
|
@@ -365,6 +368,10 @@ describe Account, "with a paid subscription" do
|
|
365
368
|
subject.reload.next_billing_date.should == Time.parse("2011-09-15 00:00 -0400")
|
366
369
|
end
|
367
370
|
|
371
|
+
after do
|
372
|
+
ENV['TZ'] = @old_env_tz
|
373
|
+
end
|
374
|
+
|
368
375
|
it "does not update accounts if their billing date hasn't elapsed from the merchant account's perspective" do
|
369
376
|
Time.stubs(:now => Time.parse("2011-09-15 02:00 -0000"))
|
370
377
|
Account.update_subscriptions!
|
@@ -381,6 +388,7 @@ describe Account, "with a paid subscription" do
|
|
381
388
|
context "and an active subscription due 2 months from now" do
|
382
389
|
let(:subscription) { FakeBraintree.subscriptions[subject.subscription_token] }
|
383
390
|
let(:next_billing_date_string) { 2.months.from_now.to_s(:braintree_date) }
|
391
|
+
let(:zone) { ActiveSupport::TimeZone[Saucy::Configuration.merchant_account_time_zone] }
|
384
392
|
|
385
393
|
before do
|
386
394
|
subscription["status"] = Braintree::Subscription::Status::Active
|
@@ -394,8 +402,7 @@ describe Account, "with a paid subscription" do
|
|
394
402
|
Timecop.travel(subject.next_billing_date + 1.day) do
|
395
403
|
Account.update_subscriptions!
|
396
404
|
subject.reload.subscription_status.should == Braintree::Subscription::Status::Active
|
397
|
-
subject.next_billing_date.should ==
|
398
|
-
Saucy::Configuration.merchant_account_time_zone)
|
405
|
+
subject.next_billing_date.should == zone.parse(next_billing_date_string)
|
399
406
|
end
|
400
407
|
end
|
401
408
|
|
@@ -464,6 +471,8 @@ describe Account, "with a paid subscription that is past due" do
|
|
464
471
|
subject.reload
|
465
472
|
end
|
466
473
|
|
474
|
+
let(:zone) { ActiveSupport::TimeZone[Saucy::Configuration.merchant_account_time_zone] }
|
475
|
+
|
467
476
|
it "retries the subscription charge and updates the subscription when the billing information is correctly updated" do
|
468
477
|
next_billing_date_string = 1.day.from_now.to_s(:braintree_date)
|
469
478
|
subscription = FakeBraintree.subscriptions[subject.subscription_token]
|
@@ -486,8 +495,7 @@ describe Account, "with a paid subscription that is past due" do
|
|
486
495
|
:expiration_year => 2012).should be
|
487
496
|
|
488
497
|
subject.reload.subscription_status.should == Braintree::Subscription::Status::Active
|
489
|
-
subject.next_billing_date.should ==
|
490
|
-
Saucy::Configuration.merchant_account_time_zone)
|
498
|
+
subject.next_billing_date.should == zone.parse(next_billing_date_string)
|
491
499
|
end
|
492
500
|
|
493
501
|
it "retries the subscription charge and updates the subscription when the payment processing fails" do
|
@@ -513,8 +521,7 @@ describe Account, "with a paid subscription that is past due" do
|
|
513
521
|
|
514
522
|
subject.errors[:card_number].should include("was denied by the payment processor with the message: no good")
|
515
523
|
subject.reload.subscription_status.should == Braintree::Subscription::Status::PastDue
|
516
|
-
subject.next_billing_date.should ==
|
517
|
-
Saucy::Configuration.merchant_account_time_zone)
|
524
|
+
subject.next_billing_date.should == zone.parse(next_billing_date_string)
|
518
525
|
end
|
519
526
|
|
520
527
|
it "retries the subscription charge and updates the subscription when the settlement fails" do
|
@@ -540,8 +547,7 @@ describe Account, "with a paid subscription that is past due" do
|
|
540
547
|
|
541
548
|
subject.errors[:card_number].should include("no good")
|
542
549
|
subject.reload.subscription_status.should == Braintree::Subscription::Status::PastDue
|
543
|
-
subject.next_billing_date.should ==
|
544
|
-
Saucy::Configuration.merchant_account_time_zone)
|
550
|
+
subject.next_billing_date.should == zone.parse(next_billing_date_string)
|
545
551
|
end
|
546
552
|
end
|
547
553
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: saucy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.10.
|
5
|
+
version: 0.10.9
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- thoughtbot, inc.
|
@@ -287,7 +287,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
287
287
|
requirements:
|
288
288
|
- - ">="
|
289
289
|
- !ruby/object:Gem::Version
|
290
|
-
hash:
|
290
|
+
hash: -2922648281484856857
|
291
291
|
segments:
|
292
292
|
- 0
|
293
293
|
version: "0"
|