mirror of
https://github.com/nimbold/Firelink.git
synced 2026-08-09 10:49:29 +00:00
109 lines
3.1 KiB
TypeScript
109 lines
3.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
DEFAULT_COLUMN_ALIGNMENTS,
|
|
DEFAULT_COLUMN_ORDER,
|
|
DEFAULT_COLUMN_WIDTHS,
|
|
buildColumnGridTemplate,
|
|
getDownloadActionPosition,
|
|
getColumnGridColumn,
|
|
normalizeColumnAlignments,
|
|
normalizeColumnOrder,
|
|
normalizeColumnWidths,
|
|
} from './downloadTableColumns';
|
|
|
|
describe('download table column preferences', () => {
|
|
it('normalizes a persisted order without losing or duplicating columns', () => {
|
|
expect(normalizeColumnOrder(['Status', 'Status', 'not-a-column', 'File Name'])).toEqual([
|
|
'Status',
|
|
'File Name',
|
|
'Size',
|
|
'Speed',
|
|
'ETA',
|
|
'Date Added',
|
|
]);
|
|
});
|
|
|
|
it('clamps persisted widths to column minimums and restores malformed entries', () => {
|
|
expect(normalizeColumnWidths([10, 70, Number.POSITIVE_INFINITY, 80, '48', 140])).toEqual([
|
|
160,
|
|
70,
|
|
220,
|
|
80,
|
|
80,
|
|
144,
|
|
]);
|
|
|
|
expect(normalizeColumnWidths([0, 100, 220, 100, 80, 170])[0]).toBe(160);
|
|
});
|
|
|
|
it('keeps only supported positional alignment values', () => {
|
|
expect(normalizeColumnAlignments({
|
|
'File Name': 'center',
|
|
Size: 'right',
|
|
Status: 'invalid',
|
|
Speed: 'left',
|
|
})).toEqual({
|
|
...DEFAULT_COLUMN_ALIGNMENTS,
|
|
'File Name': 'center',
|
|
Size: 'right',
|
|
Speed: 'left',
|
|
});
|
|
});
|
|
|
|
it('restores the default order for malformed persisted data', () => {
|
|
expect(normalizeColumnOrder(null)).toEqual([...DEFAULT_COLUMN_ORDER]);
|
|
expect(normalizeColumnAlignments(null)).toEqual(DEFAULT_COLUMN_ALIGNMENTS);
|
|
});
|
|
|
|
it('keeps every data column fixed while reserving a flexible fill track after them', () => {
|
|
expect(buildColumnGridTemplate([...DEFAULT_COLUMN_ORDER], [...DEFAULT_COLUMN_WIDTHS])).toBe(
|
|
'340px 100px 220px 100px 80px 170px minmax(0, 1fr)'
|
|
);
|
|
expect(getColumnGridColumn('Date Added', [...DEFAULT_COLUMN_ORDER])).toBe('6');
|
|
expect(getColumnGridColumn('Date Added', ['Date Added', ...DEFAULT_COLUMN_ORDER.slice(0, -1)])).toBeUndefined();
|
|
expect(getColumnGridColumn('ETA', ['Date Added', 'File Name', 'Size', 'Status', 'Speed', 'ETA'])).toBe('6');
|
|
});
|
|
|
|
it('keeps row actions inside the visible row edge while preserving viewport anchoring for clipped rows', () => {
|
|
const viewport = { top: 0, right: 800, bottom: 600, left: 0 };
|
|
expect(getDownloadActionPosition(
|
|
{ top: 40, right: 1000, bottom: 72, left: -200 },
|
|
viewport,
|
|
viewport,
|
|
800
|
|
)).toMatchObject({
|
|
right: 8,
|
|
height: 28,
|
|
visibility: 'visible',
|
|
});
|
|
|
|
expect(getDownloadActionPosition(
|
|
{ top: 40, right: 400, bottom: 72, left: 100 },
|
|
viewport,
|
|
viewport,
|
|
800,
|
|
16
|
|
)).toMatchObject({
|
|
right: 416,
|
|
visibility: 'visible',
|
|
});
|
|
|
|
expect(getDownloadActionPosition(
|
|
{ top: 40, right: 400, bottom: 72, left: 100 },
|
|
viewport,
|
|
viewport,
|
|
800
|
|
)).toMatchObject({
|
|
right: 408,
|
|
visibility: 'visible',
|
|
});
|
|
|
|
expect(getDownloadActionPosition(
|
|
{ top: 40, right: -20, bottom: 72, left: -300 },
|
|
viewport,
|
|
viewport,
|
|
800
|
|
).visibility).toBe('hidden');
|
|
});
|
|
});
|