summaryrefslogtreecommitdiff
path: root/spec/frontend/packages_and_registries/shared/utils_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/packages_and_registries/shared/utils_spec.js')
-rw-r--r--spec/frontend/packages_and_registries/shared/utils_spec.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/spec/frontend/packages_and_registries/shared/utils_spec.js b/spec/frontend/packages_and_registries/shared/utils_spec.js
new file mode 100644
index 00000000000..bbc8791ca21
--- /dev/null
+++ b/spec/frontend/packages_and_registries/shared/utils_spec.js
@@ -0,0 +1,59 @@
+import { FILTERED_SEARCH_TERM } from '~/packages_and_registries/shared/constants';
+import {
+ getQueryParams,
+ keyValueToFilterToken,
+ searchArrayToFilterTokens,
+ extractFilterAndSorting,
+} from '~/packages_and_registries/shared/utils';
+
+describe('Packages And Registries shared utils', () => {
+ describe('getQueryParams', () => {
+ it('returns an object from a query string, with arrays', () => {
+ const queryString = 'foo=bar&baz[]=1&baz[]=2';
+
+ expect(getQueryParams(queryString)).toStrictEqual({ foo: 'bar', baz: ['1', '2'] });
+ });
+ });
+
+ describe('keyValueToFilterToken', () => {
+ it('returns an object in the correct form', () => {
+ const type = 'myType';
+ const data = 1;
+
+ expect(keyValueToFilterToken(type, data)).toStrictEqual({ type, value: { data } });
+ });
+ });
+
+ describe('searchArrayToFilterTokens', () => {
+ it('returns an array of objects in the correct form', () => {
+ const search = ['one', 'two'];
+
+ expect(searchArrayToFilterTokens(search)).toStrictEqual([
+ { type: FILTERED_SEARCH_TERM, value: { data: 'one' } },
+ { type: FILTERED_SEARCH_TERM, value: { data: 'two' } },
+ ]);
+ });
+ });
+ describe('extractFilterAndSorting', () => {
+ it.each`
+ search | type | sort | orderBy | result
+ ${['one']} | ${'myType'} | ${'asc'} | ${'foo'} | ${{ sorting: { sort: 'asc', orderBy: 'foo' }, filters: [{ type: 'type', value: { data: 'myType' } }, { type: FILTERED_SEARCH_TERM, value: { data: 'one' } }] }}
+ ${['one']} | ${null} | ${'asc'} | ${'foo'} | ${{ sorting: { sort: 'asc', orderBy: 'foo' }, filters: [{ type: FILTERED_SEARCH_TERM, value: { data: 'one' } }] }}
+ ${[]} | ${null} | ${'asc'} | ${'foo'} | ${{ sorting: { sort: 'asc', orderBy: 'foo' }, filters: [] }}
+ ${null} | ${null} | ${'asc'} | ${'foo'} | ${{ sorting: { sort: 'asc', orderBy: 'foo' }, filters: [] }}
+ ${null} | ${null} | ${null} | ${'foo'} | ${{ sorting: { orderBy: 'foo' }, filters: [] }}
+ ${null} | ${null} | ${null} | ${null} | ${{ sorting: {}, filters: [] }}
+ `(
+ 'returns sorting and filters objects in the correct form',
+ ({ search, type, sort, orderBy, result }) => {
+ const queryObject = {
+ search,
+ type,
+ sort,
+ orderBy,
+ };
+ expect(extractFilterAndSorting(queryObject)).toStrictEqual(result);
+ },
+ );
+ });
+});