# frozen_string_literal: true describe About do describe 'stats cache' do include_examples 'stats cacheable' end describe "#category_moderators" do let(:user) { Fabricate(:user) } let(:public_cat_moderator) { Fabricate(:user, last_seen_at: 1.month.ago) } let(:private_cat_moderator) { Fabricate(:user, last_seen_at: 2.month.ago) } let(:common_moderator) { Fabricate(:user, last_seen_at: 3.month.ago) } let(:common_moderator_2) { Fabricate(:user, last_seen_at: 4.month.ago) } let(:public_group) do group = Fabricate(:public_group) group.add(public_cat_moderator) group.add(common_moderator) group.add(common_moderator_2) group end let(:private_group) do group = Fabricate(:group) group.add(private_cat_moderator) group.add(common_moderator) group.add(common_moderator_2) group end let!(:public_cat) { Fabricate(:category, reviewable_by_group: public_group) } let!(:private_cat) { Fabricate(:private_category, group: private_group, reviewable_by_group: private_group) } it "lists moderators of the category that the current user can see" do results = About.new(private_cat_moderator).category_moderators expect(results.map(&:category_id)).to contain_exactly(public_cat.id, private_cat.id) expect(results.map(&:moderators).flatten.map(&:id).uniq).to contain_exactly( public_cat_moderator.id, common_moderator.id, common_moderator_2.id, private_cat_moderator.id ) [public_cat_moderator, user, nil].each do |u| results = About.new(u).category_moderators expect(results.map(&:category_id)).to contain_exactly(public_cat.id) expect(results.map(&:moderators).flatten.map(&:id)).to eq([ public_cat_moderator.id, common_moderator.id, common_moderator_2.id ]) end end it "limit category moderators when there are too many for perf reasons" do about = About.new(private_cat_moderator) about.category_mods_limit = 4 results = about.category_moderators expect(results.size).to eq(2) results.each do |res| expect(res.moderators.size).to eq(2) end end end end