diff options
Diffstat (limited to 'spec/lib/sidebars')
13 files changed, 222 insertions, 14 deletions
diff --git a/spec/lib/sidebars/concerns/super_sidebar_panel_spec.rb b/spec/lib/sidebars/concerns/super_sidebar_panel_spec.rb index f33cb4ab7f6..b1051c1387b 100644 --- a/spec/lib/sidebars/concerns/super_sidebar_panel_spec.rb +++ b/spec/lib/sidebars/concerns/super_sidebar_panel_spec.rb @@ -83,6 +83,16 @@ RSpec.describe Sidebars::Concerns::SuperSidebarPanel, feature_category: :navigat expect(uncategorized_menu.renderable_items).to eq([]) end + it 'replaces placeholder Menu Items in the defined super_sidebar_parent' do + menu_foo.insert_item_before(:exists, nil_menu_item) + allow(menu_item).to receive(:item_id).and_return(:nil_item) + + subject.transform_old_menus(current_menus, menu_bar) + + expect(menu_foo.renderable_items).to eq([menu_item, existing_item]) + expect(uncategorized_menu.renderable_items).to eq([]) + end + it 'adds Menu Items to defined super_sidebar_parent, before super_sidebar_before' do allow(menu_item).to receive(:super_sidebar_before).and_return(:exists) subject.transform_old_menus(current_menus, menu_bar) diff --git a/spec/lib/sidebars/menu_spec.rb b/spec/lib/sidebars/menu_spec.rb index 7577eeb8478..74ed344dd24 100644 --- a/spec/lib/sidebars/menu_spec.rb +++ b/spec/lib/sidebars/menu_spec.rb @@ -238,6 +238,47 @@ RSpec.describe Sidebars::Menu, feature_category: :navigation do end end + describe '#replace_placeholder' do + let(:item1) { Sidebars::NilMenuItem.new(item_id: :foo1) } + let(:item2) { Sidebars::MenuItem.new(item_id: :foo2, title: 'foo2', link: 'foo2', active_routes: {}) } + let(:item3) { Sidebars::NilMenuItem.new(item_id: :foo3) } + + subject { menu.instance_variable_get(:@items) } + + before do + menu.add_item(item1) + menu.add_item(item2) + menu.add_item(item3) + end + + context 'when a NilMenuItem reference element exists' do + it 'replaces the reference element with the provided item' do + item = Sidebars::MenuItem.new(item_id: :foo1, title: 'target', active_routes: {}, link: 'target') + menu.replace_placeholder(item) + + expect(subject).to eq [item, item2, item3] + end + end + + context 'when a MenuItem reference element exists' do + it 'does not replace the reference element and adds to the end of the list' do + item = Sidebars::MenuItem.new(item_id: :foo2, title: 'target', active_routes: {}, link: 'target') + menu.replace_placeholder(item) + + expect(subject).to eq [item1, item2, item3, item] + end + end + + context 'when reference element does not exist' do + it 'adds the element to the end of the list' do + item = Sidebars::MenuItem.new(item_id: :new_element, title: 'target', active_routes: {}, link: 'target') + menu.replace_placeholder(item) + + expect(subject).to eq [item1, item2, item3, item] + end + end + end + describe '#remove_element' do let(:item1) { Sidebars::MenuItem.new(title: 'foo1', link: 'foo1', active_routes: {}, item_id: :foo1) } let(:item2) { Sidebars::MenuItem.new(title: 'foo2', link: 'foo2', active_routes: {}, item_id: :foo2) } diff --git a/spec/lib/sidebars/projects/menus/repository_menu_spec.rb b/spec/lib/sidebars/projects/menus/repository_menu_spec.rb index b0631aacdb9..1aa0ea30d0a 100644 --- a/spec/lib/sidebars/projects/menus/repository_menu_spec.rb +++ b/spec/lib/sidebars/projects/menus/repository_menu_spec.rb @@ -6,7 +6,11 @@ RSpec.describe Sidebars::Projects::Menus::RepositoryMenu, feature_category: :sou let_it_be(:project) { create(:project, :repository) } let(:user) { project.first_owner } - let(:context) { Sidebars::Projects::Context.new(current_user: user, container: project, current_ref: 'master') } + let(:is_super_sidebar) { false } + let(:context) do + Sidebars::Projects::Context.new(current_user: user, container: project, current_ref: 'master', + is_super_sidebar: is_super_sidebar) + end subject { described_class.new(context) } @@ -36,9 +40,8 @@ RSpec.describe Sidebars::Projects::Menus::RepositoryMenu, feature_category: :sou end context 'for menu items' do - shared_examples_for 'repository menu item link for' do |item_id| + shared_examples_for 'repository menu item link for' do let(:ref) { 'master' } - let(:item_id) { item_id } subject { described_class.new(context).renderable_items.find { |e| e.item_id == item_id }.link } using RSpec::Parameterized::TableSyntax @@ -77,10 +80,34 @@ RSpec.describe Sidebars::Projects::Menus::RepositoryMenu, feature_category: :sou end end + shared_examples_for 'repository menu item with different super sidebar title' do |title, super_sidebar_title| + subject { described_class.new(context).renderable_items.find { |e| e.item_id == item_id } } + + specify do + expect(subject.title).to eq(title) + end + + context 'when inside the super sidebar' do + let(:is_super_sidebar) { true } + + specify do + expect(subject.title).to eq(super_sidebar_title) + end + end + end + + describe 'Files' do + let_it_be(:item_id) { :files } + + it_behaves_like 'repository menu item with different super sidebar title', + _('Files'), + _('Repository') + end + describe 'Commits' do let_it_be(:item_id) { :commits } - it_behaves_like 'repository menu item link for', :commits do + it_behaves_like 'repository menu item link for' do let(:route) { "/#{project.full_path}/-/commits/#{ref}" } end end @@ -103,16 +130,22 @@ RSpec.describe Sidebars::Projects::Menus::RepositoryMenu, feature_category: :sou project.project_feature.update!(analytics_access_level: ProjectFeature::ENABLED) end - it_behaves_like 'repository menu item link for', :contributors do + it_behaves_like 'repository menu item link for' do let(:route) { "/#{project.full_path}/-/graphs/#{ref}" } end end end describe 'Network' do - it_behaves_like 'repository menu item link for', :graphs do + let_it_be(:item_id) { :graphs } + + it_behaves_like 'repository menu item link for' do let(:route) { "/#{project.full_path}/-/network/#{ref}" } end + + it_behaves_like 'repository menu item with different super sidebar title', + _('Graph'), + _('Repository graph') end end end diff --git a/spec/lib/sidebars/projects/menus/snippets_menu_spec.rb b/spec/lib/sidebars/projects/menus/snippets_menu_spec.rb index c5fd407dae9..9d50eb6f817 100644 --- a/spec/lib/sidebars/projects/menus/snippets_menu_spec.rb +++ b/spec/lib/sidebars/projects/menus/snippets_menu_spec.rb @@ -13,8 +13,7 @@ RSpec.describe Sidebars::Projects::Menus::SnippetsMenu, feature_category: :navig let(:menu) { subject } let(:extra_attrs) do { - super_sidebar_parent: ::Sidebars::Projects::Menus::RepositoryMenu, - super_sidebar_before: :contributors, + super_sidebar_parent: ::Sidebars::Projects::SuperSidebarMenus::CodeMenu, item_id: :project_snippets } end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/analyze_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/analyze_menu_spec.rb new file mode 100644 index 00000000000..b8d74665042 --- /dev/null +++ b/spec/lib/sidebars/projects/super_sidebar_menus/analyze_menu_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::SuperSidebarMenus::AnalyzeMenu, feature_category: :navigation do + subject { described_class.new({}) } + + let(:items) { subject.instance_variable_get(:@items) } + + it 'has title and sprite_icon' do + expect(subject.title).to eq(s_("Navigation|Analyze")) + expect(subject.sprite_icon).to eq("chart") + end + + it 'defines list of NilMenuItem placeholders' do + expect(items.map(&:class).uniq).to eq([Sidebars::NilMenuItem]) + expect(items.map(&:item_id)).to eq([ + :dashboards_analytics, + :cycle_analytics, + :contributors, + :ci_cd_analytics, + :repository_analytics, + :code_review, + :merge_requests, + :issues, + :insights + ]) + end +end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/build_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/build_menu_spec.rb new file mode 100644 index 00000000000..96e54d358c5 --- /dev/null +++ b/spec/lib/sidebars/projects/super_sidebar_menus/build_menu_spec.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::SuperSidebarMenus::BuildMenu, feature_category: :navigation do + subject { described_class.new({}) } + + it 'has title and sprite_icon' do + expect(subject.title).to eq(s_("Navigation|Build")) + expect(subject.sprite_icon).to eq("rocket") + end +end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/code_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/code_menu_spec.rb new file mode 100644 index 00000000000..e307ff91234 --- /dev/null +++ b/spec/lib/sidebars/projects/super_sidebar_menus/code_menu_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::SuperSidebarMenus::CodeMenu, feature_category: :navigation do + subject { described_class.new({}) } + + let(:items) { subject.instance_variable_get(:@items) } + + it 'has title and sprite_icon' do + expect(subject.title).to eq(s_("Navigation|Code")) + expect(subject.sprite_icon).to eq("code") + end + + it 'defines list of NilMenuItem placeholders' do + expect(items.map(&:class).uniq).to eq([Sidebars::NilMenuItem]) + expect(items.map(&:item_id)).to eq([ + :files, + :branches, + :commits, + :tags, + :graphs, + :compare, + :project_snippets, + :file_locks + ]) + end +end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/manage_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/manage_menu_spec.rb new file mode 100644 index 00000000000..8c5f7aaaf36 --- /dev/null +++ b/spec/lib/sidebars/projects/super_sidebar_menus/manage_menu_spec.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::SuperSidebarMenus::ManageMenu, feature_category: :navigation do + subject { described_class.new({}) } + + it 'has title and sprite_icon' do + expect(subject.title).to eq(s_("Navigation|Manage")) + expect(subject.sprite_icon).to eq("users") + end +end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/monitor_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/monitor_menu_spec.rb new file mode 100644 index 00000000000..6398e20efd0 --- /dev/null +++ b/spec/lib/sidebars/projects/super_sidebar_menus/monitor_menu_spec.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::SuperSidebarMenus::MonitorMenu, feature_category: :navigation do + subject { described_class.new({}) } + + it 'has title and sprite_icon' do + expect(subject.title).to eq(s_("Navigation|Monitor")) + expect(subject.sprite_icon).to eq("monitor") + end +end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/operations_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/operations_menu_spec.rb index df3f7e6cdab..54d4dcce264 100644 --- a/spec/lib/sidebars/projects/super_sidebar_menus/operations_menu_spec.rb +++ b/spec/lib/sidebars/projects/super_sidebar_menus/operations_menu_spec.rb @@ -6,7 +6,7 @@ RSpec.describe Sidebars::Projects::SuperSidebarMenus::OperationsMenu, feature_ca subject { described_class.new({}) } it 'has title and sprite_icon' do - expect(subject.title).to eq(_("Operations")) + expect(subject.title).to eq(s_("Navigation|Operate")) expect(subject.sprite_icon).to eq("deployments") end end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/plan_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/plan_menu_spec.rb index 3917d26f6f2..5f6f6e4f6c2 100644 --- a/spec/lib/sidebars/projects/super_sidebar_menus/plan_menu_spec.rb +++ b/spec/lib/sidebars/projects/super_sidebar_menus/plan_menu_spec.rb @@ -6,7 +6,7 @@ RSpec.describe Sidebars::Projects::SuperSidebarMenus::PlanMenu, feature_category subject { described_class.new({}) } it 'has title and sprite_icon' do - expect(subject.title).to eq(_("Plan")) + expect(subject.title).to eq(s_("Navigation|Plan")) expect(subject.sprite_icon).to eq("planning") end end diff --git a/spec/lib/sidebars/projects/super_sidebar_menus/secure_menu_spec.rb b/spec/lib/sidebars/projects/super_sidebar_menus/secure_menu_spec.rb new file mode 100644 index 00000000000..b68b33941c3 --- /dev/null +++ b/spec/lib/sidebars/projects/super_sidebar_menus/secure_menu_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::SuperSidebarMenus::SecureMenu, feature_category: :navigation do + subject { described_class.new({}) } + + let(:items) { subject.instance_variable_get(:@items) } + + it 'has title and sprite_icon' do + expect(subject.title).to eq(s_("Navigation|Secure")) + expect(subject.sprite_icon).to eq("shield") + end + + it 'defines list of NilMenuItem placeholders' do + expect(items.map(&:class).uniq).to eq([Sidebars::NilMenuItem]) + expect(items.map(&:item_id)).to eq([ + :discover_project_security, + :audit_events, + :dashboard, + :vulnerability_report, + :on_demand_scans, + :scan_policies, + :dependency_list, + :license_compliance, + :configuration + ]) + end +end diff --git a/spec/lib/sidebars/projects/super_sidebar_panel_spec.rb b/spec/lib/sidebars/projects/super_sidebar_panel_spec.rb index d6fc3fd8fe1..30a3612b3aa 100644 --- a/spec/lib/sidebars/projects/super_sidebar_panel_spec.rb +++ b/spec/lib/sidebars/projects/super_sidebar_panel_spec.rb @@ -26,13 +26,16 @@ RSpec.describe Sidebars::Projects::SuperSidebarPanel, feature_category: :navigat let(:category_menu) do [ Sidebars::StaticMenu, + Sidebars::Projects::SuperSidebarMenus::ManageMenu, Sidebars::Projects::SuperSidebarMenus::PlanMenu, - Sidebars::Projects::Menus::RepositoryMenu, - Sidebars::Projects::Menus::CiCdMenu, - Sidebars::Projects::Menus::SecurityComplianceMenu, + Sidebars::Projects::SuperSidebarMenus::CodeMenu, + Sidebars::Projects::SuperSidebarMenus::BuildMenu, + Sidebars::Projects::SuperSidebarMenus::SecureMenu, Sidebars::Projects::SuperSidebarMenus::OperationsMenu, + Sidebars::Projects::SuperSidebarMenus::MonitorMenu, + Sidebars::Projects::SuperSidebarMenus::AnalyzeMenu, + Sidebars::Projects::Menus::CiCdMenu, Sidebars::Projects::Menus::MonitorMenu, - Sidebars::Projects::Menus::AnalyticsMenu, Sidebars::UncategorizedMenu, Sidebars::Projects::Menus::SettingsMenu ] |