import { beforeEach, describe, expect, it } from 'vitest' import { preferenceStorageKey, readLayoutPreference, reconcileOrder, removeLayoutPreference, writeLayoutPreference, } from './uiLayoutPreference' describe('UI layout preferences', () => { beforeEach(() => localStorage.clear()) it('reconciles stored order with the current stable keys', () => { expect(reconcileOrder(['actions', 'name', 'status', 'createdAt'], ['status', 'removed', 'name', 'status'])) .toEqual(['status', 'name', 'actions', 'createdAt']) }) it('falls back safely when cached JSON is invalid', () => { localStorage.setItem(preferenceStorageKey('table', 'user-1', 'customers'), '{broken') expect(readLayoutPreference('table', 'user-1', 'customers', ['actions', 'name'], ['name'])) .toEqual({ version: 1, order: ['actions', 'name'], hidden: ['name'] }) }) it('hides newly introduced default-hidden fields without overriding existing visibility choices', () => { writeLayoutPreference('table', 'user-1', 'roles', { version: 1, order: ['actions', 'role', 'status'], hidden: ['status'], }) expect(readLayoutPreference( 'table', 'user-1', 'roles', ['actions', 'role', 'roleCode', 'status'], ['roleCode', 'status'], )).toEqual({ version: 1, order: ['actions', 'role', 'status', 'roleCode'], hidden: ['status', 'roleCode'], }) writeLayoutPreference('table', 'user-1', 'roles', { version: 1, order: ['actions', 'role', 'roleCode', 'status'], hidden: [], }) expect(readLayoutPreference( 'table', 'user-1', 'roles', ['actions', 'role', 'roleCode', 'status'], ['roleCode'], ).hidden).toEqual([]) }) it('keeps preferences isolated by user and removes them on reset', () => { writeLayoutPreference('query', 'user-1', 'orders', { version: 1, order: ['status', 'keyword'], hidden: [] }) expect(readLayoutPreference('query', 'user-1', 'orders', ['keyword', 'status']).order).toEqual(['status', 'keyword']) expect(readLayoutPreference('query', 'user-2', 'orders', ['keyword', 'status']).order).toEqual(['keyword', 'status']) removeLayoutPreference('query', 'user-1', 'orders') expect(readLayoutPreference('query', 'user-1', 'orders', ['keyword', 'status']).order).toEqual(['keyword', 'status']) }) })