diff --git a/config/feature_flags/ops/global_search_commits_tab.yml b/ee/config/feature_flags/ops/global_search_commits_tab.yml similarity index 100% rename from config/feature_flags/ops/global_search_commits_tab.yml rename to ee/config/feature_flags/ops/global_search_commits_tab.yml diff --git a/ee/lib/ee/search/navigation.rb b/ee/lib/ee/search/navigation.rb index e7d50b4835bb19be3c183d1e7a151fc3aaf714be..52657b3c733e7cf7efe141b43224f2b1acc5b658 100644 --- a/ee/lib/ee/search/navigation.rb +++ b/ee/lib/ee/search/navigation.rb @@ -83,6 +83,15 @@ def show_epics_search_tab? ::Feature.enabled?(:global_search_epics_tab, user, type: :ops) end + + override :show_commits_search_tab? + def show_commits_search_tab? + return true if super # project search & user can search commits + return false unless show_elasticsearch_tabs? # advanced search enabled + return true if group.present? # group search + + ::Feature.enabled?(:global_search_commits_tab, user, type: :ops) # global search + end end end end diff --git a/ee/spec/lib/search/navigation_spec.rb b/ee/spec/lib/search/navigation_spec.rb index 43606bffec70f4cbf6bf2827bae4bfc66177a630..8f3eddb2716e1f59a4558aec7273de595a8fdc1e 100644 --- a/ee/spec/lib/search/navigation_spec.rb +++ b/ee/spec/lib/search/navigation_spec.rb @@ -19,6 +19,78 @@ subject(:tabs) { search_navigation.tabs } + context 'for commits tab' do + context 'when project search' do + let(:project) { project_double } + let(:group) { nil } + + where(:tab_enabled_for_project, :condition) do + true | true + false | false + end + + with_them do + before do + allow(search_navigation).to receive(:tab_enabled_for_project?).and_return(tab_enabled_for_project) + end + + it 'data item condition is set correctly' do + expect(tabs[:commits][:condition]).to eq(condition) + end + end + end + + context 'when group search' do + let(:project) { nil } + let(:group) { group_double } + + where(:feature_flag, :show_elasticsearch_tabs, :condition) do + true | true | true + true | false | false + false | true | true + false | false | false + end + + with_them do + let(:options) { { show_elasticsearch_tabs: show_elasticsearch_tabs } } + + before do + stub_feature_flags(global_search_commits_tab: feature_flag) + end + + it 'data item condition is set correctly' do + expect(tabs[:commits][:condition]).to eq(condition) + end + end + end + + context 'when global search' do + let(:project) { nil } + let(:group) { nil } + + where(:feature_flag, :show_elasticsearch_tabs, :condition) do + true | true | true + false | true | false + false | false | false + true | false | false + false | nil | false + true | nil | false + end + + with_them do + let(:options) { { show_elasticsearch_tabs: show_elasticsearch_tabs } } + + before do + stub_feature_flags(global_search_commits_tab: feature_flag) + end + + it 'data item condition is set correctly' do + expect(tabs[:commits][:condition]).to eq(condition) + end + end + end + end + context 'for epics tab' do context 'when project search' do let(:project) { project_double } diff --git a/lib/search/navigation.rb b/lib/search/navigation.rb index f7eed0bae14cca17081da0284f7f722866c5bdc5..77480c2ff02de7b7af5e7a8d1e57f6401ac98115 100644 --- a/lib/search/navigation.rb +++ b/lib/search/navigation.rb @@ -139,9 +139,7 @@ def show_wiki_search_tab? end def show_commits_search_tab? - return true if tab_enabled_for_project?(:commits) - - project.nil? && show_elasticsearch_tabs? && feature_flag_tab_enabled?(:global_search_commits_tab) + tab_enabled_for_project?(:commits) end def show_issues_search_tab? diff --git a/spec/lib/search/navigation_spec.rb b/spec/lib/search/navigation_spec.rb index c20c15077def6938d22880e165097baaf3a2012b..686965d04479eebd38ece6b57be0fe80f1572ebd 100644 --- a/spec/lib/search/navigation_spec.rb +++ b/spec/lib/search/navigation_spec.rb @@ -56,6 +56,7 @@ before do allow(search_navigation) .to receive_messages(can?: true, tab_enabled_for_project?: false, feature_flag_tab_enabled?: false) + allow(search_navigation).to receive(:tab_enabled_for_project?).and_call_original end subject(:tabs) { search_navigation.tabs } @@ -160,25 +161,16 @@ end context 'for commits tab' do - where(:feature_flag_enabled, :show_elasticsearch_tabs, :project, :tab_enabled, :condition) do - false | false | nil | true | true - false | false | ref(:project_double) | true | true - false | false | nil | false | false - false | true | ref(:project_double) | false | false - false | true | nil | false | false - true | false | nil | false | false - true | false | ref(:project_double) | false | false - true | true | ref(:project_double) | false | false - true | true | nil | false | true + where(:project, :ability_enabled, :condition) do + nil | true | false + nil | false | false + ref(:project_double) | true | true + ref(:project_double) | false | false end with_them do - let(:options) { { show_elasticsearch_tabs: show_elasticsearch_tabs } } - it 'data item condition is set correctly' do - allow(search_navigation).to receive(:feature_flag_tab_enabled?) - .with(:global_search_commits_tab).and_return(feature_flag_enabled) - allow(search_navigation).to receive(:tab_enabled_for_project?).with(:commits).and_return(tab_enabled) + allow(search_navigation).to receive(:can?).with(user, :read_code, project).and_return(ability_enabled) expect(tabs[:commits][:condition]).to eq(condition) end