From c435ee95c0e0ee8a07f2fcfaabcd87cce5ba5567 Mon Sep 17 00:00:00 2001 From: wheval Date: Mon, 29 Jun 2026 20:38:47 +0100 Subject: [PATCH] test(preferences): add integration test for sort order persistence across re-renders - Saved 'desc' sort preference is read back correctly after simulated remount - Default 'asc' sort applied when no preference is stored in localStorage - Overwriting a preference reflects the new value on next read - Clearing storage resets to the default sort order - Sort key is isolated from unrelated localStorage entries Closes accesslayerorg/accesslayer-client#478 --- .../preferences.sort.integration.test.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/utils/__tests__/preferences.sort.integration.test.ts diff --git a/src/utils/__tests__/preferences.sort.integration.test.ts b/src/utils/__tests__/preferences.sort.integration.test.ts new file mode 100644 index 0000000..7f121a2 --- /dev/null +++ b/src/utils/__tests__/preferences.sort.integration.test.ts @@ -0,0 +1,63 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { getPreference, setPreference } from '../preferences.utils'; + +const SORT_KEY = 'creator-list:sort-order'; +type SortOrder = 'asc' | 'desc'; +const DEFAULT_SORT: SortOrder = 'asc'; + +/** + * Simulates an unmount + remount cycle by clearing and re-reading from localStorage, + * mirroring what happens when a component that calls getPreference re-renders fresh. + */ +function remount(key: string, defaultValue: SortOrder): SortOrder { + return getPreference(key, defaultValue); +} + +describe('preferences — sort order persistence across re-renders', () => { + beforeEach(() => { + window.localStorage.clear(); + }); + + it('reads back the saved sort preference after remount', () => { + setPreference(SORT_KEY, 'desc'); + + const restored = remount(SORT_KEY, DEFAULT_SORT); + + expect(restored).toBe('desc'); + }); + + it('applies the default sort when no preference is stored', () => { + const restored = remount(SORT_KEY, DEFAULT_SORT); + + expect(restored).toBe(DEFAULT_SORT); + }); + + it('overwriting a preference is reflected on the next remount', () => { + setPreference(SORT_KEY, 'desc'); + setPreference(SORT_KEY, 'asc'); + + const restored = remount(SORT_KEY, DEFAULT_SORT); + + expect(restored).toBe('asc'); + }); + + it('clearing storage resets to the default sort on remount', () => { + setPreference(SORT_KEY, 'desc'); + + window.localStorage.clear(); + + const restored = remount(SORT_KEY, DEFAULT_SORT); + + expect(restored).toBe(DEFAULT_SORT); + }); + + it('persists sort preference alongside unrelated keys without interference', () => { + setPreference('other-key', { theme: 'dark' }); + setPreference(SORT_KEY, 'desc'); + setPreference('another-key', 42); + + const restored = remount(SORT_KEY, DEFAULT_SORT); + + expect(restored).toBe('desc'); + }); +});