From 99f5d1c0b2fa1bd4c82b79890fc4feface383cff Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 23 Sep 2025 18:13:09 +0200 Subject: [PATCH] check that within is not an alias for be_within when used with block --- .../_internal_password.html.erb | 1 - .../banner_component_spec.rb | 12 ++--- .../trial_teaser_component_spec.rb | 33 +++++-------- spec/support/within_check.rb | 47 +++++++++++++++++++ spec/views/users/edit.html.erb_spec.rb | 12 ++--- 5 files changed, 68 insertions(+), 37 deletions(-) create mode 100644 spec/support/within_check.rb diff --git a/app/views/users/form/authentication/_internal_password.html.erb b/app/views/users/form/authentication/_internal_password.html.erb index 407f9bc708e..75ca091ebb2 100644 --- a/app/views/users/form/authentication/_internal_password.html.erb +++ b/app/views/users/form/authentication/_internal_password.html.erb @@ -1,4 +1,3 @@ - <%= content_tag :div, data: { controller: "disable-when-checked", diff --git a/spec/components/enterprise_edition/banner_component_spec.rb b/spec/components/enterprise_edition/banner_component_spec.rb index 25383683334..f49428876f4 100644 --- a/spec/components/enterprise_edition/banner_component_spec.rb +++ b/spec/components/enterprise_edition/banner_component_spec.rb @@ -287,10 +287,8 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do end end - context "with a trial token" do - before do - allow(EnterpriseToken).to receive(:trialling?).and_return(true) - end + context "with a trial token", :with_ee_trial, with_ee: [:some_enterprise_feature] do + current_user { build(:admin) } it_behaves_like "renders the component" @@ -303,10 +301,8 @@ RSpec.describe EnterpriseEdition::BannerComponent, type: :component do expect(component[:class]).not_to include("op-enterprise-banner_medium") expect(component[:class]).not_to include("op-enterprise-banner_large") - within(component) do - expect(page).to have_css(".op-enterprise-banner--close_icon") - expect(page).to have_content("Buy now") - end + expect(component).to have_css(".op-enterprise-banner--dismiss") + expect(component).to have_content("Buy now") end end end diff --git a/spec/components/enterprise_edition/trial_teaser_component_spec.rb b/spec/components/enterprise_edition/trial_teaser_component_spec.rb index 56cf2683b70..b18dd4e43e1 100644 --- a/spec/components/enterprise_edition/trial_teaser_component_spec.rb +++ b/spec/components/enterprise_edition/trial_teaser_component_spec.rb @@ -35,45 +35,38 @@ RSpec.describe EnterpriseEdition::TrialTeaserComponent, type: :component do instance_double( EnterpriseToken, days_left: 7, - plan: :mocked + plan: :mocked, + trial?: true ) end before do - allow(EnterpriseToken).to receive(:active_trial_token).and_return(mock_token) + allow(EnterpriseToken).to receive(:active_tokens).and_return([mock_token]) end context "for an admin user" do - before do - admin_user = instance_double(User, admin?: true) - allow(User).to receive(:current).and_return(admin_user) - end + current_user { build(:admin) } it "renders the trial teaser" do render_inline(described_class.new) component = find_test_selector("op-enterprise-banner") - within(component) do - expect(page).to have_no_css(".op-enterprise-banner--close_icon") + expect(component).to have_no_css(".op-enterprise-banner--close_icon") - expect(page).to have_text("Buy now") - expect(page).to have_text("7 days left of mocked trial token") - expect(page).to have_text("You have access to all Mocked enterprise plan features.") + expect(component).to have_text("Buy now") + expect(component).to have_text("7 days left of mocked trial token") + expect(component).to have_text("You have access to all Mocked enterprise plan features.") - expect(page).to have_no_text("Start free trial") - expect(page).to have_no_text("Book now") - expect(page).to have_no_text("Upgrade now") - expect(page).to have_no_text("More information") - end + expect(component).to have_no_text("Start free trial") + expect(component).to have_no_text("Book now") + expect(component).to have_no_text("Upgrade now") + expect(component).to have_no_text("More information") end end context "for a non-admin user" do - before do - admin_user = instance_double(User, admin?: false) - allow(User).to receive(:current).and_return(admin_user) - end + current_user { build(:user) } it "nothing is rendered" do render_inline(described_class.new) diff --git a/spec/support/within_check.rb b/spec/support/within_check.rb new file mode 100644 index 00000000000..871ea8a5ee0 --- /dev/null +++ b/spec/support/within_check.rb @@ -0,0 +1,47 @@ +# 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. +#++ + +module WithinCheck + def within(*, **, &block) + if block + if respond_to?(:within_element) + within_element(*, **, &block) + else + fail "In this test `within` is only an alias for `be_within` rspec matcher, not capybara html scope helper" + end + else + be_within(*) + end + end +end + +RSpec.configure do |config| + config.include WithinCheck +end diff --git a/spec/views/users/edit.html.erb_spec.rb b/spec/views/users/edit.html.erb_spec.rb index cca32020649..1283854e698 100644 --- a/spec/views/users/edit.html.erb_spec.rb +++ b/spec/views/users/edit.html.erb_spec.rb @@ -194,10 +194,8 @@ RSpec.describe "users/edit" do it "shows the password and password confirmation fields" do render - within "#password_fields" do - expect(rendered).to have_text("Password") - expect(rendered).to have_text("Confirmation") - end + expect(rendered).to have_css("label", text: "Password") + expect(rendered).to have_css("label", text: "Confirmation") end end @@ -209,10 +207,8 @@ RSpec.describe "users/edit" do it "doesn't show the password and password confirmation fields" do render - within "#password_fields" do - expect(rendered).to have_no_text("Password") - expect(rendered).to have_no_text("Password confirmation") - end + expect(rendered).to have_no_css("label", text: "Password") + expect(rendered).to have_no_css("label", text: "Confirmation") end end end