Files
admin-web/src/shared/utils/uiLayoutPreference.test.ts
T

66 lines
2.3 KiB
TypeScript
Raw Normal View History

2026-08-06 19:03:13 +08:00
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'] })
})
2026-08-12 14:08:33 +08:00
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([])
})
2026-08-06 19:03:13 +08:00
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'])
})
})