mirror of
https://github.com/discourse/discourse.git
synced 2024-11-27 15:23:38 +08:00
09932738e5
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.
83 lines
2.4 KiB
Ruby
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
|