mirror of
https://github.com/discourse/discourse.git
synced 2025-02-06 14:07:32 +08:00
![Luciano Sousa](/assets/img/avatar_default.png)
update rspec syntax to v3 change syntax to rspec v3 oops. fix typo mailers classes with rspec3 syntax helpers with rspec3 syntax jobs with rspec3 syntax serializers with rspec3 syntax views with rspec3 syntax support to rspec3 syntax category spec with rspec3 syntax
178 lines
4.9 KiB
Ruby
178 lines
4.9 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Report do
|
|
|
|
describe 'visits report' do
|
|
let(:report) { Report.find('visits') }
|
|
|
|
context "no visits" do
|
|
it "returns an empty report" do
|
|
expect(report.data).to be_blank
|
|
end
|
|
end
|
|
|
|
context "with visits" do
|
|
let(:user) { Fabricate(:user) }
|
|
|
|
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)
|
|
end
|
|
|
|
it "returns a report with data" do
|
|
report.data.should be_present
|
|
end
|
|
|
|
it "returns today's visit" do
|
|
report.data.select { |v| v[:x].today? }.should be_present
|
|
end
|
|
end
|
|
end
|
|
|
|
[:signup, :topic, :post, :flag, :like, :email].each do |arg|
|
|
describe "#{arg} report" do
|
|
pluralized = arg.to_s.pluralize
|
|
|
|
let(:report) { Report.find(pluralized) }
|
|
|
|
context "no #{pluralized}" do
|
|
it 'returns an empty report' do
|
|
expect(report.data).to be_blank
|
|
end
|
|
end
|
|
|
|
context "with #{pluralized}" do
|
|
before(:each) do
|
|
Timecop.freeze
|
|
fabricator = case arg
|
|
when :signup
|
|
:user
|
|
when :email
|
|
:email_log
|
|
else
|
|
arg
|
|
end
|
|
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 }
|
|
|
|
context 'returns a report with data'
|
|
it 'with 30 days data' do
|
|
expect(report.data.count).to eq(4)
|
|
end
|
|
|
|
it 'has correct data sorted as asc' do
|
|
expect(report.data[0][:y]).to eq(1) # 30.days.ago
|
|
expect(report.data[1][:y]).to eq(1) # 2.days.ago
|
|
expect(report.data[2][:y]).to eq(1) # 1.day.ago
|
|
expect(report.data[3][:y]).to eq(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
|
|
|
|
describe 'private messages' do
|
|
let(:report) { Report.find('user_to_user_private_messages') }
|
|
|
|
it 'topic report should not include private messages' do
|
|
Fabricate(:private_message_topic, created_at: 1.hour.ago)
|
|
Fabricate(:topic, created_at: 1.hour.ago)
|
|
report = Report.find('topics')
|
|
expect(report.data[0][:y]).to eq(1)
|
|
expect(report.total).to eq(1)
|
|
end
|
|
|
|
it 'post report should not include private messages' do
|
|
Fabricate(:private_message_post, created_at: 1.hour.ago)
|
|
Fabricate(:post)
|
|
report = Report.find('posts')
|
|
report.data[0][:y].should == 1
|
|
report.total.should == 1
|
|
end
|
|
|
|
context 'no private messages' do
|
|
it 'returns an empty report' do
|
|
report.data.should be_blank
|
|
end
|
|
|
|
context 'some public posts' do
|
|
it 'returns an empty report' do
|
|
Fabricate(:post); Fabricate(:post)
|
|
report.data.should be_blank
|
|
report.total.should == 0
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'some private messages' do
|
|
before do
|
|
Fabricate(:private_message_post, created_at: 25.hours.ago)
|
|
Fabricate(:private_message_post, created_at: 1.hour.ago)
|
|
Fabricate(:private_message_post, created_at: 1.hour.ago)
|
|
end
|
|
|
|
it 'returns correct data' do
|
|
report.data[0][:y].should == 1
|
|
report.data[1][:y].should == 2
|
|
report.total.should == 3
|
|
end
|
|
|
|
context 'and some public posts' do
|
|
before do
|
|
Fabricate(:post); Fabricate(:post)
|
|
end
|
|
|
|
it 'returns correct data' do
|
|
report.data[0][:y].should == 1
|
|
report.data[1][:y].should == 2
|
|
report.total.should == 3
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'users by trust level report' do
|
|
let(:report) { Report.find('users_by_trust_level') }
|
|
|
|
context "no users" do
|
|
it "returns an empty report" do
|
|
report.data.should be_blank
|
|
end
|
|
end
|
|
|
|
context "with users at different trust levels" do
|
|
before do
|
|
3.times { Fabricate(:user, trust_level: TrustLevel[0]) }
|
|
2.times { Fabricate(:user, trust_level: TrustLevel[2]) }
|
|
Fabricate(:user, trust_level: TrustLevel[4])
|
|
end
|
|
|
|
it "returns a report with data" do
|
|
report.data.should be_present
|
|
report.data.find {|d| d[:x] == TrustLevel[0]}[:y].should == 3
|
|
report.data.find {|d| d[:x] == TrustLevel[2]}[:y].should == 2
|
|
report.data.find {|d| d[:x] == TrustLevel[4]}[:y].should == 1
|
|
end
|
|
end
|
|
end
|
|
end
|