diff --git a/app/assets/javascripts/import_entities/import_groups/constants.js b/app/assets/javascripts/import_entities/import_groups/constants.js index 870544fca9228e6627c680c0587ecd846b344c55..ea3ee1fe69c167bd9dd883141409304ef0408da1 100644 --- a/app/assets/javascripts/import_entities/import_groups/constants.js +++ b/app/assets/javascripts/import_entities/import_groups/constants.js @@ -128,3 +128,9 @@ export const PLACEHOLDER_SORT_STATUS_DESC = 'STATUS_DESC'; export const PLACEHOLDER_SORT_STATUS_ASC = 'STATUS_ASC'; export const PLACEHOLDER_SORT_SOURCE_NAME_ASC = 'SOURCE_NAME_ASC'; export const PLACEHOLDER_SORT_SOURCE_NAME_DESC = 'SOURCE_NAME_DESC'; +export const PLACEHOLDER_SORT_VALUES = [ + PLACEHOLDER_SORT_STATUS_DESC, + PLACEHOLDER_SORT_STATUS_ASC, + PLACEHOLDER_SORT_SOURCE_NAME_ASC, + PLACEHOLDER_SORT_SOURCE_NAME_DESC, +]; diff --git a/app/assets/javascripts/members/placeholders/components/app.vue b/app/assets/javascripts/members/placeholders/components/app.vue index cfdfa90a227668ebed139fd8d4744e5d23a3ea74..366fdbe1e2712ef24d44daae7912f70793ec51cb 100644 --- a/app/assets/javascripts/members/placeholders/components/app.vue +++ b/app/assets/javascripts/members/placeholders/components/app.vue @@ -32,6 +32,7 @@ import { PLACEHOLDER_SORT_STATUS_ASC, PLACEHOLDER_SORT_SOURCE_NAME_ASC, PLACEHOLDER_SORT_SOURCE_NAME_DESC, + PLACEHOLDER_SORT_VALUES, PLACEHOLDER_TAB_AWAITING, PLACEHOLDER_TAB_REASSIGNED, } from '~/import_entities/import_groups/constants'; @@ -198,7 +199,7 @@ export default { this.filterParams = { ...queryParams }; - if (sort) { + if (sort && PLACEHOLDER_SORT_VALUES.includes(sort)) { this.sort = sort || PLACEHOLDER_SORT_SOURCE_NAME_ASC; } diff --git a/spec/frontend/members/placeholders/components/app_spec.js b/spec/frontend/members/placeholders/components/app_spec.js index d686ff99689aa241c92e8ba299cff801ba5d2573..31f41db3077f5b7c554ee0e3bcbb091410e3c76d 100644 --- a/spec/frontend/members/placeholders/components/app_spec.js +++ b/spec/frontend/members/placeholders/components/app_spec.js @@ -141,6 +141,17 @@ describe('PlaceholdersTabApp', () => { }); }); + describe('with invalid sort query', () => { + beforeEach(() => { + setWindowLocation('?sort=last_joined'); + createComponent(); + }); + + it('falls back to default sort for FilteredSearchBar', () => { + expect(findFilteredSearchBar().props('initialSortBy')).toBe('SOURCE_NAME_ASC'); + }); + }); + describe('with status, search and sort queries present on load', () => { beforeEach(() => { setWindowLocation('?status=failed&search=foo&sort=STATUS_ASC');