diff options
Diffstat (limited to 'spec/lib/sidebars')
-rw-r--r-- | spec/lib/sidebars/concerns/link_with_html_options_spec.rb | 39 | ||||
-rw-r--r-- | spec/lib/sidebars/groups/menus/packages_registries_menu_spec.rb | 59 | ||||
-rw-r--r-- | spec/lib/sidebars/menu_spec.rb | 19 | ||||
-rw-r--r-- | spec/lib/sidebars/projects/menus/shimo_menu_spec.rb | 44 |
4 files changed, 137 insertions, 24 deletions
diff --git a/spec/lib/sidebars/concerns/link_with_html_options_spec.rb b/spec/lib/sidebars/concerns/link_with_html_options_spec.rb new file mode 100644 index 00000000000..1e890bffad1 --- /dev/null +++ b/spec/lib/sidebars/concerns/link_with_html_options_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Concerns::LinkWithHtmlOptions do + let(:options) { {} } + + subject { Class.new { include Sidebars::Concerns::LinkWithHtmlOptions }.new } + + before do + allow(subject).to receive(:container_html_options).and_return(options) + end + + describe '#link_html_options' do + context 'with existing classes' do + let(:options) do + { + class: '_class1_ _class2_', + aria: { label: '_label_' } + } + end + + it 'includes class and default aria-label attribute' do + result = { + class: '_class1_ _class2_ gl-link', + aria: { label: '_label_' } + } + + expect(subject.link_html_options).to eq(result) + end + end + + context 'without existing classes' do + it 'includes gl-link class' do + expect(subject.link_html_options).to eq(class: 'gl-link') + end + end + end +end diff --git a/spec/lib/sidebars/groups/menus/packages_registries_menu_spec.rb b/spec/lib/sidebars/groups/menus/packages_registries_menu_spec.rb index e954d7a44ba..bc1fa3e88ff 100644 --- a/spec/lib/sidebars/groups/menus/packages_registries_menu_spec.rb +++ b/spec/lib/sidebars/groups/menus/packages_registries_menu_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' RSpec.describe Sidebars::Groups::Menus::PackagesRegistriesMenu do let_it_be(:owner) { create(:user) } - let_it_be(:group) do + let_it_be_with_reload(:group) do build(:group, :private).tap do |g| g.add_owner(owner) end @@ -70,6 +70,18 @@ RSpec.describe Sidebars::Groups::Menus::PackagesRegistriesMenu do describe 'Menu items' do subject { find_menu(menu, item_id) } + shared_examples 'the menu entry is available' do + it 'the menu item is added to list of menu items' do + is_expected.not_to be_nil + end + end + + shared_examples 'the menu entry is not available' do + it 'the menu item is not added to list of menu items' do + is_expected.to be_nil + end + end + describe 'Packages Registry' do let(:item_id) { :packages_registry } @@ -81,17 +93,13 @@ RSpec.describe Sidebars::Groups::Menus::PackagesRegistriesMenu do context 'when config package setting is disabled' do let(:packages_enabled) { false } - it 'the menu item is not added to list of menu items' do - is_expected.to be_nil - end + it_behaves_like 'the menu entry is not available' end context 'when config package setting is enabled' do let(:packages_enabled) { true } - it 'the menu item is added to list of menu items' do - is_expected.not_to be_nil - end + it_behaves_like 'the menu entry is available' end end end @@ -107,24 +115,18 @@ RSpec.describe Sidebars::Groups::Menus::PackagesRegistriesMenu do context 'when config registry setting is disabled' do let(:container_enabled) { false } - it 'the menu item is not added to list of menu items' do - is_expected.to be_nil - end + it_behaves_like 'the menu entry is not available' end context 'when config registry setting is enabled' do let(:container_enabled) { true } - it 'the menu item is added to list of menu items' do - is_expected.not_to be_nil - end + it_behaves_like 'the menu entry is available' context 'when user cannot read container images' do let(:user) { nil } - it 'the menu item is not added to list of menu items' do - is_expected.to be_nil - end + it_behaves_like 'the menu entry is not available' end end end @@ -141,17 +143,28 @@ RSpec.describe Sidebars::Groups::Menus::PackagesRegistriesMenu do context 'when config dependency_proxy is enabled' do let(:dependency_enabled) { true } - it 'the menu item is added to list of menu items' do - is_expected.not_to be_nil + it_behaves_like 'the menu entry is available' + + context 'when the group settings exist' do + let_it_be(:dependency_proxy_group_setting) { create(:dependency_proxy_group_setting, group: group) } + + it_behaves_like 'the menu entry is available' + + context 'when the proxy is disabled at the group level' do + before do + dependency_proxy_group_setting.enabled = false + dependency_proxy_group_setting.save! + end + + it_behaves_like 'the menu entry is not available' + end end end context 'when config dependency_proxy is not enabled' do let(:dependency_enabled) { false } - it 'the menu item is not added to list of menu items' do - is_expected.to be_nil - end + it_behaves_like 'the menu entry is not available' end end @@ -159,9 +172,7 @@ RSpec.describe Sidebars::Groups::Menus::PackagesRegistriesMenu do let(:user) { nil } let(:dependency_enabled) { true } - it 'the menu item is not added to list of menu items' do - is_expected.to be_nil - end + it_behaves_like 'the menu entry is not available' end end end diff --git a/spec/lib/sidebars/menu_spec.rb b/spec/lib/sidebars/menu_spec.rb index eb6a68f1afd..bdd9f22d5a0 100644 --- a/spec/lib/sidebars/menu_spec.rb +++ b/spec/lib/sidebars/menu_spec.rb @@ -153,6 +153,25 @@ RSpec.describe Sidebars::Menu do 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) } + let(:item3) { Sidebars::MenuItem.new(title: 'foo3', link: 'foo3', active_routes: {}, item_id: :foo3) } + let(:list) { [item1, item2, item3] } + + it 'removes specific element' do + menu.remove_element(list, :foo2) + + expect(list).to eq [item1, item3] + end + + it 'does not remove nil elements' do + menu.remove_element(list, nil) + + expect(list).to eq [item1, item2, item3] + end + end + describe '#container_html_options' do before do allow(menu).to receive(:title).and_return('Foo Menu') diff --git a/spec/lib/sidebars/projects/menus/shimo_menu_spec.rb b/spec/lib/sidebars/projects/menus/shimo_menu_spec.rb new file mode 100644 index 00000000000..534267a329e --- /dev/null +++ b/spec/lib/sidebars/projects/menus/shimo_menu_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Sidebars::Projects::Menus::ShimoMenu do + let_it_be_with_reload(:project) { create(:project) } + + let(:context) { Sidebars::Projects::Context.new(current_user: project.owner, container: project) } + + subject(:shimo_menu) { described_class.new(context) } + + describe '#render?' do + context 'without a valid Shimo integration' do + it "doesn't render the menu" do + expect(shimo_menu.render?).to be_falsey + end + end + + context 'with a valid Shimo integration' do + let_it_be_with_reload(:shimo_integration) { create(:shimo_integration, project: project) } + + context 'when integration is active' do + it 'renders the menu' do + expect(shimo_menu.render?).to eq true + end + + it 'renders menu link' do + expected_url = Rails.application.routes.url_helpers.project_integrations_shimo_path(project) + expect(shimo_menu.link).to eq expected_url + end + end + + context 'when integration is inactive' do + before do + shimo_integration.update!(active: false) + end + + it "doesn't render the menu" do + expect(shimo_menu.render?).to eq false + end + end + end + end +end |