import { describe, it, expect, beforeEach } from 'vitest'; import { useSiteDefinitionStore } from '../siteDefinitionStore'; import type { SiteStructure, PageBlueprint } from '../../types/siteBuilder'; describe('siteDefinitionStore', () => { beforeEach(() => { useSiteDefinitionStore.setState({ structure: undefined, pages: [], selectedSlug: undefined, }); }); it('initializes with empty state', () => { const state = useSiteDefinitionStore.getState(); expect(state.pages).toEqual([]); expect(state.structure).toBeUndefined(); expect(state.selectedSlug).toBeUndefined(); }); it('sets structure and auto-selects first page', () => { const mockStructure: SiteStructure = { site: { name: 'Test Site' }, pages: [ { slug: 'home', title: 'Home', type: 'home', blocks: [] }, { slug: 'about', title: 'About', type: 'about', blocks: [] }, ], }; useSiteDefinitionStore.getState().setStructure(mockStructure); const state = useSiteDefinitionStore.getState(); expect(state.structure).toEqual(mockStructure); expect(state.selectedSlug).toBe('home'); }); it('sets pages and auto-selects first page if none selected', () => { const mockPages: PageBlueprint[] = [ { id: 1, site_blueprint: 1, slug: 'services', title: 'Services', type: 'services', status: 'ready', order: 0, blocks_json: [], }, ]; useSiteDefinitionStore.getState().setPages(mockPages); const state = useSiteDefinitionStore.getState(); expect(state.pages).toEqual(mockPages); expect(state.selectedSlug).toBe('services'); }); it('preserves selected slug when setting pages if already selected', () => { useSiteDefinitionStore.setState({ selectedSlug: 'about' }); const mockPages: PageBlueprint[] = [ { id: 1, site_blueprint: 1, slug: 'home', title: 'Home', type: 'home', status: 'ready', order: 0, blocks_json: [], }, { id: 2, site_blueprint: 1, slug: 'about', title: 'About', type: 'about', status: 'ready', order: 1, blocks_json: [], }, ]; useSiteDefinitionStore.getState().setPages(mockPages); const state = useSiteDefinitionStore.getState(); expect(state.selectedSlug).toBe('about'); }); it('selects page by slug', () => { useSiteDefinitionStore.getState().selectPage('contact'); expect(useSiteDefinitionStore.getState().selectedSlug).toBe('contact'); }); });