From 5fad22ce2a1c22d27c96318c95a786f8761d3ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Thu, 10 Oct 2024 13:28:31 +0200 Subject: [PATCH] Hide send mail action menu in meetings when closed https://community.openproject.org/work_packages/58326 --- .../meetings/header_component.html.erb | 3 +- .../meetings/header_component_spec.rb | 80 +++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 modules/meeting/spec/components/meetings/header_component_spec.rb diff --git a/modules/meeting/app/components/meetings/header_component.html.erb b/modules/meeting/app/components/meetings/header_component.html.erb index 1d327152d6a9..eca42d28072c 100644 --- a/modules/meeting/app/components/meetings/header_component.html.erb +++ b/modules/meeting/app/components/meetings/header_component.html.erb @@ -49,8 +49,7 @@ item.with_leading_visual_icon(icon: :download) end - if User.current.allowed_in_project?(:send_meeting_agendas_notification, @meeting.project - ) + if @meeting.open? && User.current.allowed_in_project?(:send_meeting_agendas_notification, @meeting.project) menu.with_item(label: t('meeting.label_mail_all_participants'), href: notify_meeting_path(@meeting), form_arguments: { method: :post, data: { turbo: 'false' } }) do |item| diff --git a/modules/meeting/spec/components/meetings/header_component_spec.rb b/modules/meeting/spec/components/meetings/header_component_spec.rb new file mode 100644 index 000000000000..c5b72897b729 --- /dev/null +++ b/modules/meeting/spec/components/meetings/header_component_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +require "rails_helper" + +RSpec.describe Meetings::HeaderComponent, type: :component do + let(:project) { build_stubbed(:project) } + let(:meeting) { build_stubbed(:meeting, project:) } + let(:user) { build_stubbed(:user) } + + subject do + render_inline(described_class.new(meeting:, project:)) + page + end + + before do + login_as(user) + end + + describe "send mail invitation" do + context "when allowed" do + before do + mock_permissions_for(user) do |mock| + mock.allow_in_project(:send_meeting_agendas_notification, project:) + end + end + + context 'when open' do + let(:meeting) { build_stubbed(:meeting, project:, state: :open) } + + it "renders the mail invitation" do + expect(subject).to have_text I18n.t('meeting.label_mail_all_participants') + end + end + + context 'when closed' do + let(:meeting) { build_stubbed(:meeting, project:, state: :closed) } + + it "does not render the mail invitation" do + expect(subject).not_to have_text I18n.t('meeting.label_mail_all_participants') + end + end + end + + context "when not allowed" do + let(:meeting) { build_stubbed(:meeting, project:, state: :open) } + + it "does not render the mail invitation" do + expect(subject).not_to have_text I18n.t('meeting.label_mail_all_participants') + end + end + end +end