2019-04-29 20:27:42 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-07-27 22:27:38 -04:00
|
|
|
RSpec.describe DirectoryItem do
|
2016-01-08 05:53:52 -05:00
|
|
|
describe "#period_types" do
|
2022-07-27 12:14:14 -04:00
|
|
|
context "when verifying enum sequence" do
|
2016-01-08 05:53:52 -05:00
|
|
|
before { @period_types = DirectoryItem.period_types }
|
|
|
|
|
|
|
|
it "'all' should be at 1st position" do
|
|
|
|
expect(@period_types[:all]).to eq(1)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "'quarterly' should be at 6th position" do
|
|
|
|
expect(@period_types[:quarterly]).to eq(6)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-07-27 12:14:14 -04:00
|
|
|
describe "inactive and silenced users" do
|
2017-12-18 20:53:59 -05:00
|
|
|
it "removes silenced users correctly" do
|
|
|
|
post = create_post
|
|
|
|
DirectoryItem.refresh_period!(:daily)
|
|
|
|
|
|
|
|
count = DirectoryItem.where(user_id: post.user_id).count
|
|
|
|
expect(count).to eq(1)
|
|
|
|
|
|
|
|
post.user.update_columns(active: false)
|
|
|
|
DirectoryItem.refresh_period!(:daily)
|
|
|
|
|
|
|
|
count = DirectoryItem.where(user_id: post.user_id).count
|
|
|
|
expect(count).to eq(0)
|
|
|
|
|
|
|
|
post.user.update_columns(active: true)
|
|
|
|
DirectoryItem.refresh_period!(:daily)
|
|
|
|
|
|
|
|
count = DirectoryItem.where(user_id: post.user_id).count
|
|
|
|
expect(count).to eq(1)
|
|
|
|
|
|
|
|
post.user.update_columns(silenced_till: 1.year.from_now)
|
|
|
|
DirectoryItem.refresh_period!(:daily)
|
|
|
|
|
|
|
|
count = DirectoryItem.where(user_id: post.user_id).count
|
|
|
|
expect(count).to eq(0)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-07-27 12:14:14 -04:00
|
|
|
describe ".refresh!" do
|
2016-03-02 02:23:29 -05:00
|
|
|
before do
|
2024-02-29 19:07:35 -05:00
|
|
|
freeze_time_safe
|
2019-01-03 12:03:01 -05:00
|
|
|
UserActionManager.enable
|
2016-03-02 02:23:29 -05:00
|
|
|
end
|
|
|
|
|
2017-11-20 00:43:53 -05:00
|
|
|
it "creates the record for the user and handles likes" do
|
2017-08-09 15:57:35 -04:00
|
|
|
post = create_post
|
2017-11-20 00:43:53 -05:00
|
|
|
_post2 = create_post(topic_id: post.topic_id, user: post.user)
|
|
|
|
|
|
|
|
user2 = Fabricate(:user)
|
|
|
|
|
2019-01-03 12:03:01 -05:00
|
|
|
PostActionCreator.like(user2, post)
|
2017-11-20 00:43:53 -05:00
|
|
|
|
2015-03-16 15:14:33 -04:00
|
|
|
DirectoryItem.refresh!
|
2017-11-20 00:43:53 -05:00
|
|
|
|
|
|
|
item1 =
|
|
|
|
DirectoryItem.find_by(period_type: DirectoryItem.period_types[:all], user_id: post.user_id)
|
|
|
|
item2 =
|
|
|
|
DirectoryItem.find_by(period_type: DirectoryItem.period_types[:all], user_id: user2.id)
|
|
|
|
|
|
|
|
expect(item1.topic_count).to eq(1)
|
|
|
|
expect(item1.likes_received).to eq(1)
|
|
|
|
expect(item1.post_count).to eq(1)
|
|
|
|
|
|
|
|
expect(item2.likes_given).to eq(1)
|
|
|
|
|
|
|
|
post.topic.trash!
|
|
|
|
|
|
|
|
DirectoryItem.refresh!
|
|
|
|
|
|
|
|
item1 =
|
|
|
|
DirectoryItem.find_by(period_type: DirectoryItem.period_types[:all], user_id: post.user_id)
|
|
|
|
item2 =
|
|
|
|
DirectoryItem.find_by(period_type: DirectoryItem.period_types[:all], user_id: user2.id)
|
|
|
|
|
|
|
|
expect(item1.likes_given).to eq(0)
|
|
|
|
expect(item1.likes_received).to eq(0)
|
|
|
|
expect(item1.post_count).to eq(0)
|
|
|
|
expect(item1.topic_count).to eq(0)
|
2015-03-16 15:14:33 -04:00
|
|
|
end
|
|
|
|
|
2017-08-09 15:57:35 -04:00
|
|
|
it "handles users with no activity" do
|
|
|
|
post = nil
|
|
|
|
|
2019-10-03 21:11:03 -04:00
|
|
|
freeze_time(2.years.ago)
|
|
|
|
|
|
|
|
post = create_post
|
|
|
|
# Create records for that activity
|
|
|
|
DirectoryItem.refresh!
|
|
|
|
|
|
|
|
freeze_time(2.years.from_now)
|
2017-08-09 15:57:35 -04:00
|
|
|
|
|
|
|
DirectoryItem.refresh!
|
|
|
|
%i[yearly monthly weekly daily quarterly].each do |period|
|
|
|
|
directory_item =
|
|
|
|
DirectoryItem
|
|
|
|
.where(period_type: DirectoryItem.period_types[period])
|
|
|
|
.where(user_id: post.user.id)
|
|
|
|
.first
|
|
|
|
expect(directory_item.topic_count).to eq(0)
|
|
|
|
expect(directory_item.post_count).to eq(0)
|
|
|
|
end
|
|
|
|
|
|
|
|
directory_item =
|
|
|
|
DirectoryItem
|
|
|
|
.where(period_type: DirectoryItem.period_types[:all])
|
|
|
|
.where(user_id: post.user.id)
|
|
|
|
.first
|
|
|
|
expect(directory_item.topic_count).to eq(1)
|
|
|
|
end
|
|
|
|
|
2018-11-12 09:30:05 -05:00
|
|
|
it "creates directory item with correct activity count per period_type" do
|
|
|
|
user = Fabricate(:user)
|
|
|
|
UserVisit.create(
|
|
|
|
user_id: user.id,
|
|
|
|
visited_at: 1.minute.ago,
|
|
|
|
posts_read: 1,
|
|
|
|
mobile: false,
|
|
|
|
time_read: 1,
|
|
|
|
)
|
|
|
|
UserVisit.create(
|
|
|
|
user_id: user.id,
|
|
|
|
visited_at: 2.days.ago,
|
|
|
|
posts_read: 1,
|
|
|
|
mobile: false,
|
|
|
|
time_read: 1,
|
|
|
|
)
|
|
|
|
UserVisit.create(
|
|
|
|
user_id: user.id,
|
|
|
|
visited_at: 1.week.ago,
|
|
|
|
posts_read: 1,
|
|
|
|
mobile: false,
|
|
|
|
time_read: 1,
|
|
|
|
)
|
|
|
|
UserVisit.create(
|
|
|
|
user_id: user.id,
|
|
|
|
visited_at: 1.month.ago,
|
|
|
|
posts_read: 1,
|
|
|
|
mobile: false,
|
|
|
|
time_read: 1,
|
2023-01-09 06:18:21 -05:00
|
|
|
)
|
2018-11-12 09:30:05 -05:00
|
|
|
|
|
|
|
DirectoryItem.refresh!
|
|
|
|
|
|
|
|
daily_directory_item =
|
|
|
|
DirectoryItem
|
|
|
|
.where(period_type: DirectoryItem.period_types[:daily])
|
|
|
|
.where(user_id: user.id)
|
|
|
|
.first
|
|
|
|
|
|
|
|
expect(daily_directory_item.days_visited).to eq(1)
|
|
|
|
|
|
|
|
weekly_directory_item =
|
|
|
|
DirectoryItem
|
|
|
|
.where(period_type: DirectoryItem.period_types[:weekly])
|
|
|
|
.where(user_id: user.id)
|
|
|
|
.first
|
|
|
|
|
|
|
|
expect(weekly_directory_item.days_visited).to eq(2)
|
|
|
|
|
|
|
|
monthly_directory_item =
|
|
|
|
DirectoryItem
|
|
|
|
.where(period_type: DirectoryItem.period_types[:monthly])
|
|
|
|
.where(user_id: user.id)
|
|
|
|
.first
|
|
|
|
|
|
|
|
expect(monthly_directory_item.days_visited).to eq(3)
|
|
|
|
end
|
|
|
|
|
2022-07-27 12:14:14 -04:00
|
|
|
context "when must_approve_users is true" do
|
2019-09-11 15:18:17 -04:00
|
|
|
before { SiteSetting.must_approve_users = true }
|
|
|
|
|
|
|
|
it "doesn't include user who hasn't been approved" do
|
|
|
|
user = Fabricate(:user, approved: false)
|
|
|
|
DirectoryItem.refresh!
|
|
|
|
expect(DirectoryItem.where(user_id: user.id).count).to eq(0)
|
|
|
|
end
|
|
|
|
end
|
2015-03-16 15:14:33 -04:00
|
|
|
end
|
|
|
|
end
|