29 lines
1.5 KiB
TypeScript
29 lines
1.5 KiB
TypeScript
import { defaultDashboardLayout, normalizeDashboardLayout, WIDGETS } from './dashboardLayout';
|
|
|
|
test('default catalogue preserves every section and supported widths', () => {
|
|
const layout = defaultDashboardLayout();
|
|
expect(layout.widgets.map(w => w.id)).toEqual(['cards', 'attention', 'funnel', 'activity', 'stageAge', 'sources', 'salary', 'companies', 'skills']);
|
|
expect(layout.widgets.every(w => w.visible)).toBe(true);
|
|
expect(WIDGETS[0].sizes).toEqual(['full']);
|
|
layout.widgets[0].visible = false;
|
|
expect(defaultDashboardLayout().widgets[0].visible).toBe(true);
|
|
});
|
|
|
|
test('saved layouts retain known order, reject duplicates and append missing sections hidden', () => {
|
|
const result = normalizeDashboardLayout({ version: 1, revision: 7, widgets: [
|
|
{ id: 'skills', visible: false, size: 'full' },
|
|
{ id: 'unknown', visible: true, size: 'full' },
|
|
{ id: 'skills', visible: true, size: 'standard' },
|
|
{ id: 'cards', visible: 'yes', size: 'standard' },
|
|
] });
|
|
expect(result.revision).toBe(7);
|
|
expect(result.widgets[0]).toEqual({ id: 'skills', visible: false, size: 'full' });
|
|
expect(result.widgets[1]).toEqual({ id: 'cards', visible: false, size: 'full' });
|
|
expect(result.widgets.slice(2).every(w => !w.visible)).toBe(true);
|
|
expect(result.widgets).toHaveLength(9);
|
|
});
|
|
|
|
test.each([null, {}, { version: 2, revision: 8, widgets: [] }, { version: 1, revision: -1, widgets: [] }])('invalid input has safe defaults: %j', input => {
|
|
expect(normalizeDashboardLayout(input)).toEqual(defaultDashboardLayout());
|
|
});
|