discourse/spec/lib/unread_spec.rb
Krzysztof Kotlarek 09932738e5
FEATURE: whispers available for groups (#17170)
Before, whispers were only available for staff members.

Config has been changed to allow to configure privileged groups with access to whispers. Post migration was added to move from the old setting into the new one.

I considered having a boolean column `whisperer` on user model similar to `admin/moderator` for performance reason. Finally, I decided to keep looking for groups as queries are only done for current user and didn't notice any N+1 queries.
2022-06-30 10:18:12 +10:00

83 lines
2.4 KiB
Ruby

# frozen_string_literal: true
require 'unread'
describe Unread do
let(:whisperers_group) { Fabricate(:group) }
let(:user) { Fabricate(:user, id: 1, groups: [whisperers_group]) }
let(:topic) do
Fabricate.build(:topic,
posts_count: 13,
highest_staff_post_number: 15,
highest_post_number: 13,
id: 1)
end
let (:topic_user) do
Fabricate.build(:topic_user,
notification_level: TopicUser.notification_levels[:tracking],
topic_id: topic.id,
user_id: user.id)
end
def unread
Unread.new(topic, topic_user, Guardian.new(user))
end
describe 'staff counts' do
it 'should correctly return based on staff post number' do
SiteSetting.enable_whispers = true
user.admin = true
topic_user.last_read_post_number = 13
expect(unread.unread_posts).to eq(2)
end
end
describe 'unread_posts' do
it 'should have 0 unread posts if the user has read all posts' do
topic_user.last_read_post_number = 13
expect(unread.unread_posts).to eq(0)
end
it 'returns the right unread posts for a user' do
topic_user.last_read_post_number = 10
expect(unread.unread_posts).to eq(3)
end
it 'returns the right unread posts for a staff user' do
SiteSetting.enable_whispers = true
SiteSetting.whispers_allowed_groups = ""
user.admin = true
topic_user.last_read_post_number = 10
expect(unread.unread_posts).to eq(5)
end
it 'returns the right unread posts for a whisperer user' do
SiteSetting.enable_whispers = true
SiteSetting.whispers_allowed_groups = "#{whisperers_group.id}"
topic_user.last_read_post_number = 10
expect(unread.unread_posts).to eq(5)
end
it 'should have 0 unread posts if the user has read more posts than exist (deleted)' do
topic_user.last_read_post_number = 14
expect(unread.unread_posts).to eq(0)
end
it 'has 0 unread posts if the user has read 10 posts but is not tracking' do
topic_user.last_read_post_number = 10
topic_user.notification_level = TopicUser.notification_levels[:regular]
expect(unread.unread_posts).to eq(0)
end
it 'has 0 unread psots if the user has not seen the topic' do
topic_user.last_read_post_number = nil
expect(unread.unread_posts).to eq(0)
end
end
end