diff --git a/app/assets/javascripts/nav/components/top_nav_app.vue b/app/assets/javascripts/nav/components/top_nav_app.vue index f8f3ba26536b2bc879a6737ed7de92c367eac54e..4dde928405d84c5c95e7a50b9527821f6e995cd3 100644 --- a/app/assets/javascripts/nav/components/top_nav_app.vue +++ b/app/assets/javascripts/nav/components/top_nav_app.vue @@ -36,7 +36,7 @@ export default { <gl-nav-item-dropdown :text="navData.activeTitle" icon="dot-grid" - menu-class="gl-mt-3! gl-max-w-none! gl-max-h-none! gl-sm-w-auto!" + menu-class="gl-mt-3! gl-max-w-none! gl-max-h-none! gl-sm-w-auto! js-top-nav-dropdown-menu" toggle-class="top-nav-toggle js-top-nav-dropdown-toggle gl-px-3!" no-flip > diff --git a/ee/spec/features/operations_nav_link_spec.rb b/ee/spec/features/operations_nav_link_spec.rb index 3500891d277bd047ff05fb1e64f23043af7e1223..86af8d8d5d60872a26f16999ae4942e220f025d5 100644 --- a/ee/spec/features/operations_nav_link_spec.rb +++ b/ee/spec/features/operations_nav_link_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Operations dropdown navbar EE' do + include Spec::Support::Helpers::Features::TopNavSpecHelpers + let(:user) { create(:user) } let(:project) { create(:project) } @@ -17,19 +19,19 @@ end it 'has an `Operations` link' do - pending_on_combined_menu_flag + open_top_nav expect(page).to have_link('Operations', href: operations_path) end it 'has an `Environments` link' do - pending_on_combined_menu_flag + open_top_nav expect(page).to have_link('Environments', href: operations_environments_path) end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on', :js do let(:needs_rewrite_for_combined_menu_flag_on) { true } before do @@ -48,8 +50,4 @@ it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/features/admin/admin_mode/logout_spec.rb b/spec/features/admin/admin_mode/logout_spec.rb index 664eb51e58f57875548681ad97799e86234d5876..efb4baa81643c687b66eb9e63e9cad1aab33ea59 100644 --- a/spec/features/admin/admin_mode/logout_spec.rb +++ b/spec/features/admin/admin_mode/logout_spec.rb @@ -5,28 +5,32 @@ RSpec.describe 'Admin Mode Logout', :js do include TermsHelper include UserLoginHelper + include Spec::Support::Helpers::Features::TopNavSpecHelpers let(:user) { create(:admin) } shared_examples 'combined_menu: feature flag examples' do before do - gitlab_sign_in(user) + # TODO: This used to use gitlab_sign_in, instead of sign_in, but that is buggy. See + # this issue to look into why: https://gitlab.com/gitlab-org/gitlab/-/issues/331851 + sign_in(user) gitlab_enable_admin_mode_sign_in(user) visit admin_root_path end it 'disable removes admin mode and redirects to root page' do - pending_on_combined_menu_flag - gitlab_disable_admin_mode expect(current_path).to eq root_path - expect(page).to have_link(href: new_admin_session_path) + + open_top_nav + + within_top_nav do + expect(page).to have_link(href: new_admin_session_path) + end end it 'disable shows flash notice' do - pending_on_combined_menu_flag - gitlab_disable_admin_mode expect(page).to have_selector('.flash-notice') @@ -38,17 +42,20 @@ end it 'disable removes admin mode and redirects to root page' do - pending_on_combined_menu_flag - gitlab_disable_admin_mode expect(current_path).to eq root_path - expect(page).to have_link(href: new_admin_session_path) + + open_top_nav + + within_top_nav do + expect(page).to have_link(href: new_admin_session_path) + end end end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on' do let(:needs_rewrite_for_combined_menu_flag_on) { true } before do @@ -67,8 +74,4 @@ it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/features/admin/admin_mode_spec.rb b/spec/features/admin/admin_mode_spec.rb index 4df035b13e8b74fdbbf1c0fd64b8d04bf946f5ca..dfb6ebc0211c6a4e627e755a294f81977806e209 100644 --- a/spec/features/admin/admin_mode_spec.rb +++ b/spec/features/admin/admin_mode_spec.rb @@ -4,6 +4,7 @@ RSpec.describe 'Admin mode' do include MobileHelpers + include Spec::Support::Helpers::Features::TopNavSpecHelpers include StubENV let(:admin) { create(:admin) } @@ -21,6 +22,7 @@ context 'when not in admin mode' do it 'has no leave admin mode button' do visit new_admin_session_path + open_top_nav page.within('.navbar-sub-nav') do expect(page).not_to have_link(href: destroy_admin_session_path) @@ -28,12 +30,11 @@ end it 'can open pages not in admin scope' do - pending_on_combined_menu_flag - visit new_admin_session_path + open_top_nav_projects - page.within('.navbar-sub-nav') do - find_all('a', text: 'Projects').first.click + within_top_nav do + click_link('Your projects') end expect(page).to have_current_path(dashboard_projects_path) @@ -78,71 +79,64 @@ end it 'contains link to leave admin mode' do - pending_on_combined_menu_flag + open_top_nav - page.within('.navbar-sub-nav') do + within_top_nav do expect(page).to have_link(href: destroy_admin_session_path) end end it 'can leave admin mode using main dashboard link', :js do - pending_on_combined_menu_flag + gitlab_disable_admin_mode - page.within('.navbar-sub-nav') do - click_on 'Leave Admin Mode' + open_top_nav + within_top_nav do expect(page).to have_link(href: new_admin_session_path) end end it 'can leave admin mode using dropdown menu on smaller screens', :js do - pending_on_combined_menu_flag - resize_screen_xs visit root_dashboard_path - find('.header-more').click + find('.header-more').click unless Feature.enabled?(:combined_menu) - page.within '.navbar-sub-nav' do - click_on 'Leave Admin Mode' + gitlab_disable_admin_mode - find('.header-more').click + open_top_nav + find('.header-more').click unless Feature.enabled?(:combined_menu) - expect(page).to have_link(href: new_admin_session_path) - end + expect(page).to have_link(href: new_admin_session_path) end it 'can open pages not in admin scope' do - pending_on_combined_menu_flag + open_top_nav_projects - page.within('.navbar-sub-nav') do - find_all('a', text: 'Projects').first.click - - expect(page).to have_current_path(dashboard_projects_path) + within_top_nav do + click_link('Your projects') end + + expect(page).to have_current_path(dashboard_projects_path) end context 'nav bar' do it 'shows admin dashboard links on bigger screen' do - pending_on_combined_menu_flag - visit root_dashboard_path + open_top_nav - page.within '.navbar' do - expect(page).to have_link(text: 'Admin Area', href: admin_root_path, visible: true) - expect(page).to have_link(text: 'Leave Admin Mode', href: destroy_admin_session_path, visible: true) - end + link_text = Feature.enabled?(:combined_menu) ? 'Admin' : 'Admin Area' + expect(page).to have_link(text: link_text, href: admin_root_path, visible: true) + expect(page).to have_link(text: 'Leave Admin Mode', href: destroy_admin_session_path, visible: true) end it 'relocates admin dashboard links to dropdown list on smaller screen', :js do - pending_on_combined_menu_flag + skip('not applicable with :combined_menu feature flag enabled') if Feature.enabled?(:combined_menu) resize_screen_xs visit root_dashboard_path - page.within '.navbar' do - expect(page).not_to have_link(text: 'Leave Admin Mode', href: destroy_admin_session_path, visible: true) - end + expect(page).not_to have_link(text: 'Leave Admin Mode', href: destroy_admin_session_path, visible: true) find('.header-more').click @@ -159,11 +153,11 @@ end it 'can leave admin mode', :js do - pending_on_combined_menu_flag + gitlab_disable_admin_mode - page.within('.navbar-sub-nav') do - click_on 'Leave Admin Mode' + open_top_nav + within_top_nav do expect(page).to have_link(href: new_admin_session_path) end end @@ -179,16 +173,15 @@ it 'shows no admin mode buttons in navbar' do visit admin_root_path + open_top_nav - page.within('.navbar-sub-nav') do - expect(page).not_to have_link(href: new_admin_session_path) - expect(page).not_to have_link(href: destroy_admin_session_path) - end + expect(page).not_to have_link(href: new_admin_session_path) + expect(page).not_to have_link(href: destroy_admin_session_path) end end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on', :js do let(:needs_rewrite_for_combined_menu_flag_on) { true } before do @@ -207,8 +200,4 @@ it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/features/dashboard/active_tab_spec.rb b/spec/features/dashboard/active_tab_spec.rb index a1fb0beda700514efb5174f59572e69a2c43febb..aa767d75c001dff139f4bc78c2140390809b0741 100644 --- a/spec/features/dashboard/active_tab_spec.rb +++ b/spec/features/dashboard/active_tab_spec.rb @@ -2,6 +2,9 @@ require 'spec_helper' +# TODO: This entire spec file can be deleted once the combined_menu feature is fully rolled +# out and the flag is removed, because it will then be irrelevant (there will be no more tabs). +# Feature flag removal issue: https://gitlab.com/gitlab-org/gitlab/-/issues/324086 RSpec.describe 'Dashboard Active Tab', :js do shared_examples 'combined_menu: feature flag examples' do before do @@ -10,8 +13,6 @@ shared_examples 'page has active tab' do |title| it "#{title} tab" do - pending_on_combined_menu_flag - subject expect(page).to have_selector('.navbar-sub-nav li.active', count: 1) @@ -32,27 +33,11 @@ end end - context 'with combined_menu: feature flag on' do - let(:needs_rewrite_for_combined_menu_flag_on) { true } - - before do - stub_feature_flags(combined_menu: true) - end - - it_behaves_like 'combined_menu: feature flag examples' - end - context 'with combined_menu feature flag off' do - let(:needs_rewrite_for_combined_menu_flag_on) { false } - before do stub_feature_flags(combined_menu: false) end it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb b/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb index 0620f819332462a2be1ce64db32912b0b442a592..3dd993b4bb51530da30342ed0ac652fd4aa2d0eb 100644 --- a/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb +++ b/spec/features/dashboard/group_dashboard_with_external_authorization_service_spec.rb @@ -4,6 +4,7 @@ RSpec.describe 'The group dashboard' do include ExternalAuthorizationServiceHelpers + include Spec::Support::Helpers::Features::TopNavSpecHelpers let(:user) { create(:user) } @@ -14,11 +15,11 @@ describe 'The top navigation' do it 'has all the expected links' do - pending_on_combined_menu_flag - visit dashboard_groups_path - within('.navbar') do + open_top_nav + + within_top_nav do expect(page).to have_button('Projects') expect(page).to have_button('Groups') expect(page).to have_link('Activity') @@ -28,12 +29,12 @@ end it 'hides some links when an external authorization service is enabled' do - pending_on_combined_menu_flag - enable_external_authorization_service_check visit dashboard_groups_path - within('.navbar') do + open_top_nav + + within_top_nav do expect(page).to have_button('Projects') expect(page).to have_button('Groups') expect(page).not_to have_link('Activity') @@ -44,7 +45,7 @@ end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on', :js do let(:needs_rewrite_for_combined_menu_flag_on) { true } before do @@ -63,8 +64,4 @@ it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/features/dashboard/shortcuts_spec.rb b/spec/features/dashboard/shortcuts_spec.rb index 99bcd0480c02827e7c1329c59c66c8bb438ddfe5..7439bfd334b2690c5d4edff4f935f77284b0b163 100644 --- a/spec/features/dashboard/shortcuts_spec.rb +++ b/spec/features/dashboard/shortcuts_spec.rb @@ -38,6 +38,10 @@ find('body').send_keys([:shift, 'A']) check_page_title('Activity') + + find('body').send_keys([:shift, 'L']) + + check_page_title('Milestones') end end @@ -69,7 +73,7 @@ def check_page_title(title) end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on' do before do stub_feature_flags(combined_menu: true) end diff --git a/spec/features/frequently_visited_projects_and_groups_spec.rb b/spec/features/frequently_visited_projects_and_groups_spec.rb index 9110c7ad65a2399c132e7d14de939551b3e49504..5ea42ce39e3f4507013bfdf6da4b3599f2200b35 100644 --- a/spec/features/frequently_visited_projects_and_groups_spec.rb +++ b/spec/features/frequently_visited_projects_and_groups_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Frequently visited items', :js do + include Spec::Support::Helpers::Features::TopNavSpecHelpers + let_it_be(:user) { create(:user) } shared_examples 'combined_menu: feature flag examples' do @@ -14,9 +16,8 @@ let_it_be(:project) { create(:project, :public) } it 'increments localStorage counter when visiting the project' do - pending_on_combined_menu_flag - visit project_path(project) + open_top_nav_projects frequent_projects = nil @@ -34,9 +35,8 @@ let_it_be(:group) { create(:group, :public) } it 'increments localStorage counter when visiting the group' do - pending_on_combined_menu_flag - visit group_path(group) + open_top_nav_groups frequent_groups = nil @@ -51,7 +51,7 @@ end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on' do let(:needs_rewrite_for_combined_menu_flag_on) { true } before do @@ -70,8 +70,4 @@ it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb index 0bb22afdd1543432c5187f0f59d6c214f1506db9..cf973d6d32839e94816724faadaecc0170bd72e9 100644 --- a/spec/features/projects/new_project_spec.rb +++ b/spec/features/projects/new_project_spec.rb @@ -4,6 +4,7 @@ RSpec.describe 'New project', :js do include Select2Helper + include Spec::Support::Helpers::Features::TopNavSpecHelpers shared_examples 'combined_menu: feature flag examples' do context 'as a user' do @@ -45,34 +46,39 @@ end it 'when in control it renders "project" in the new projects dropdown' do - pending_on_combined_menu_flag - stub_experiments(new_repo: :control) visit new_project_path - find('#nav-projects-dropdown').click - - page.within('#nav-projects-dropdown') do - expect(page).to have_selector('a', text: 'Create blank project') - expect(page).to have_selector('a', text: 'Import project') - expect(page).to have_no_selector('a', text: 'Create blank project/repository') - expect(page).to have_no_selector('a', text: 'Import project/repository') + open_top_nav_projects + + within_top_nav do + if Feature.enabled?(:combined_menu) + expect(page).to have_selector('a', text: 'Create new project') + expect(page).to have_no_selector('a', text: 'Create blank project/repository') + else + expect(page).to have_selector('a', text: 'Create blank project') + expect(page).to have_selector('a', text: 'Import project') + expect(page).to have_no_selector('a', text: 'Create blank project/repository') + expect(page).to have_no_selector('a', text: 'Import project/repository') + end end end it 'when in candidate it renders "project/repository" in the new projects dropdown' do - pending_on_combined_menu_flag - stub_experiments(new_repo: :candidate) visit new_project_path - find('#nav-projects-dropdown').click + open_top_nav_projects - page.within('#nav-projects-dropdown') do - expect(page).to have_selector('a', text: 'Create blank project/repository') - expect(page).to have_selector('a', text: 'Import project/repository') + within_top_nav do + if Feature.enabled?(:combined_menu) + expect(page).to have_selector('a', text: 'Create new project') + else + expect(page).to have_selector('a', text: 'Create blank project/repository') + expect(page).to have_selector('a', text: 'Import project/repository') + end end end end @@ -412,7 +418,7 @@ end end - context 'with combined_menu: feature flag on' do + context 'with combined_menu feature flag on' do let(:needs_rewrite_for_combined_menu_flag_on) { true } before do @@ -431,8 +437,4 @@ it_behaves_like 'combined_menu: feature flag examples' end - - def pending_on_combined_menu_flag - pending 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56587' if needs_rewrite_for_combined_menu_flag_on - end end diff --git a/spec/support/helpers/features/top_nav_spec_helpers.rb b/spec/support/helpers/features/top_nav_spec_helpers.rb new file mode 100644 index 0000000000000000000000000000000000000000..188492bf903bb4b057d82aaed3faa24aeafdda1b --- /dev/null +++ b/spec/support/helpers/features/top_nav_spec_helpers.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +# These helpers help you interact within the Editor Lite (single-file editor, snippets, etc.). +# +module Spec + module Support + module Helpers + module Features + module TopNavSpecHelpers + def open_top_nav + return unless Feature.enabled?(:combined_menu) + + find('.js-top-nav-dropdown-toggle').click + end + + def within_top_nav + if Feature.enabled?(:combined_menu) + within('.js-top-nav-dropdown-menu') do + yield + end + else + within('.navbar-sub-nav') do + yield + end + end + end + + def open_top_nav_projects + if Feature.enabled?(:combined_menu) + open_top_nav + + within_top_nav do + click_button('Projects') + end + else + find('#nav-projects-dropdown').click + end + end + + def open_top_nav_groups + return unless Feature.enabled?(:combined_menu) + + open_top_nav + + within_top_nav do + click_button('Groups') + end + end + end + end + end + end +end diff --git a/spec/support/helpers/login_helpers.rb b/spec/support/helpers/login_helpers.rb index fc3eb9762767c1800346584f999bdbcd8b2d58e0..cc88a3fc71e4ac75e8182b0b3a39c77486a8d6a6 100644 --- a/spec/support/helpers/login_helpers.rb +++ b/spec/support/helpers/login_helpers.rb @@ -77,7 +77,11 @@ def gitlab_sign_out # Requires Javascript driver. def gitlab_disable_admin_mode - click_on 'Leave Admin Mode' + open_top_nav + + within_top_nav do + click_on 'Leave Admin Mode' + end end private