portainer/app/react/common/api/common.test.ts

118 lines
2.7 KiB
TypeScript

import {
queryOptionsFromTableState,
queryParamsFromQueryOptions,
} from './listQueryParams';
import {
withPaginationHeaders,
withPaginationQueryParams,
} from './pagination.types';
import {
makeIsSortTypeFunc,
sortOptionsFromColumns,
withSortQuery,
} from './sort.types';
const sortOptions = sortOptionsFromColumns([
{ enableSorting: true },
{ id: 'one' },
{ id: 'two', enableSorting: true },
{ accessorKey: 'three', enableSorting: true },
{ id: 'four', enableSorting: true, accessorKey: 'four_key' },
]);
describe('listQueryParams', () => {
test('queryOptionsFromTableState', () => {
const fns = {
setPageSize: () => {},
setSearch: () => {},
setSortBy: () => {},
};
expect(
queryOptionsFromTableState(
{
page: 5,
pageSize: 10,
search: 'something',
sortBy: { id: 'one', desc: false },
...fns,
},
sortOptions
)
).toStrictEqual({
search: 'something',
sort: 'one',
order: 'asc',
page: 5,
pageLimit: 10,
});
});
test('queryParamsFromQueryOptions', () => {
expect(
queryParamsFromQueryOptions({
search: 'something',
page: 5,
pageLimit: 10,
sort: 'one',
order: 'asc',
})
).toStrictEqual({
search: 'something',
sort: 'one',
order: 'asc',
start: 50,
limit: 10,
});
});
});
describe('pagination.types', () => {
test('withPaginationQueryParams', () => {
expect(withPaginationQueryParams({ page: 5, pageLimit: 10 })).toStrictEqual(
{
start: 50,
limit: 10,
}
);
});
test('withPaginationHeaders', () => {
expect(
withPaginationHeaders({
data: [],
headers: { 'x-total-count': 10, 'x-total-available': 100 },
})
).toStrictEqual({
data: [],
totalCount: 10,
totalAvailable: 100,
});
});
});
describe('sort.types', () => {
test('makeIsSortType', () => {
const isSortType = makeIsSortTypeFunc(sortOptions);
expect(typeof isSortType).toBe('function');
expect(isSortType('one')).toBe(true);
expect(isSortType('something_else')).toBe(false);
});
test('withSortQuery', () => {
expect(
withSortQuery({ id: 'one', desc: false }, sortOptions)
).toStrictEqual({ sort: 'one', order: 'asc' });
expect(
withSortQuery({ id: 'three', desc: true }, sortOptions)
).toStrictEqual({ sort: 'three', order: 'desc' });
expect(
withSortQuery({ id: 'something_else', desc: true }, sortOptions)
).toStrictEqual({ sort: undefined, order: 'desc' });
});
test('sortOptionsFromColumns', () => {
expect(sortOptions).toEqual(['one', 'two', 'three', 'four']);
});
});