From f480997754705f9dc820a0034e6907cc4f065036 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 11 Jan 2024 12:06:07 +1100 Subject: [PATCH 1/2] Spec admin enterprise menu helper There was no spec despite lots of logic. And I want to add more logic. --- spec/helpers/admin/enterprises_helper_spec.rb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 spec/helpers/admin/enterprises_helper_spec.rb diff --git a/spec/helpers/admin/enterprises_helper_spec.rb b/spec/helpers/admin/enterprises_helper_spec.rb new file mode 100644 index 0000000000..400822ee19 --- /dev/null +++ b/spec/helpers/admin/enterprises_helper_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe Admin::EnterprisesHelper, type: :helper do + let(:user) { build(:user) } + + before do + # Enable helper to use `#can?` method. + # We could extract this when other helper specs need it. + allow_any_instance_of(CanCan::ControllerAdditions).to receive(:current_ability) do + Spree::Ability.new(user) + end + allow(helper).to receive(:spree_current_user) { user } + end + + describe "#enterprise_side_menu_items" do + let(:enterprise) { build(:enterprise) } + let(:menu_items) { helper.enterprise_side_menu_items(enterprise) } + let(:visible_items) { menu_items.select { |i| i[:show] } } + + it "lists default items" do + expect(visible_items.pluck(:name)).to eq %w[ + primary_details address contact social about business_details images + vouchers enterprise_permissions inventory_settings tag_rules + shop_preferences users white_label + ] + end + + it "lists enabled features", feature: :connected_apps do + expect(visible_items.pluck(:name)).to include "connected_apps" + end + end +end From 78e42ec6647c6533c849c444ec312856cce0e0c4 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 11 Jan 2024 12:18:13 +1100 Subject: [PATCH 2/2] Show Connected Apps only to enterprise managers Super-admins also saw that tab but connecting an app doesn't work unless you are a manager of that enterprise. --- app/helpers/admin/enterprises_helper.rb | 3 ++- app/models/spree/ability.rb | 3 ++- spec/helpers/admin/enterprises_helper_spec.rb | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/helpers/admin/enterprises_helper.rb b/app/helpers/admin/enterprises_helper.rb index e6e6fdec0b..e78029c762 100644 --- a/app/helpers/admin/enterprises_helper.rb +++ b/app/helpers/admin/enterprises_helper.rb @@ -21,7 +21,8 @@ module Admin show_payment_methods = can?(:manage_payment_methods, enterprise) && is_shop show_enterprise_fees = can?(:manage_enterprise_fees, enterprise) && (is_shop || enterprise.is_primary_producer) - show_connected_apps = feature?(:connected_apps, spree_current_user, enterprise) + show_connected_apps = can?(:manage_connected_apps, enterprise) && + feature?(:connected_apps, spree_current_user, enterprise) build_enterprise_side_menu_items( is_shop:, diff --git a/app/models/spree/ability.rb b/app/models/spree/ability.rb index 37587a0111..f4d776bc02 100644 --- a/app/models/spree/ability.rb +++ b/app/models/spree/ability.rb @@ -147,7 +147,8 @@ module Spree end can [:manage_payment_methods, :manage_shipping_methods, - :manage_enterprise_fees], Enterprise do |enterprise| + :manage_enterprise_fees, + :manage_connected_apps], Enterprise do |enterprise| user.enterprises.include? enterprise end diff --git a/spec/helpers/admin/enterprises_helper_spec.rb b/spec/helpers/admin/enterprises_helper_spec.rb index 400822ee19..e7683a12b3 100644 --- a/spec/helpers/admin/enterprises_helper_spec.rb +++ b/spec/helpers/admin/enterprises_helper_spec.rb @@ -27,7 +27,8 @@ describe Admin::EnterprisesHelper, type: :helper do ] end - it "lists enabled features", feature: :connected_apps do + it "lists enabled features when allowed", feature: :connected_apps do + user.enterprises << enterprise expect(visible_items.pluck(:name)).to include "connected_apps" end end