| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // @vitest-environment jsdom
- /**
- * createLayoutStore unit account: init shape, the action write set (clamp
- * inside actions), and the absence of browser persistence. Uses the
- * test-sanctioned path: factory self-call + .create() gives the
- * real engine instance (same create path as production).
- */
- import { beforeEach, describe, expect, it } from 'vitest'
- import { createLayoutStore } from '@deepseek-ai/dsh-client-ui-layout/src/client/stores.ts'
- import {
- DETAILS_DEFAULT, DETAILS_MAX, DETAILS_MIN,
- SIDEBAR_DEFAULT, SIDEBAR_MAX, SIDEBAR_MIN,
- } from '@deepseek-ai/dsh-client-ui-layout/src/client/columns.ts'
- const PERSIST_KEY = 'dsh.layout.panels'
- beforeEach(() => { localStorage.clear() })
- describe('createLayoutStore', () => {
- it('initializes the sidebar at its default width and details closed', () => {
- const { store } = createLayoutStore().create()
- expect(store.getSnapshot()).toEqual({ sidebar: SIDEBAR_DEFAULT, details: 0 })
- })
- it('each create() is an independent instance (factory is not a singleton)', () => {
- const a = createLayoutStore().create()
- const b = createLayoutStore().create()
- a.actions.setSidebar(400)
- expect(b.store.getSnapshot().sidebar).toBe(SIDEBAR_DEFAULT)
- })
- it('setSidebar/setDetails clamp into the contract ranges', () => {
- const { store, actions } = createLayoutStore().create()
- actions.setSidebar(1)
- expect(store.getSnapshot().sidebar).toBe(SIDEBAR_MIN)
- actions.setSidebar(9999)
- expect(store.getSnapshot().sidebar).toBe(SIDEBAR_MAX)
- actions.setDetails(1)
- expect(store.getSnapshot().details).toBe(DETAILS_MIN)
- actions.setDetails(9999)
- expect(store.getSnapshot().details).toBe(DETAILS_MAX)
- })
- it('toggleSidebar flips closed <-> contract default (drag width forgotten)', () => {
- const { store, actions } = createLayoutStore().create()
- actions.setSidebar(400)
- actions.toggleSidebar()
- expect(store.getSnapshot().sidebar).toBe(0)
- actions.toggleSidebar()
- expect(store.getSnapshot().sidebar).toBe(SIDEBAR_DEFAULT)
- })
- it('openDetails uses the contract default, preserves an open width, and closeDetails zeroes', () => {
- const { store, actions } = createLayoutStore().create()
- actions.openDetails()
- expect(store.getSnapshot().details).toBe(DETAILS_DEFAULT)
- actions.setDetails(500)
- actions.openDetails()
- expect(store.getSnapshot().details).toBe(500)
- actions.closeDetails()
- expect(store.getSnapshot().details).toBe(0)
- })
- it('does not persist panel geometry', () => {
- const first = createLayoutStore().create()
- first.actions.setSidebar(400)
- first.actions.openDetails()
- first.actions.setDetails(500)
- expect(localStorage.getItem(PERSIST_KEY)).toBeNull()
- const second = createLayoutStore().create()
- expect(second.store.getSnapshot()).toEqual({
- sidebar: SIDEBAR_DEFAULT,
- details: 0,
- })
- })
- })
|