Merge pull request #23683 from opf/bug/op-19423-hide-my-meetings-and-favourited-projects-widgets-for-anonymous-users

[OP-19423] Hide "my meetings" and "favourited projects" widgets for anonymous users
This commit is contained in:
Henriette Darge
2026-06-12 11:59:42 +02:00
committed by GitHub
4 changed files with 33 additions and 9 deletions
@@ -40,6 +40,10 @@ module Grids
def favorite_projects def favorite_projects
@favorite_projects ||= Project.visible.active.favorited_by(current_user).order(name: :asc).to_a @favorite_projects ||= Project.visible.active.favorited_by(current_user).order(name: :asc).to_a
end end
def render?
current_user.logged?
end
end end
end end
end end
@@ -33,11 +33,11 @@ require "rails_helper"
RSpec.describe Grids::Widgets::FavoriteProjects, type: :component do RSpec.describe Grids::Widgets::FavoriteProjects, type: :component do
include Rails.application.routes.url_helpers include Rails.application.routes.url_helpers
shared_let(:admin) { create(:admin) } shared_let(:user) { create(:admin) }
current_user { admin } current_user { user }
subject(:rendered_component) { render_inline(described_class.new(current_user: admin)) } subject(:rendered_component) { render_inline(described_class.new(current_user: user)) }
context "with no favorite projects" do context "with no favorite projects" do
let!(:visible_project) { create(:project, name: "Visible project") } let!(:visible_project) { create(:project, name: "Visible project") }
@@ -57,7 +57,7 @@ RSpec.describe Grids::Widgets::FavoriteProjects, type: :component do
let!(:visible_project) { create(:project, name: "Visible project") } let!(:visible_project) { create(:project, name: "Visible project") }
before do before do
create(:favorite, user: admin, favorited: favorite_project) create(:favorite, user:, favorited: favorite_project)
end end
it "renders only favorite projects and a link to all projects" do it "renders only favorite projects and a link to all projects" do
@@ -73,17 +73,17 @@ RSpec.describe Grids::Widgets::FavoriteProjects, type: :component do
end end
context "when a favorited project is not visible to the user" do context "when a favorited project is not visible to the user" do
let(:user) { create(:user) } let(:non_admin) { create(:user) }
let!(:favorite_project) { create(:public_project, name: "Visible favorite project") } let!(:favorite_project) { create(:public_project, name: "Visible favorite project") }
let!(:invisible_favorite_project) { create(:private_project, name: "Invisible favorite project") } let!(:invisible_favorite_project) { create(:private_project, name: "Invisible favorite project") }
current_user { user } current_user { non_admin }
subject(:rendered_component) { render_inline(described_class.new(current_user: user)) } subject(:rendered_component) { render_inline(described_class.new(current_user: user)) }
before do before do
create(:favorite, user:, favorited: favorite_project) create(:favorite, user: non_admin, favorited: favorite_project)
create(:favorite, user:, favorited: invisible_favorite_project) create(:favorite, user: non_admin, favorited: invisible_favorite_project)
end end
it "only renders visible favorite projects" do it "only renders visible favorite projects" do
@@ -92,4 +92,13 @@ RSpec.describe Grids::Widgets::FavoriteProjects, type: :component do
end end
end end
end end
context "when being an anonymous user" do
let!(:project) { create(:public_project, name: "Visible favorite project") }
let(:user) { create(:anonymous) }
it "renders nothing" do
expect(rendered_component.to_s).to be_empty
end
end
end end
@@ -64,7 +64,7 @@ module Meetings
end end
def render? def render?
global_scoped? || project.module_enabled?("meetings") current_user.logged? && (global_scoped? || project.module_enabled?("meetings"))
end end
private private
@@ -50,6 +50,8 @@ RSpec.describe Meetings::Widgets::Meetings, type: :component do
subject(:rendered_component) { render_component(project) } subject(:rendered_component) { render_component(project) }
before { login_as user }
shared_examples "empty-state without action" do shared_examples "empty-state without action" do
it "renders empty blankslate without action" do it "renders empty blankslate without action" do
expect(rendered_component).to have_test_selector("meetings-widget-empty") expect(rendered_component).to have_test_selector("meetings-widget-empty")
@@ -163,4 +165,13 @@ RSpec.describe Meetings::Widgets::Meetings, type: :component do
# User has only view_meetings permission now # User has only view_meetings permission now
it_behaves_like "empty-state without action" it_behaves_like "empty-state without action"
end end
context "when being an anonymous user" do
let(:project) { project_red }
let(:user) { create(:anonymous) }
it "renders nothing" do
expect(rendered_component.to_s).to be_empty
end
end
end end