Extract test for last_billing_cycle

pull/11809/head
Rafa de la Torre 8 years ago
parent 877fb345d6
commit 6ffb98c742

@ -236,6 +236,7 @@ WORKING_SPECS_9 = \
spec/models/carto/invitation_spec.rb \
spec/models/carto/user_service_spec.rb \
spec/models/carto/user_spec.rb \
spec/models/carto/helpers/billing_cycle_spec.rb \
spec/models/carto/user_table_spec.rb \
spec/models/carto/organization_spec.rb \
spec/models/carto/visualization_export_spec.rb \

@ -1,3 +1,5 @@
require 'active_support/time'
module Carto
module BillingCycle
def last_billing_cycle

@ -0,0 +1,98 @@
require_relative '../../../../app/models/carto/helpers/billing_cycle'
require 'ostruct'
require 'timecop'
describe Carto::BillingCycle do
describe :last_billing_cycle do
class MyDummyUser < OpenStruct;
include Carto::BillingCycle
end
before(:each) do
@user = MyDummyUser.new
end
after(:each) do
@user = nil
end
[
{ today: '2017-02-21', expected: '2017-01-23' },
{ today: '2017-01-01', expected: '2016-12-03' },
{ today: '2017-01-31', expected: '2017-01-02' },
{ today: '2017-02-01', expected: '2017-01-03' },
{ today: '2017-02-28', expected: '2017-01-30' },
{ today: '2017-03-01', expected: '2017-02-28' },
{ today: '2017-03-31', expected: '2017-03-02' }
].each do |example|
today = example[:today]
expected = example[:expected]
it "arbitrarily assumes period_end_date.day = 29.days.ago.day if no period_end_date" \
" (today = #{today}, expected = #{expected})" do
# See commit 83850567
# Maybe better to throw an error if that happens?
@user.period_end_date = nil
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
[
{ today: '2017-03-21', period_end_date: '2017-02-21', expected: '2017-03-21' },
{ today: '2017-03-21', period_end_date: '2017-02-01', expected: '2017-03-01' },
{ today: '2017-02-21', period_end_date: '2017-01-01', expected: '2017-02-01' },
{ today: '2017-01-31', period_end_date: '2016-10-31', expected: '2017-01-31' },
{ today: '2017-03-01', period_end_date: '2016-10-01', expected: '2017-03-01' }
].each do |example|
today = example[:today]
period_end_date = example[:period_end_date]
expected = example[:expected]
it "returns the current month if period_end_date.day <= today.day" \
" (today = #{today}, period_end_date = #{period_end_date}, expected = #{expected})" do
@user.period_end_date = Date.parse(period_end_date)
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
[
{ today: '2017-03-20', period_end_date: '2017-02-21', expected: '2017-02-21' },
{ today: '2017-03-01', period_end_date: '2017-02-21', expected: '2017-02-21' },
{ today: '2017-02-01', period_end_date: '2017-01-21', expected: '2017-01-21' },
{ today: '2017-01-30', period_end_date: '2016-10-31', expected: '2016-12-31' },
{ today: '2017-03-01', period_end_date: '2016-10-02', expected: '2017-02-02' }
].each do |example|
today = example[:today]
period_end_date = example[:period_end_date]
expected = example[:expected]
it "returns the previous month if period_end_date.day > today.day" \
" (today = #{today}, period_end_date = #{period_end_date}, expected = #{expected})" do
@user.period_end_date = Date.parse(period_end_date)
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
[
{ today: '2017-03-21', period_end_date: '2017-01-31', expected: '2017-02-28' },
# 2020 is a leap year
{ today: '2020-03-21', period_end_date: '2017-01-31', expected: '2020-02-29' },
{ today: '2017-05-21', period_end_date: '2017-01-31', expected: '2017-04-30' }
].each do |example|
today = example[:today]
period_end_date = example[:period_end_date]
expected = example[:expected]
it "returns the previous valid day when dealing with 28, 29 or 30-day month corner cases" \
" (today = #{today}, period_end_date = #{period_end_date}, expected = #{expected})" do
@user.period_end_date = Date.parse(period_end_date)
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
end
end

@ -2,7 +2,6 @@
require 'mock_redis'
require 'active_support/time'
require 'timecop'
require_relative '../spec_helper'
require_relative '../../services/dataservices-metrics/lib/geocoder_usage_metrics'
require_relative '../../services/dataservices-metrics/lib/observatory_snapshot_usage_metrics'
@ -795,93 +794,4 @@ shared_examples_for "user models" do
user.default_basemap['name'].should eq 'GMaps Roadmap'
end
end
describe :last_billing_cycle do
before(:all) do
@user = create_user
end
after(:all) do
@user.destroy
end
[
{ today: '2017-02-21', expected: '2017-01-23' },
{ today: '2017-01-01', expected: '2016-12-03' },
{ today: '2017-01-31', expected: '2017-01-02' },
{ today: '2017-02-01', expected: '2017-01-03' },
{ today: '2017-02-28', expected: '2017-01-30' },
{ today: '2017-03-01', expected: '2017-02-28' },
{ today: '2017-03-31', expected: '2017-03-02' }
].each do |example|
today = example[:today]
expected = example[:expected]
it "arbitrarily assumes period_end_date.day = 29.days.ago.day if no period_end_date" \
" (today = #{today}, expected = #{expected})" do
# See commit 83850567
# Maybe better to throw an error if that happens?
@user.period_end_date = nil
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
[
{ today: '2017-03-21', period_end_date: '2017-02-21', expected: '2017-03-21' },
{ today: '2017-03-21', period_end_date: '2017-02-01', expected: '2017-03-01' },
{ today: '2017-02-21', period_end_date: '2017-01-01', expected: '2017-02-01' },
{ today: '2017-01-31', period_end_date: '2016-10-31', expected: '2017-01-31' },
{ today: '2017-03-01', period_end_date: '2016-10-01', expected: '2017-03-01' }
].each do |example|
today = example[:today]
period_end_date = example[:period_end_date]
expected = example[:expected]
it "returns the current month if period_end_date.day <= today.day" \
" (today = #{today}, period_end_date = #{period_end_date}, expected = #{expected})" do
@user.period_end_date = Date.parse(period_end_date)
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
[
{ today: '2017-03-20', period_end_date: '2017-02-21', expected: '2017-02-21' },
{ today: '2017-03-01', period_end_date: '2017-02-21', expected: '2017-02-21' },
{ today: '2017-02-01', period_end_date: '2017-01-21', expected: '2017-01-21' },
{ today: '2017-01-30', period_end_date: '2016-10-31', expected: '2016-12-31' },
{ today: '2017-03-01', period_end_date: '2016-10-02', expected: '2017-02-02' }
].each do |example|
today = example[:today]
period_end_date = example[:period_end_date]
expected = example[:expected]
it "returns the previous month if period_end_date.day > today.day" \
" (today = #{today}, period_end_date = #{period_end_date}, expected = #{expected})" do
@user.period_end_date = Date.parse(period_end_date)
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
[
{ today: '2017-03-21', period_end_date: '2017-01-31', expected: '2017-02-28' },
# 2020 is a leap year
{ today: '2020-03-21', period_end_date: '2017-01-31', expected: '2020-02-29' },
{ today: '2017-05-21', period_end_date: '2017-01-31', expected: '2017-04-30' }
].each do |example|
today = example[:today]
period_end_date = example[:period_end_date]
expected = example[:expected]
it "returns the previous valid day when dealing with 28, 29 or 30-day month corner cases" \
" (today = #{today}, period_end_date = #{period_end_date}, expected = #{expected})" do
@user.period_end_date = Date.parse(period_end_date)
Timecop.freeze(Date.parse(today)) do
@user.last_billing_cycle.should eq Date.parse(expected)
end
end
end
end
end

Loading…
Cancel
Save