diff --git a/app/assets/javascripts/search/sidebar/components/blobs_filters.vue b/app/assets/javascripts/search/sidebar/components/blobs_filters.vue index c04224c0cb1f80bd5880ac46f370fa0f293add51..f414e39a5b5f226fee70a68c3f723d165b17f16d 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 4f9fdbe955170c47b0a1298fb3e1793fea5b808a..cb267ec5c310b0ab8059bcd8f29d6f85073db203 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 d815b68b98a65945137b9571198d69688dc2fe89..dd01c0fe3073749755a4f5f953fa62b112244f84 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 18074db760345ca1c4bba1eab1f7f3258128bccc..c20b35d2c18c2776452c6330936b3cea2c2e94ac 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 098e2980c3f7368dbbd2c0587fa27d6fda962c80..169cd3b962c5934d26d1aaa8f6f5a423614c7b3a 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 3a9f582d554622659d779e8b566ce72c05e50ce5..90f61468188537d7ba34829d36ff5ce2a5b52d18 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 76983644e605b8c44d853df4273390ece224732b..ad1c97fbde4aee48266b22f26b930f65b76e19aa 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 b1f386d9f4fd1098a68ca9fff1d4505ade5e27ee..e0692dbafaa99ac121ddd6f19e75e1010d23eee1 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 de05e9b80b212951e68569bfa533d53123d7144b..5fb6afb6327491ffd87f4aa0649ea5e30b01f756 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 e42f182f4b835710e14b1c2321afda46e21ab9d4..3faab299c8363e728fa598699fed7350aab5e6c3 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 cb47c6833efb006e53baef477aaaeca3e1569d7b..4752b8abfad04a313a2feec0955f4ffece137691 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 d3c774929f52cdd167bdae7bec5f5c97ba9135a1..0000000000000000000000000000000000000000 --- 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 ce9c6c2bb0c3e52c6b8f5d6e09cad9895d387e0b..ff5d770c5d5ef2b33458e58de738d37f49e5d1c0 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 8cd3cb45a20382e203e07586620f8b6d6ecf2864..45357d45ed029e9f979f0a915a1cd3d9b00a6cb5 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 e7fcfb030f4ddd9a1dc3177008f39624feb883fd..6455fd59d60357050d84db7a27a1dc1239cdd761 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 2fb8e731ef578b226aab553d565584b815cb1a68..3d336329652ba66e9fb540996433b92a18a9156f 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 817ec77380f47d5e8babdd45e56a8263adc63742..11ef6213d400a2e5bbdaf8f88ee4884bcce4c031 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 0000000000000000000000000000000000000000..32ddf74bd267647864b480e893265ba814e1263e --- /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 8e988ce5c4a56f8c85ab593abffe8843eec95b0c..e6c0fd4e162c1ae0d1732879a205c622ba20ce9b 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); + }); + }); });