FIX: use utc time when generate reports; set boundary

This commit is contained in:
Erick Guan
2014-12-30 22:06:15 +08:00
parent 8cfd14120c
commit 97b3914b70
9 changed files with 127 additions and 54 deletions

View File

@@ -14,7 +14,7 @@ describe Report do
context "with visits" do
let(:user) { Fabricate(:user) }
before do
before(:each) do
user.user_visits.create(visited_at: 1.hour.ago)
user.user_visits.create(visited_at: 1.day.ago)
user.user_visits.create(visited_at: 2.days.ago)
@@ -24,7 +24,7 @@ describe Report do
report.data.should be_present
end
it "return today's visit" do
it "returns today's visit" do
report.data.select { |v| v[:x].today? }.should be_present
end
end
@@ -43,7 +43,8 @@ describe Report do
end
context "with #{pluralized}" do
before do
before(:each) do
Timecop.freeze
fabricator = case arg
when :signup
:user
@@ -52,18 +53,42 @@ describe Report do
else
arg
end
Fabricate(fabricator, created_at: 25.hours.ago)
Fabricate(fabricator)
Fabricate(fabricator, created_at: 1.hours.ago)
Fabricate(fabricator, created_at: 1.hours.ago)
Fabricate(fabricator, created_at: 1.day.ago)
Fabricate(fabricator, created_at: 2.days.ago)
Fabricate(fabricator, created_at: 30.days.ago)
Fabricate(fabricator, created_at: 35.days.ago)
end
after(:each) { Timecop.return }
it 'returns correct data' do
report.data[0][:y].should == 1
report.data[1][:y].should == 2
context 'returns a report with data'
it 'with 30 days data' do
report.data.count.should == 4
end
it 'has correct data sorted as asc' do
report.data[0][:y].should == 1 # 30.days.ago
report.data[1][:y].should == 1 # 2.days.ago
report.data[2][:y].should == 1 # 1.day.ago
report.data[3][:y].should == 3 # today
end
it "returns today's data" do
report.data.select { |v| v[:x].today? }.should be_present
end
it 'returns total data' do
report.total.should == 7
end
it "returns previous 30 day's data" do
report.prev30Days.should == 1
end
end
end
end
end
describe 'private messages' do
let(:report) { Report.find('user_to_user_private_messages') }
@@ -149,5 +174,4 @@ describe Report do
end
end
end
end

View File

@@ -1232,6 +1232,26 @@ describe Topic do
end
end
describe '#listable_count_per_day' do
before(:each) do
Timecop.freeze
Fabricate(:topic)
Fabricate(:topic, created_at: 1.day.ago)
Fabricate(:topic, created_at: 1.day.ago)
Fabricate(:topic, created_at: 2.days.ago)
Fabricate(:topic, created_at: 4.days.ago)
end
after(:each) do
Timecop.return
end
let(:listable_topics_count_per_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.utc.to_date => 1 } }
it 'collect closed interval listable topics count' do
Topic.listable_count_per_day(2.days.ago, Time.now).should include(listable_topics_count_per_day)
Topic.listable_count_per_day(2.days.ago, Time.now).should_not include({4.days.ago.to_date => 1})
end
end
describe '#secure_category?' do
let(:category){ Category.new }

View File

@@ -6,6 +6,25 @@ describe User do
it { should validate_presence_of :username }
it { should validate_presence_of :email }
describe '#count_by_signup_date' do
before(:each) do
User.destroy_all
Timecop.freeze
Fabricate(:user)
Fabricate(:user, created_at: 1.day.ago)
Fabricate(:user, created_at: 1.day.ago)
Fabricate(:user, created_at: 2.days.ago)
Fabricate(:user, created_at: 4.days.ago)
end
after(:each) { Timecop.return }
let(:signups_by_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.utc.to_date => 1} }
it 'collect closed interval signups' do
User.count_by_signup_date(2.days.ago, Time.now).should include(signups_by_day)
User.count_by_signup_date(2.days.ago, Time.now).should_not include({4.days.ago.to_date => 1})
end
end
context '.enqueue_welcome_message' do
let(:user) { Fabricate(:user) }

View File

@@ -1,21 +1,41 @@
require 'spec_helper'
describe UserVisit do
let(:user) { Fabricate(:user) }
let(:other_user) { Fabricate(:user) }
it 'can ensure consistency' do
u = Fabricate(:user)
u.update_visit_record!(2.weeks.ago.to_date)
u.last_seen_at = 2.weeks.ago
u.save
u.update_visit_record!(1.day.ago.to_date)
user.update_visit_record!(2.weeks.ago.to_date)
user.last_seen_at = 2.weeks.ago
user.save
user.update_visit_record!(1.day.ago.to_date)
u.reload
u.user_stat.days_visited.should == 2
user.reload
user.user_stat.days_visited.should == 2
u.user_stat.days_visited = 1
u.save
user.user_stat.days_visited = 1
user.save
UserVisit.ensure_consistency!
u.reload
u.user_stat.days_visited.should == 2
user.reload
user.user_stat.days_visited.should == 2
end
describe '#by_day' do
before(:each) do
Timecop.freeze
user.user_visits.create(visited_at: Time.now)
user.user_visits.create(visited_at: 1.day.ago)
other_user.user_visits.create(visited_at: 1.day.ago)
user.user_visits.create(visited_at: 2.days.ago)
user.user_visits.create(visited_at: 4.days.ago)
end
after(:each) { Timecop.return }
let(:visits_by_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.to_date => 1 } }
it 'collect closed interval visits' do
UserVisit.by_day(2.days.ago, Time.now).should include(visits_by_day)
UserVisit.by_day(2.days.ago, Time.now).should_not include({4.days.ago.to_date => 1})
end
end
end