mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
New: can_see_groups? method for better perf
This commit is contained in:
committed by
Guo Xiang Tan
parent
e7ee556e87
commit
2fa8df7cd2
@@ -3038,6 +3038,115 @@ describe Guardian do
|
||||
|
||||
end
|
||||
|
||||
describe '#can_see_groups?' do
|
||||
it 'correctly handles owner visibile groups' do
|
||||
group = Group.new(name: 'group', visibility_level: Group.visibility_levels[:owners])
|
||||
|
||||
member = Fabricate(:user)
|
||||
group.add(member)
|
||||
group.save!
|
||||
|
||||
owner = Fabricate(:user)
|
||||
group.add_owner(owner)
|
||||
group.reload
|
||||
|
||||
expect(Guardian.new(admin).can_see_groups?([group])).to eq(true)
|
||||
expect(Guardian.new(moderator).can_see_groups?([group])).to eq(false)
|
||||
expect(Guardian.new(member).can_see_groups?([group])).to eq(false)
|
||||
expect(Guardian.new.can_see_groups?([group])).to eq(false)
|
||||
expect(Guardian.new(owner).can_see_groups?([group])).to eq(true)
|
||||
end
|
||||
|
||||
it 'correctly handles the case where the user does not own every group' do
|
||||
group = Group.new(name: 'group', visibility_level: Group.visibility_levels[:owners])
|
||||
group2 = Group.new(name: 'group2', visibility_level: Group.visibility_levels[:owners])
|
||||
group2.save!
|
||||
|
||||
member = Fabricate(:user)
|
||||
group.add(member)
|
||||
group.save!
|
||||
|
||||
owner = Fabricate(:user)
|
||||
group.add_owner(owner)
|
||||
group.reload
|
||||
|
||||
expect(Guardian.new(admin).can_see_groups?([group, group2])).to eq(true)
|
||||
expect(Guardian.new(moderator).can_see_groups?([group, group2])).to eq(false)
|
||||
expect(Guardian.new(member).can_see_groups?([group, group2])).to eq(false)
|
||||
expect(Guardian.new.can_see_groups?([group, group2])).to eq(false)
|
||||
expect(Guardian.new(owner).can_see_groups?([group, group2])).to eq(false)
|
||||
end
|
||||
|
||||
it 'correctly handles staff visibile groups' do
|
||||
group = Group.new(name: 'group', visibility_level: Group.visibility_levels[:staff])
|
||||
|
||||
member = Fabricate(:user)
|
||||
group.add(member)
|
||||
group.save!
|
||||
|
||||
owner = Fabricate(:user)
|
||||
group.add_owner(owner)
|
||||
group.reload
|
||||
|
||||
expect(Guardian.new(member).can_see_groups?([group])).to eq(false)
|
||||
expect(Guardian.new(admin).can_see_groups?([group])).to eq(true)
|
||||
expect(Guardian.new(moderator).can_see_groups?([group])).to eq(true)
|
||||
expect(Guardian.new(owner).can_see_groups?([group])).to eq(true)
|
||||
expect(Guardian.new.can_see_groups?([group])).to eq(false)
|
||||
end
|
||||
|
||||
it 'correctly handles member visibile groups' do
|
||||
group = Group.new(name: 'group', visibility_level: Group.visibility_levels[:members])
|
||||
|
||||
member = Fabricate(:user)
|
||||
group.add(member)
|
||||
group.save!
|
||||
|
||||
owner = Fabricate(:user)
|
||||
group.add_owner(owner)
|
||||
group.reload
|
||||
|
||||
expect(Guardian.new(moderator).can_see_groups?([group])).to eq(false)
|
||||
expect(Guardian.new.can_see_groups?([group])).to eq(false)
|
||||
expect(Guardian.new(admin).can_see_groups?([group])).to eq(true)
|
||||
expect(Guardian.new(member).can_see_groups?([group])).to eq(true)
|
||||
expect(Guardian.new(owner).can_see_groups?([group])).to eq(true)
|
||||
end
|
||||
|
||||
it 'correctly handles the case where the user is not a member of every group' do
|
||||
group1 = Group.new(name: 'group', visibility_level: Group.visibility_levels[:members])
|
||||
group2 = Group.new(name: 'group2', visibility_level: Group.visibility_levels[:members])
|
||||
group2.save!
|
||||
|
||||
member = Fabricate(:user)
|
||||
group1.add(member)
|
||||
group1.save!
|
||||
|
||||
owner = Fabricate(:user)
|
||||
group1.add_owner(owner)
|
||||
group1.reload
|
||||
|
||||
expect(Guardian.new(moderator).can_see_groups?([group1, group2])).to eq(false)
|
||||
expect(Guardian.new.can_see_groups?([group1, group2])).to eq(false)
|
||||
expect(Guardian.new(admin).can_see_groups?([group1, group2])).to eq(true)
|
||||
expect(Guardian.new(member).can_see_groups?([group1, group2])).to eq(false)
|
||||
expect(Guardian.new(owner).can_see_groups?([group1, group2])).to eq(false)
|
||||
end
|
||||
|
||||
it 'correctly handles public groups' do
|
||||
group = Group.new(name: 'group', visibility_level: Group.visibility_levels[:public])
|
||||
|
||||
expect(Guardian.new.can_see_groups?([group])).to eq(true)
|
||||
end
|
||||
|
||||
it 'correctly handles there case where not every group is public' do
|
||||
group1 = Group.new(name: 'group', visibility_level: Group.visibility_levels[:public])
|
||||
group2 = Group.new(name: 'group', visibility_level: Group.visibility_levels[:private])
|
||||
|
||||
expect(Guardian.new.can_see_groups?([group1, group2])).to eq(false)
|
||||
end
|
||||
end
|
||||
|
||||
context 'topic featured link category restriction' do
|
||||
before { SiteSetting.topic_featured_link_enabled = true }
|
||||
let(:guardian) { Guardian.new }
|
||||
|
||||
Reference in New Issue
Block a user