75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
import {
|
|
PROJECT_GROUP_PAGE_SIZE,
|
|
canProjectGroupShowLess,
|
|
canProjectGroupShowMore,
|
|
getNextProjectGroupVisibleCount,
|
|
getPreviousProjectGroupVisibleCount,
|
|
getProjectGroupVisibleCount,
|
|
syncProjectGroupVisibleCountByKey,
|
|
} from '../../../../src/renderer/components/sidebar/projectGroupPagination';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
describe('projectGroupPagination', () => {
|
|
it('defaults to the first page and respects small groups', () => {
|
|
expect(getProjectGroupVisibleCount(undefined, 0)).toBe(0);
|
|
expect(getProjectGroupVisibleCount(undefined, 3)).toBe(3);
|
|
expect(getProjectGroupVisibleCount(undefined, 12)).toBe(PROJECT_GROUP_PAGE_SIZE);
|
|
});
|
|
|
|
it('expands in steps of five and clamps to the group size', () => {
|
|
let visibleCount = getProjectGroupVisibleCount(undefined, 17);
|
|
expect(visibleCount).toBe(5);
|
|
|
|
visibleCount = getNextProjectGroupVisibleCount(visibleCount, 17);
|
|
expect(visibleCount).toBe(10);
|
|
|
|
visibleCount = getNextProjectGroupVisibleCount(visibleCount, 17);
|
|
expect(visibleCount).toBe(15);
|
|
|
|
visibleCount = getNextProjectGroupVisibleCount(visibleCount, 17);
|
|
expect(visibleCount).toBe(17);
|
|
|
|
expect(canProjectGroupShowMore(visibleCount, 17)).toBe(false);
|
|
});
|
|
|
|
it('collapses in steps of five and never goes below the first page', () => {
|
|
expect(getPreviousProjectGroupVisibleCount(15, 17)).toBe(10);
|
|
expect(getPreviousProjectGroupVisibleCount(10, 17)).toBe(5);
|
|
expect(getPreviousProjectGroupVisibleCount(5, 17)).toBe(5);
|
|
|
|
expect(canProjectGroupShowLess(5, 17)).toBe(false);
|
|
expect(canProjectGroupShowLess(10, 17)).toBe(true);
|
|
});
|
|
|
|
it('clamps existing counts when the group shrinks and removes missing groups', () => {
|
|
const previousVisibleCounts = {
|
|
active: 15,
|
|
compact: 7,
|
|
removed: 10,
|
|
};
|
|
|
|
expect(
|
|
syncProjectGroupVisibleCountByKey(previousVisibleCounts, [
|
|
{ projectKey: 'active', taskCount: 9 },
|
|
{ projectKey: 'compact', taskCount: 4 },
|
|
])
|
|
).toEqual({
|
|
active: 9,
|
|
compact: 4,
|
|
});
|
|
});
|
|
|
|
it('returns the same object when nothing changes', () => {
|
|
const previousVisibleCounts = {
|
|
active: 10,
|
|
compact: 4,
|
|
};
|
|
|
|
const nextVisibleCounts = syncProjectGroupVisibleCountByKey(previousVisibleCounts, [
|
|
{ projectKey: 'active', taskCount: 12 },
|
|
{ projectKey: 'compact', taskCount: 4 },
|
|
]);
|
|
|
|
expect(nextVisibleCounts).toBe(previousVisibleCounts);
|
|
});
|
|
});
|