From 4cee5884597d948305fab1a8acc49bd28d36eb95 Mon Sep 17 00:00:00 2001
From: Tomas Bulva <tbulva@gitlab.com>
Date: Wed, 13 Sep 2023 10:55:42 +0200
Subject: [PATCH] Added archived filter for commits scope

Changelog: added
EE: true
---
 .../search/sidebar/components/app.vue         | 15 +++++++++-
 .../components/archived_filter/data.js        |  1 +
 .../sidebar/components/commits_filters.vue    | 18 ++++++++++++
 .../search/sidebar/constants/index.js         |  1 +
 ee/app/controllers/ee/search_controller.rb    |  4 +++
 .../search/sidebar/components/app_spec.js     |  5 ++++
 .../components/commits_filters_spec.js        | 28 +++++++++++++++++++
 7 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 app/assets/javascripts/search/sidebar/components/commits_filters.vue
 create mode 100644 spec/frontend/search/sidebar/components/commits_filters_spec.js

diff --git a/app/assets/javascripts/search/sidebar/components/app.vue b/app/assets/javascripts/search/sidebar/components/app.vue
index a2e857dc5e412..532a66affd840 100644
--- a/app/assets/javascripts/search/sidebar/components/app.vue
+++ b/app/assets/javascripts/search/sidebar/components/app.vue
@@ -14,6 +14,7 @@ import {
   SCOPE_BLOB,
   SCOPE_PROJECTS,
   SCOPE_NOTES,
+  SCOPE_COMMITS,
   SEARCH_TYPE_ADVANCED,
 } from '../constants';
 import IssuesFilters from './issues_filters.vue';
@@ -21,6 +22,7 @@ import MergeRequestsFilters from './merge_requests_filters.vue';
 import BlobsFilters from './blobs_filters.vue';
 import ProjectsFilters from './projects_filters.vue';
 import NotesFilters from './notes_filters.vue';
+import CommitsFilters from './commits_filters.vue';
 
 export default {
   name: 'GlobalSearchSidebar',
@@ -35,6 +37,7 @@ export default {
     SidebarPortal,
     DomElementListener,
     SmallScreenDrawerNavigation,
+    CommitsFilters,
   },
   mixins: [glFeatureFlagsMixin()],
   computed: {
@@ -51,7 +54,6 @@ export default {
       return this.currentScope === SCOPE_BLOB && this.searchType === SEARCH_TYPE_ADVANCED;
     },
     showProjectsFilters() {
-      // for now the feature flag is here. Since we have only one filter in projects scope
       return this.currentScope === SCOPE_PROJECTS;
     },
     showNotesFilters() {
@@ -61,6 +63,14 @@ export default {
         this.glFeatures.searchNotesHideArchivedProjects
       );
     },
+    showCommitsFilters() {
+      // for now, the feature flag is placed here. Since we have only one filter in commits scope
+      return (
+        this.currentScope === SCOPE_COMMITS &&
+        this.searchType === SEARCH_TYPE_ADVANCED &&
+        this.glFeatures.searchCommitsHideArchivedProjects
+      );
+    },
     showScopeNavigation() {
       // showScopeNavigation refers to whether the scope navigation should be shown
       // while the legacy navigation is being used and there are no search results
@@ -86,6 +96,7 @@ export default {
       <blobs-filters v-if="showBlobFilters" />
       <projects-filters v-if="showProjectsFilters" />
       <notes-filters v-if="showNotesFilters" />
+      <commits-filters v-if="showCommitsFilters" />
     </sidebar-portal>
   </section>
 
@@ -100,6 +111,7 @@ export default {
       <blobs-filters v-if="showBlobFilters" />
       <projects-filters v-if="showProjectsFilters" />
       <notes-filters v-if="showNotesFilters" />
+      <commits-filters v-if="showCommitsFilters" />
     </div>
     <small-screen-drawer-navigation class="gl-lg-display-none">
       <scope-legacy-navigation />
@@ -108,6 +120,7 @@ export default {
       <blobs-filters v-if="showBlobFilters" />
       <projects-filters v-if="showProjectsFilters" />
       <notes-filters v-if="showNotesFilters" />
+      <commits-filters v-if="showCommitsFilters" />
     </small-screen-drawer-navigation>
   </section>
 </template>
diff --git a/app/assets/javascripts/search/sidebar/components/archived_filter/data.js b/app/assets/javascripts/search/sidebar/components/archived_filter/data.js
index de73ca57adb38..5cddf5e744f8c 100644
--- a/app/assets/javascripts/search/sidebar/components/archived_filter/data.js
+++ b/app/assets/javascripts/search/sidebar/components/archived_filter/data.js
@@ -11,6 +11,7 @@ const scopes = {
   MERGE_REQUESTS: 'merge_requests',
   NOTES: 'notes',
   BLOBS: 'blobs',
+  COMMITS: 'commits',
 };
 
 const filterParam = 'include_archived';
diff --git a/app/assets/javascripts/search/sidebar/components/commits_filters.vue b/app/assets/javascripts/search/sidebar/components/commits_filters.vue
new file mode 100644
index 0000000000000..4f9fdbe955170
--- /dev/null
+++ b/app/assets/javascripts/search/sidebar/components/commits_filters.vue
@@ -0,0 +1,18 @@
+<script>
+import ArchivedFilter from './archived_filter/index.vue';
+import FiltersTemplate from './filters_template.vue';
+
+export default {
+  name: 'CommitsFilters',
+  components: {
+    ArchivedFilter,
+    FiltersTemplate,
+  },
+};
+</script>
+
+<template>
+  <filters-template>
+    <archived-filter class="gl-mb-5" />
+  </filters-template>
+</template>
diff --git a/app/assets/javascripts/search/sidebar/constants/index.js b/app/assets/javascripts/search/sidebar/constants/index.js
index e680808218524..19df875c29285 100644
--- a/app/assets/javascripts/search/sidebar/constants/index.js
+++ b/app/assets/javascripts/search/sidebar/constants/index.js
@@ -3,6 +3,7 @@ export const SCOPE_MERGE_REQUESTS = 'merge_requests';
 export const SCOPE_BLOB = 'blobs';
 export const SCOPE_PROJECTS = 'projects';
 export const SCOPE_NOTES = 'notes';
+export const SCOPE_COMMITS = 'commits';
 export const LABEL_DEFAULT_CLASSES = [
   'gl-display-flex',
   'gl-flex-direction-row',
diff --git a/ee/app/controllers/ee/search_controller.rb b/ee/app/controllers/ee/search_controller.rb
index adc5a044ffd1a..bb7fe85e0db16 100644
--- a/ee/app/controllers/ee/search_controller.rb
+++ b/ee/app/controllers/ee/search_controller.rb
@@ -58,6 +58,10 @@ def search_rate_limited_endpoints
         push_frontend_feature_flag(:search_blobs_hide_archived_projects, current_user)
       end
 
+      before_action only: :show do
+        push_frontend_feature_flag(:search_commits_hide_archived_projects, current_user)
+      end
+
       after_action :run_index_integrity_worker, only: :show, if: :no_results_for_group_or_project_blobs_advanced_search?
     end
 
diff --git a/spec/frontend/search/sidebar/components/app_spec.js b/spec/frontend/search/sidebar/components/app_spec.js
index 72c9537bd613d..8e23f9c168003 100644
--- a/spec/frontend/search/sidebar/components/app_spec.js
+++ b/spec/frontend/search/sidebar/components/app_spec.js
@@ -15,6 +15,7 @@ import MergeRequestsFilters from '~/search/sidebar/components/merge_requests_fil
 import BlobsFilters from '~/search/sidebar/components/blobs_filters.vue';
 import ProjectsFilters from '~/search/sidebar/components/projects_filters.vue';
 import NotesFilters from '~/search/sidebar/components/notes_filters.vue';
+import CommitsFilters from '~/search/sidebar/components/commits_filters.vue';
 import ScopeLegacyNavigation from '~/search/sidebar/components/scope_legacy_navigation.vue';
 import SmallScreenDrawerNavigation from '~/search/sidebar/components/small_screen_drawer_navigation.vue';
 import ScopeSidebarNavigation from '~/search/sidebar/components/scope_sidebar_navigation.vue';
@@ -45,6 +46,7 @@ describe('GlobalSearchSidebar', () => {
       provide: {
         glFeatures: {
           searchNotesHideArchivedProjects: true,
+          searchCommitsHideArchivedProjects: true,
         },
       },
     });
@@ -56,6 +58,7 @@ describe('GlobalSearchSidebar', () => {
   const findBlobsFilters = () => wrapper.findComponent(BlobsFilters);
   const findProjectsFilters = () => wrapper.findComponent(ProjectsFilters);
   const findNotesFilters = () => wrapper.findComponent(NotesFilters);
+  const findCommitsFilters = () => wrapper.findComponent(CommitsFilters);
   const findScopeLegacyNavigation = () => wrapper.findComponent(ScopeLegacyNavigation);
   const findSmallScreenDrawerNavigation = () => wrapper.findComponent(SmallScreenDrawerNavigation);
   const findScopeSidebarNavigation = () => wrapper.findComponent(ScopeSidebarNavigation);
@@ -82,6 +85,8 @@ describe('GlobalSearchSidebar', () => {
       ${'blobs'}          | ${findBlobsFilters}         | ${SEARCH_TYPE_ZOEKT}    | ${false}
       ${'notes'}          | ${findNotesFilters}         | ${SEARCH_TYPE_BASIC}    | ${false}
       ${'notes'}          | ${findNotesFilters}         | ${SEARCH_TYPE_ADVANCED} | ${true}
+      ${'commits'}        | ${findCommitsFilters}       | ${SEARCH_TYPE_BASIC}    | ${false}
+      ${'commits'}        | ${findCommitsFilters}       | ${SEARCH_TYPE_ADVANCED} | ${true}
     `('with sidebar $scope scope:', ({ scope, filter, searchType, isShown }) => {
       beforeEach(() => {
         getterSpies.currentScope = jest.fn(() => scope);
diff --git a/spec/frontend/search/sidebar/components/commits_filters_spec.js b/spec/frontend/search/sidebar/components/commits_filters_spec.js
new file mode 100644
index 0000000000000..cb47c6833efb0
--- /dev/null
+++ b/spec/frontend/search/sidebar/components/commits_filters_spec.js
@@ -0,0 +1,28 @@
+import { shallowMount } from '@vue/test-utils';
+import CommitsFilters from '~/search/sidebar/components/projects_filters.vue';
+import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue';
+import FiltersTemplate from '~/search/sidebar/components/filters_template.vue';
+
+describe('GlobalSearch CommitsFilters', () => {
+  let wrapper;
+
+  const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter);
+  const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate);
+
+  const createComponent = () => {
+    wrapper = shallowMount(CommitsFilters);
+  };
+
+  describe('Renders correctly', () => {
+    beforeEach(() => {
+      createComponent();
+    });
+    it('renders ArchivedFilter', () => {
+      expect(findArchivedFilter().exists()).toBe(true);
+    });
+
+    it('renders FiltersTemplate', () => {
+      expect(findFiltersTemplate().exists()).toBe(true);
+    });
+  });
+});
-- 
GitLab