2022-02-15 07:14:49 -05:00
|
|
|
import { formatJobCount, tableField, getPaginationVariables } from '~/runner/utils';
|
|
|
|
|
|
|
|
describe('~/runner/utils', () => {
|
|
|
|
describe('formatJobCount', () => {
|
|
|
|
it('formats a number', () => {
|
|
|
|
expect(formatJobCount(1)).toBe('1');
|
|
|
|
expect(formatJobCount(99)).toBe('99');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('formats a large count', () => {
|
|
|
|
expect(formatJobCount(1000)).toBe('1,000');
|
|
|
|
expect(formatJobCount(1001)).toBe('1,000+');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('returns an empty string for non-numeric values', () => {
|
|
|
|
expect(formatJobCount(undefined)).toBe('');
|
|
|
|
expect(formatJobCount(null)).toBe('');
|
|
|
|
expect(formatJobCount('number')).toBe('');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('tableField', () => {
|
|
|
|
it('a field with options', () => {
|
|
|
|
expect(tableField({ key: 'name' })).toEqual({
|
|
|
|
key: 'name',
|
|
|
|
label: '',
|
|
|
|
tdAttr: { 'data-testid': 'td-name' },
|
|
|
|
thClass: expect.any(Array),
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('a field with a label', () => {
|
|
|
|
const label = 'A field name';
|
|
|
|
|
|
|
|
expect(tableField({ key: 'name', label })).toMatchObject({
|
|
|
|
label,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('a field with custom classes', () => {
|
|
|
|
const mockClasses = ['foo', 'bar'];
|
|
|
|
|
|
|
|
expect(tableField({ thClasses: mockClasses })).toMatchObject({
|
|
|
|
thClass: expect.arrayContaining(mockClasses),
|
|
|
|
});
|
|
|
|
});
|
2022-03-30 17:09:29 -04:00
|
|
|
|
|
|
|
it('a field with custom options', () => {
|
|
|
|
expect(tableField({ foo: 'bar' })).toMatchObject({ foo: 'bar' });
|
|
|
|
});
|
2022-02-15 07:14:49 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
describe('getPaginationVariables', () => {
|
|
|
|
const after = 'AFTER_CURSOR';
|
|
|
|
const before = 'BEFORE_CURSOR';
|
|
|
|
|
|
|
|
it.each`
|
|
|
|
case | pagination | pageSize | variables
|
|
|
|
${'next page'} | ${{ after }} | ${undefined} | ${{ after, first: 10 }}
|
|
|
|
${'prev page'} | ${{ before }} | ${undefined} | ${{ before, last: 10 }}
|
|
|
|
${'first page'} | ${{}} | ${undefined} | ${{ first: 10 }}
|
|
|
|
${'next page with N items'} | ${{ after }} | ${20} | ${{ after, first: 20 }}
|
|
|
|
${'prev page with N items'} | ${{ before }} | ${20} | ${{ before, last: 20 }}
|
|
|
|
${'first page with N items'} | ${{}} | ${20} | ${{ first: 20 }}
|
|
|
|
`('navigates to $case', ({ pagination, pageSize, variables }) => {
|
|
|
|
expect(getPaginationVariables(pagination, pageSize)).toEqual(variables);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|