discourse/spec/models/report_spec.rb
Luciano Sousa b3d769ff4f Update rspec syntax to v3
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
2015-01-05 11:59:30 -03:00

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