From fbd1901132b01ef06810d04a59ac8255eabeb398 Mon Sep 17 00:00:00 2001 From: Aaron Contreras Date: Tue, 14 Nov 2023 11:22:27 -0500 Subject: [PATCH] Add enterprise restriction spec to safeguard banner behavior --- .../share/enterprise_restriction_spec.rb | 73 +++++++++++++++++++ .../components/work_packages/share_modal.rb | 11 ++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 spec/features/work_packages/share/enterprise_restriction_spec.rb diff --git a/spec/features/work_packages/share/enterprise_restriction_spec.rb b/spec/features/work_packages/share/enterprise_restriction_spec.rb new file mode 100644 index 000000000000..76b1cfccd1d4 --- /dev/null +++ b/spec/features/work_packages/share/enterprise_restriction_spec.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +# -- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2023 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 'Work Package Sharing Enterprise Restriction', + :js, :with_cuprite, + with_flag: { work_package_sharing: true } do + shared_let(:view_work_package_role) { create(:view_work_package_role) } + shared_let(:comment_work_package_role) { create(:comment_work_package_role) } + shared_let(:edit_work_package_role) { create(:edit_work_package_role) } + + shared_let(:sharer_role) do + create(:project_role, permissions: %i[view_work_packages + view_shared_work_packages + share_work_packages]) + end + + shared_let(:sharer) { create(:user, firstname: 'Sharer', lastname: 'User') } + + shared_let(:project) { create(:project, members: { sharer => [sharer_role] }) } + shared_let(:work_package) { create(:work_package, project:) } + + let(:work_package_page) { Pages::FullWorkPackage.new(work_package) } + let(:share_modal) { Components::WorkPackages::ShareModal.new(work_package) } + + current_user { sharer } + + before do + work_package_page.visit! + click_button 'Share' + share_modal.expect_open + end + + context 'without an enterprise token' do + it 'renders an upsale banner' do + share_modal.expect_upsale_banner + end + end + + context 'with an enterprise token', with_ee: %i[work_package_sharing] do + it 'renders the share modal' do + share_modal.expect_blankslate + end + end +end diff --git a/spec/support/components/work_packages/share_modal.rb b/spec/support/components/work_packages/share_modal.rb index d8ef2741e02a..3bda399e64b1 100644 --- a/spec/support/components/work_packages/share_modal.rb +++ b/spec/support/components/work_packages/share_modal.rb @@ -234,7 +234,9 @@ def change_role(user, role_name) within user_row(user) do find('[data-test-selector="op-share-wp-update-role"]').click - find('.ActionListContent', text: role_name).click + within '.ActionListWrap' do + click_button role_name + end end end @@ -338,6 +340,13 @@ def select_not_existing_user_option(email) select_text: "Send invite to\"#{email}\"", results_selector: 'body' end + + def expect_upsale_banner + within modal_element do + expect(page) + .to have_text(I18n.t(:label_enterprise_addon)) + end + end end end end