discourse/spec/jobs/refresh_users_reviewable_counts_spec.rb
Ted Johansson 57ea56ee05
DEV: Remove full group refreshes from tests (#25414)
We have all these calls to Group.refresh_automatic_groups! littered throughout the tests. Including tests that are seemingly unrelated to groups. This is because automatic group memberships aren't fabricated when making a vanilla user. There are two places where you'd want to use this:

You have fabricated a user that needs a certain trust level (which is now based on group membership.)
You need the system user to have a certain trust level.
In the first case, we can pass refresh_auto_groups: true to the fabricator instead. This is a more lightweight operation that only considers a single user, instead of all users in all groups.

The second case is no longer a thing after #25400.
2024-01-25 14:28:26 +08:00

66 lines
2.4 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Jobs::RefreshUsersReviewableCounts do
fab!(:admin)
fab!(:moderator)
fab!(:user)
fab!(:group)
fab!(:topic)
fab!(:reviewable1) do
Fabricate(:reviewable, reviewable_by_group: group, reviewable_by_moderator: true, topic: topic)
end
fab!(:reviewable2) { Fabricate(:reviewable, reviewable_by_moderator: false) }
fab!(:reviewable3) { Fabricate(:reviewable, reviewable_by_moderator: true) }
before do
SiteSetting.enable_category_group_moderation = true
group.add(user)
topic.category.update!(reviewable_by_group: group)
end
describe "#execute" do
it "publishes reviewable counts for the members of the specified groups" do
messages =
MessageBus.track_publish do
described_class.new.execute(group_ids: [Group::AUTO_GROUPS[:staff]])
end
expect(messages.size).to eq(2)
moderator_message = messages.find { |m| m.user_ids == [moderator.id] }
expect(moderator_message.channel).to eq("/reviewable_counts/#{moderator.id}")
admin_message = messages.find { |m| m.user_ids == [admin.id] }
expect(moderator_message.channel).to eq("/reviewable_counts/#{moderator.id}")
messages = MessageBus.track_publish { described_class.new.execute(group_ids: [group.id]) }
expect(messages.size).to eq(1)
user_message = messages.find { |m| m.user_ids == [user.id] }
expect(user_message.channel).to eq("/reviewable_counts/#{user.id}")
end
it "published counts respect reviewables visibility" do
messages =
MessageBus.track_publish do
described_class.new.execute(group_ids: [Group::AUTO_GROUPS[:staff], group.id])
end
expect(messages.size).to eq(3)
admin_message = messages.find { |m| m.user_ids == [admin.id] }
moderator_message = messages.find { |m| m.user_ids == [moderator.id] }
user_message = messages.find { |m| m.user_ids == [user.id] }
expect(admin_message.channel).to eq("/reviewable_counts/#{admin.id}")
expect(admin_message.data).to eq(reviewable_count: 3, unseen_reviewable_count: 3)
expect(moderator_message.channel).to eq("/reviewable_counts/#{moderator.id}")
expect(moderator_message.data).to eq(reviewable_count: 2, unseen_reviewable_count: 2)
expect(user_message.channel).to eq("/reviewable_counts/#{user.id}")
expect(user_message.data).to eq(reviewable_count: 1, unseen_reviewable_count: 1)
end
end
end