From 41cd8c169c4330cf57a3e306f04d41d615ef85a8 Mon Sep 17 00:00:00 2001 From: Gerhard Schlager <mail@gerhard-schlager.at> Date: Thu, 3 May 2018 16:02:36 +0200 Subject: [PATCH] Add specs for inactive users report --- app/models/user.rb | 2 +- spec/models/report_spec.rb | 51 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 3b28ec9b480..d612353083d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -857,7 +857,7 @@ class User < ActiveRecord::Base FROM incoming_emails e WHERE e.user_id = u.id AND e.post_id IS NOT NULL AND - e.created_at BETWEEN (d.generated_date - INTERVAL '89 days') :: DATE AND d.generated_date + e.created_at :: DATE BETWEEN (d.generated_date - INTERVAL '89 days') :: DATE AND d.generated_date ) GROUP BY date_trunc('day', d.generated_date) :: DATE ORDER BY date_trunc('day', d.generated_date) :: DATE diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index 41273a69bb3..de386463f57 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -423,4 +423,55 @@ describe Report do expect(r.data[0][:y]).to eq(1) end end + + describe "inactive users" do + context "no activity" do + it "returns an empty report" do + report = Report.find('inactive_users') + expect(report.data).to be_blank + end + end + + context "with different users/visits" do + before do + freeze_time + + @arpit = Fabricate(:user, created_at: 200.days.ago) + @sam = Fabricate(:user, created_at: 200.days.ago) + @robin = Fabricate(:user, created_at: 200.days.ago) + @michael = Fabricate(:user, created_at: 200.days.ago) + @gerhard = Fabricate(:user, created_at: 200.days.ago) + end + + it "returns all users as inactive" do + report = Report.find('inactive_users') + expect(report.data.first[:y]).to eq(5) + expect(report.data.last[:y]).to eq(5) + end + + it "correctly returns inactive users" do + @arpit.user_visits.create(visited_at: 100.days.ago) + @sam.user_visits.create(visited_at: 100.days.ago) + report = Report.find('inactive_users') + expect(report.data.first[:y]).to eq(3) + expect(report.data.last[:y]).to eq(5) + + @arpit.user_visits.create(visited_at: 80.days.ago) + report = Report.find('inactive_users') + expect(report.data.first[:y]).to eq(3) + expect(report.data.last[:y]).to eq(4) + + @sam.user_visits.create(visited_at: 55.days.ago) + @robin.user_visits.create(visited_at: 50.days.ago) + report = Report.find('inactive_users') + expect(report.data.first[:y]).to eq(2) + expect(report.data.last[:y]).to eq(2) + + Fabricate(:incoming_email, user: @michael, created_at: 20.days.ago, post: Fabricate(:post, user: @michael)) + report = Report.find('inactive_users') + expect(report.data.first[:y]).to eq(2) + expect(report.data.last[:y]).to eq(1) + end + end + end end