From 703d6aa24b37ecd66a160dbd419567ca8df46966 Mon Sep 17 00:00:00 2001 From: Tomas Bulva <tbulva@gitlab.com> Date: Thu, 18 Apr 2024 20:10:20 +0000 Subject: [PATCH] Hide archived filter toggle with selected project Changelog: changed --- .../sidebar/components/blobs_filters.vue | 5 +- .../sidebar/components/commits_filters.vue | 7 +- .../sidebar/components/issues_filters.vue | 28 ++--- .../components/merge_requests_filters.vue | 14 +-- .../sidebar/components/milestones_filters.vue | 7 +- .../sidebar/components/notes_filters.vue | 7 +- .../sidebar/components/project_filter.vue | 2 + .../sidebar/components/wiki_blobs_filters.vue | 7 +- .../javascripts/search/store/getters.js | 3 + .../sidebar/components/blobs_filters_spec.js | 12 +++ .../components/commits_filters_spec.js | 34 +++++- .../search/sidebar/components/filters_spec.js | 102 ------------------ .../sidebar/components/issues_filters_spec.js | 20 +--- .../components/merge_requests_filters_spec.js | 10 +- .../components/milestones_filters_spec.js | 28 ++++- .../sidebar/components/notes_filters_spec.js | 34 +++++- .../sidebar/components/project_filter_spec.js | 2 + .../components/wiki_blobs_filters_spec.js | 54 ++++++++++ spec/frontend/search/store/getters_spec.js | 11 ++ 19 files changed, 216 insertions(+), 171 deletions(-) delete mode 100644 spec/frontend/search/sidebar/components/filters_spec.js create mode 100644 spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js diff --git a/app/assets/javascripts/search/sidebar/components/blobs_filters.vue b/app/assets/javascripts/search/sidebar/components/blobs_filters.vue index c04224c0cb1f..f414e39a5b5f 100644 --- a/app/assets/javascripts/search/sidebar/components/blobs_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/blobs_filters.vue @@ -1,6 +1,6 @@ <script> // eslint-disable-next-line no-restricted-imports -import { mapState } from 'vuex'; +import { mapState, mapGetters } from 'vuex'; import { SEARCH_TYPE_ADVANCED } from '../constants'; import LanguageFilter from './language_filter/index.vue'; import ArchivedFilter from './archived_filter/index.vue'; @@ -15,6 +15,7 @@ export default { }, computed: { ...mapState(['searchType']), + ...mapGetters(['showArchived']), showLanguageFilter() { return this.searchType === SEARCH_TYPE_ADVANCED; }, @@ -25,6 +26,6 @@ export default { <template> <filters-template> <language-filter v-if="showLanguageFilter" class="gl-mb-5" /> - <archived-filter class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/sidebar/components/commits_filters.vue b/app/assets/javascripts/search/sidebar/components/commits_filters.vue index 4f9fdbe95517..cb267ec5c310 100644 --- a/app/assets/javascripts/search/sidebar/components/commits_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/commits_filters.vue @@ -1,4 +1,6 @@ <script> +// eslint-disable-next-line no-restricted-imports +import { mapGetters } from 'vuex'; import ArchivedFilter from './archived_filter/index.vue'; import FiltersTemplate from './filters_template.vue'; @@ -8,11 +10,14 @@ export default { ArchivedFilter, FiltersTemplate, }, + computed: { + ...mapGetters(['showArchived']), + }, }; </script> <template> <filters-template> - <archived-filter class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/sidebar/components/issues_filters.vue b/app/assets/javascripts/search/sidebar/components/issues_filters.vue index d815b68b98a6..dd01c0fe3073 100644 --- a/app/assets/javascripts/search/sidebar/components/issues_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/issues_filters.vue @@ -2,12 +2,8 @@ // eslint-disable-next-line no-restricted-imports import { mapGetters, mapState } from 'vuex'; import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; -import { SEARCH_TYPE_ADVANCED } from '../constants'; -import { confidentialFilterData } from './confidentiality_filter/data'; -import { statusFilterData } from './status_filter/data'; +import { SEARCH_TYPE_ADVANCED } from '~/search/sidebar/constants'; import ConfidentialityFilter from './confidentiality_filter/index.vue'; -import { labelFilterData } from './label_filter/data'; -import { archivedFilterData } from './archived_filter/data'; import LabelFilter from './label_filter/index.vue'; import StatusFilter from './status_filter/index.vue'; import ArchivedFilter from './archived_filter/index.vue'; @@ -25,22 +21,10 @@ export default { }, mixins: [glFeatureFlagsMixin()], computed: { - ...mapGetters(['currentScope']), + ...mapGetters(['showArchived']), ...mapState(['searchType']), - showConfidentialityFilter() { - return Object.values(confidentialFilterData.scopes).includes(this.currentScope); - }, - showStatusFilter() { - return Object.values(statusFilterData.scopes).includes(this.currentScope); - }, showLabelFilter() { - return ( - Object.values(labelFilterData.scopes).includes(this.currentScope) && - this.searchType === SEARCH_TYPE_ADVANCED - ); - }, - showArchivedFilter() { - return archivedFilterData.scopes.includes(this.currentScope); + return this.searchType === SEARCH_TYPE_ADVANCED; }, }, }; @@ -48,9 +32,9 @@ export default { <template> <filters-template> - <status-filter v-if="showStatusFilter" class="gl-mb-5" /> - <confidentiality-filter v-if="showConfidentialityFilter" class="gl-mb-5" /> + <status-filter class="gl-mb-5" /> + <confidentiality-filter class="gl-mb-5" /> <label-filter v-if="showLabelFilter" class="gl-mb-5" /> - <archived-filter v-if="showArchivedFilter" class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue b/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue index 18074db76034..c20b35d2c18c 100644 --- a/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/merge_requests_filters.vue @@ -1,10 +1,8 @@ <script> // eslint-disable-next-line no-restricted-imports import { mapGetters } from 'vuex'; -import { statusFilterData } from './status_filter/data'; import StatusFilter from './status_filter/index.vue'; import FiltersTemplate from './filters_template.vue'; -import { archivedFilterData } from './archived_filter/data'; import ArchivedFilter from './archived_filter/index.vue'; export default { @@ -15,20 +13,14 @@ export default { ArchivedFilter, }, computed: { - ...mapGetters(['currentScope']), - showArchivedFilter() { - return archivedFilterData.scopes.includes(this.currentScope); - }, - showStatusFilter() { - return Object.values(statusFilterData.scopes).includes(this.currentScope); - }, + ...mapGetters(['showArchived']), }, }; </script> <template> <filters-template> - <status-filter v-if="showStatusFilter" class="gl-mb-5" /> - <archived-filter v-if="showArchivedFilter" class="gl-mb-5" /> + <status-filter class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/sidebar/components/milestones_filters.vue b/app/assets/javascripts/search/sidebar/components/milestones_filters.vue index 098e2980c3f7..169cd3b962c5 100644 --- a/app/assets/javascripts/search/sidebar/components/milestones_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/milestones_filters.vue @@ -1,4 +1,6 @@ <script> +// eslint-disable-next-line no-restricted-imports +import { mapGetters } from 'vuex'; import ArchivedFilter from './archived_filter/index.vue'; import FiltersTemplate from './filters_template.vue'; @@ -8,11 +10,14 @@ export default { ArchivedFilter, FiltersTemplate, }, + computed: { + ...mapGetters(['showArchived']), + }, }; </script> <template> <filters-template> - <archived-filter class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/sidebar/components/notes_filters.vue b/app/assets/javascripts/search/sidebar/components/notes_filters.vue index 3a9f582d5546..90f614681885 100644 --- a/app/assets/javascripts/search/sidebar/components/notes_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/notes_filters.vue @@ -1,4 +1,6 @@ <script> +// eslint-disable-next-line no-restricted-imports +import { mapGetters } from 'vuex'; import ArchivedFilter from './archived_filter/index.vue'; import FiltersTemplate from './filters_template.vue'; @@ -8,11 +10,14 @@ export default { ArchivedFilter, FiltersTemplate, }, + computed: { + ...mapGetters(['showArchived']), + }, }; </script> <template> <filters-template> - <archived-filter class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/sidebar/components/project_filter.vue b/app/assets/javascripts/search/sidebar/components/project_filter.vue index 76983644e605..ad1c97fbde4a 100644 --- a/app/assets/javascripts/search/sidebar/components/project_filter.vue +++ b/app/assets/javascripts/search/sidebar/components/project_filter.vue @@ -6,6 +6,7 @@ import { s__ } from '~/locale'; import { visitUrl, setUrlParams } from '~/lib/utils/url_utility'; import { ANY_OPTION, GROUP_DATA, PROJECT_DATA } from '~/search/sidebar/constants'; import SearchableDropdown from './searchable_dropdown.vue'; +import { archivedFilterData } from './archived_filter/data'; export default { name: 'ProjectFilter', @@ -63,6 +64,7 @@ export default { [PROJECT_DATA.queryParam]: project.id, nav_source: null, scope: this.currentScope, + [archivedFilterData.filterParam]: null, }; visitUrl(setUrlParams(queryParams)); diff --git a/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue b/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue index b1f386d9f4fd..e0692dbafaa9 100644 --- a/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue +++ b/app/assets/javascripts/search/sidebar/components/wiki_blobs_filters.vue @@ -1,4 +1,6 @@ <script> +// eslint-disable-next-line no-restricted-imports +import { mapGetters } from 'vuex'; import ArchivedFilter from './archived_filter/index.vue'; import FiltersTemplate from './filters_template.vue'; @@ -8,11 +10,14 @@ export default { ArchivedFilter, FiltersTemplate, }, + computed: { + ...mapGetters(['showArchived']), + }, }; </script> <template> <filters-template> - <archived-filter class="gl-mb-5" /> + <archived-filter v-if="showArchived" class="gl-mb-5" /> </filters-template> </template> diff --git a/app/assets/javascripts/search/store/getters.js b/app/assets/javascripts/search/store/getters.js index de05e9b80b21..5fb6afb63274 100644 --- a/app/assets/javascripts/search/store/getters.js +++ b/app/assets/javascripts/search/store/getters.js @@ -3,6 +3,7 @@ import { languageFilterData } from '~/search/sidebar/components/language_filter/ import { labelFilterData } from '~/search/sidebar/components/label_filter/data'; import { formatSearchResultCount, addCountOverLimit } from '~/search/store/utils'; +import { PROJECT_DATA } from '~/search/sidebar/constants'; import { GROUPS_LOCAL_STORAGE_KEY, PROJECTS_LOCAL_STORAGE_KEY, ICON_MAP } from './constants'; const queryLabelFilters = (state) => state?.query?.[labelFilterData.filterParam] || []; @@ -85,3 +86,5 @@ export const navigationItems = (state) => pill_count: `${formatSearchResultCount(item?.count)}${addCountOverLimit(item?.count)}` || '', items: [], })); + +export const showArchived = (state) => !state.query?.[PROJECT_DATA.queryParam]; diff --git a/spec/frontend/search/sidebar/components/blobs_filters_spec.js b/spec/frontend/search/sidebar/components/blobs_filters_spec.js index e42f182f4b83..3faab299c836 100644 --- a/spec/frontend/search/sidebar/components/blobs_filters_spec.js +++ b/spec/frontend/search/sidebar/components/blobs_filters_spec.js @@ -19,6 +19,7 @@ describe('GlobalSearch BlobsFilters', () => { const defaultGetters = { currentScope: () => 'blobs', + showArchived: () => true, }; const createComponent = (initialState = { searchType: SEARCH_TYPE_ADVANCED }) => { @@ -60,4 +61,15 @@ describe('GlobalSearch BlobsFilters', () => { it('renders ArchivedFilter', () => { expect(findArchivedFilter().exists()).toBe(true); }); + + describe('ShowArchived getter', () => { + beforeEach(() => { + defaultGetters.showArchived = () => false; + createComponent(); + }); + + it('hides archived filter', () => { + expect(findArchivedFilter().exists()).toBe(false); + }); + }); }); diff --git a/spec/frontend/search/sidebar/components/commits_filters_spec.js b/spec/frontend/search/sidebar/components/commits_filters_spec.js index cb47c6833efb..4752b8abfad0 100644 --- a/spec/frontend/search/sidebar/components/commits_filters_spec.js +++ b/spec/frontend/search/sidebar/components/commits_filters_spec.js @@ -1,18 +1,33 @@ import { shallowMount } from '@vue/test-utils'; -import CommitsFilters from '~/search/sidebar/components/projects_filters.vue'; +import Vue from 'vue'; +// eslint-disable-next-line no-restricted-imports +import Vuex from 'vuex'; +import CommitsFilters from '~/search/sidebar/components/commits_filters.vue'; import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue'; import FiltersTemplate from '~/search/sidebar/components/filters_template.vue'; +Vue.use(Vuex); + describe('GlobalSearch CommitsFilters', () => { let wrapper; - const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); - const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); + const defaultGetters = { + showArchived: () => true, + }; const createComponent = () => { - wrapper = shallowMount(CommitsFilters); + const store = new Vuex.Store({ + getters: defaultGetters, + }); + + wrapper = shallowMount(CommitsFilters, { + store, + }); }; + const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); + const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); + describe('Renders correctly', () => { beforeEach(() => { createComponent(); @@ -25,4 +40,15 @@ describe('GlobalSearch CommitsFilters', () => { expect(findFiltersTemplate().exists()).toBe(true); }); }); + + describe('ShowArchived getter', () => { + beforeEach(() => { + defaultGetters.showArchived = () => false; + createComponent(); + }); + + it('hides archived filter', () => { + expect(findArchivedFilter().exists()).toBe(false); + }); + }); }); diff --git a/spec/frontend/search/sidebar/components/filters_spec.js b/spec/frontend/search/sidebar/components/filters_spec.js deleted file mode 100644 index d3c774929f52..000000000000 --- a/spec/frontend/search/sidebar/components/filters_spec.js +++ /dev/null @@ -1,102 +0,0 @@ -import { shallowMount } from '@vue/test-utils'; -import Vue from 'vue'; -// eslint-disable-next-line no-restricted-imports -import Vuex from 'vuex'; -import { MOCK_QUERY } from 'jest/search/mock_data'; -import IssuesFilters from '~/search/sidebar/components/issues_filters.vue'; -import ConfidentialityFilter from '~/search/sidebar/components/confidentiality_filter/index.vue'; -import StatusFilter from '~/search/sidebar/components/status_filter/index.vue'; - -Vue.use(Vuex); - -describe('GlobalSearchSidebarFilters', () => { - let wrapper; - - const actionSpies = { - applyQuery: jest.fn(), - resetQuery: jest.fn(), - }; - - const defaultGetters = { - currentScope: () => 'issues', - }; - - const createComponent = (initialState) => { - const store = new Vuex.Store({ - state: { - urlQuery: MOCK_QUERY, - ...initialState, - }, - actions: actionSpies, - getters: defaultGetters, - }); - - wrapper = shallowMount(IssuesFilters, { - store, - }); - }; - - const findStatusFilter = () => wrapper.findComponent(StatusFilter); - const findConfidentialityFilter = () => wrapper.findComponent(ConfidentialityFilter); - - describe('Renders correctly', () => { - beforeEach(() => { - createComponent({ urlQuery: MOCK_QUERY }); - }); - it('renders StatusFilter', () => { - expect(findStatusFilter().exists()).toBe(true); - }); - - it('renders ConfidentialityFilter', () => { - expect(findConfidentialityFilter().exists()).toBe(true); - }); - }); - - describe.each` - scope | showFilter - ${'issues'} | ${true} - ${'merge_requests'} | ${false} - ${'projects'} | ${false} - ${'milestones'} | ${false} - ${'users'} | ${false} - ${'notes'} | ${false} - ${'wiki_blobs'} | ${false} - ${'blobs'} | ${false} - `(`ConfidentialityFilter`, ({ scope, showFilter }) => { - beforeEach(() => { - defaultGetters.currentScope = () => scope; - createComponent(); - }); - afterEach(() => { - defaultGetters.currentScope = () => 'issues'; - }); - - it(`does${showFilter ? '' : ' not'} render when scope is ${scope}`, () => { - expect(findConfidentialityFilter().exists()).toBe(showFilter); - }); - }); - - describe.each` - scope | showFilter - ${'issues'} | ${true} - ${'merge_requests'} | ${true} - ${'projects'} | ${false} - ${'milestones'} | ${false} - ${'users'} | ${false} - ${'notes'} | ${false} - ${'wiki_blobs'} | ${false} - ${'blobs'} | ${false} - `(`StatusFilter`, ({ scope, showFilter }) => { - beforeEach(() => { - defaultGetters.currentScope = () => scope; - createComponent(); - }); - afterEach(() => { - defaultGetters.currentScope = () => 'issues'; - }); - - it(`does${showFilter ? '' : ' not'} render when scope is ${scope}`, () => { - expect(findStatusFilter().exists()).toBe(showFilter); - }); - }); -}); diff --git a/spec/frontend/search/sidebar/components/issues_filters_spec.js b/spec/frontend/search/sidebar/components/issues_filters_spec.js index ce9c6c2bb0c3..ff5d770c5d5e 100644 --- a/spec/frontend/search/sidebar/components/issues_filters_spec.js +++ b/spec/frontend/search/sidebar/components/issues_filters_spec.js @@ -17,6 +17,7 @@ describe('GlobalSearch IssuesFilters', () => { const defaultGetters = { currentScope: () => 'issues', + showArchived: () => true, }; const createComponent = ({ initialState = {} } = {}) => { @@ -77,29 +78,18 @@ describe('GlobalSearch IssuesFilters', () => { expect(findLabelFilter().exists()).toBe(false); }); - it("doesn't render ArchivedFilter", () => { + it('does render ArchivedFilter', () => { expect(findArchivedFilter().exists()).toBe(true); }); }); - describe('Renders correctly with wrong scope', () => { + describe('ShowArchived getter', () => { beforeEach(() => { - defaultGetters.currentScope = () => 'test'; + defaultGetters.showArchived = () => false; createComponent(); }); - it("doesn't render StatusFilter", () => { - expect(findStatusFilter().exists()).toBe(false); - }); - - it("doesn't render ConfidentialityFilter", () => { - expect(findConfidentialityFilter().exists()).toBe(false); - }); - - it("doesn't render LabelFilter", () => { - expect(findLabelFilter().exists()).toBe(false); - }); - it("doesn't render ArchivedFilter", () => { + it('hides archived filter', () => { expect(findArchivedFilter().exists()).toBe(false); }); }); diff --git a/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js b/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js index 8cd3cb45a203..45357d45ed02 100644 --- a/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js +++ b/spec/frontend/search/sidebar/components/merge_requests_filters_spec.js @@ -15,6 +15,7 @@ describe('GlobalSearch MergeRequestsFilters', () => { const defaultGetters = { currentScope: () => 'merge_requests', + showArchived: () => true, }; const createComponent = (initialState = {}) => { @@ -63,16 +64,13 @@ describe('GlobalSearch MergeRequestsFilters', () => { }); }); - describe('Renders correctly with wrong scope', () => { + describe('ShowArchived getter', () => { beforeEach(() => { - defaultGetters.currentScope = () => 'test'; + defaultGetters.showArchived = () => false; createComponent(); }); - it("doesn't render StatusFilter", () => { - expect(findStatusFilter().exists()).toBe(false); - }); - it("doesn't render ArchivedFilter", () => { + it('hides archived filter', () => { expect(findArchivedFilter().exists()).toBe(false); }); }); diff --git a/spec/frontend/search/sidebar/components/milestones_filters_spec.js b/spec/frontend/search/sidebar/components/milestones_filters_spec.js index e7fcfb030f4d..6455fd59d603 100644 --- a/spec/frontend/search/sidebar/components/milestones_filters_spec.js +++ b/spec/frontend/search/sidebar/components/milestones_filters_spec.js @@ -1,16 +1,31 @@ import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; +// eslint-disable-next-line no-restricted-imports +import Vuex from 'vuex'; import MilestonesFilters from '~/search/sidebar/components/milestones_filters.vue'; import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue'; import FiltersTemplate from '~/search/sidebar/components/filters_template.vue'; +Vue.use(Vuex); + describe('GlobalSearch MilestonesFilters', () => { let wrapper; + const defaultGetters = { + showArchived: () => true, + }; + const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); const createComponent = () => { - wrapper = shallowMount(MilestonesFilters); + const store = new Vuex.Store({ + getters: defaultGetters, + }); + + wrapper = shallowMount(MilestonesFilters, { + store, + }); }; describe('Renders correctly', () => { @@ -25,4 +40,15 @@ describe('GlobalSearch MilestonesFilters', () => { expect(findFiltersTemplate().exists()).toBe(true); }); }); + + describe('ShowArchived getter', () => { + beforeEach(() => { + defaultGetters.showArchived = () => false; + createComponent(); + }); + + it('hides archived filter', () => { + expect(findArchivedFilter().exists()).toBe(false); + }); + }); }); diff --git a/spec/frontend/search/sidebar/components/notes_filters_spec.js b/spec/frontend/search/sidebar/components/notes_filters_spec.js index 2fb8e731ef57..3d336329652b 100644 --- a/spec/frontend/search/sidebar/components/notes_filters_spec.js +++ b/spec/frontend/search/sidebar/components/notes_filters_spec.js @@ -1,18 +1,33 @@ import { shallowMount } from '@vue/test-utils'; -import NotesFilters from '~/search/sidebar/components/projects_filters.vue'; +import Vue from 'vue'; +// eslint-disable-next-line no-restricted-imports +import Vuex from 'vuex'; +import NotesFilters from '~/search/sidebar/components/notes_filters.vue'; import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue'; import FiltersTemplate from '~/search/sidebar/components/filters_template.vue'; +Vue.use(Vuex); + describe('GlobalSearch ProjectsFilters', () => { let wrapper; - const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); - const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); + const defaultGetters = { + showArchived: () => true, + }; const createComponent = () => { - wrapper = shallowMount(NotesFilters); + const store = new Vuex.Store({ + getters: defaultGetters, + }); + + wrapper = shallowMount(NotesFilters, { + store, + }); }; + const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); + const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); + describe('Renders correctly', () => { beforeEach(() => { createComponent(); @@ -25,4 +40,15 @@ describe('GlobalSearch ProjectsFilters', () => { expect(findFiltersTemplate().exists()).toBe(true); }); }); + + describe('ShowArchived getter', () => { + beforeEach(() => { + defaultGetters.showArchived = () => false; + createComponent(); + }); + + it('hides archived filter', () => { + expect(findArchivedFilter().exists()).toBe(false); + }); + }); }); diff --git a/spec/frontend/search/sidebar/components/project_filter_spec.js b/spec/frontend/search/sidebar/components/project_filter_spec.js index 817ec77380f4..11ef6213d400 100644 --- a/spec/frontend/search/sidebar/components/project_filter_spec.js +++ b/spec/frontend/search/sidebar/components/project_filter_spec.js @@ -80,6 +80,7 @@ describe('ProjectFilter', () => { it('calls setUrlParams with null, no group id, nav_source null, then calls visitUrl', () => { expect(setUrlParams).toHaveBeenCalledWith({ + include_archived: null, [PROJECT_DATA.queryParam]: null, nav_source: null, scope: CURRENT_SCOPE, @@ -100,6 +101,7 @@ describe('ProjectFilter', () => { it('calls setUrlParams with project id, group id, nav_source null, then calls visitUrl', () => { expect(setUrlParams).toHaveBeenCalledWith({ [GROUP_DATA.queryParam]: MOCK_PROJECT.namespace.id, + include_archived: null, [PROJECT_DATA.queryParam]: MOCK_PROJECT.id, nav_source: null, scope: CURRENT_SCOPE, diff --git a/spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js b/spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js new file mode 100644 index 000000000000..32ddf74bd267 --- /dev/null +++ b/spec/frontend/search/sidebar/components/wiki_blobs_filters_spec.js @@ -0,0 +1,54 @@ +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; +// eslint-disable-next-line no-restricted-imports +import Vuex from 'vuex'; +import WikiBlobsFilters from '~/search/sidebar/components/wiki_blobs_filters.vue'; +import ArchivedFilter from '~/search/sidebar/components/archived_filter/index.vue'; +import FiltersTemplate from '~/search/sidebar/components/filters_template.vue'; + +Vue.use(Vuex); + +describe('GlobalSearch WikiBlobsFilters', () => { + let wrapper; + + const defaultGetters = { + showArchived: () => true, + }; + + const createComponent = () => { + const store = new Vuex.Store({ + getters: defaultGetters, + }); + + wrapper = shallowMount(WikiBlobsFilters, { + store, + }); + }; + + const findArchivedFilter = () => wrapper.findComponent(ArchivedFilter); + const findFiltersTemplate = () => wrapper.findComponent(FiltersTemplate); + + describe('Renders correctly', () => { + beforeEach(() => { + createComponent(); + }); + it('renders ArchivedFilter', () => { + expect(findArchivedFilter().exists()).toBe(true); + }); + + it('renders FiltersTemplate', () => { + expect(findFiltersTemplate().exists()).toBe(true); + }); + }); + + describe('ShowArchived getter', () => { + beforeEach(() => { + defaultGetters.showArchived = () => false; + createComponent(); + }); + + it('hides archived filter', () => { + expect(findArchivedFilter().exists()).toBe(false); + }); + }); +}); diff --git a/spec/frontend/search/store/getters_spec.js b/spec/frontend/search/store/getters_spec.js index 8e988ce5c4a5..e6c0fd4e162c 100644 --- a/spec/frontend/search/store/getters_spec.js +++ b/spec/frontend/search/store/getters_spec.js @@ -153,4 +153,15 @@ describe('Global Search Store Getters', () => { expect(getters.unappliedNewLabels(state).map(({ key }) => key)).toStrictEqual(['6', '73']); }); }); + describe('showArchived', () => { + it('returns true project_id is NOT in query', () => { + state.query.project_id = undefined; + expect(getters.showArchived(state)).toBe(true); + }); + + it('returns false project_id is in query', () => { + state.query.project_id = 'test'; + expect(getters.showArchived(state)).toBe(false); + }); + }); }); -- GitLab