import { describe, expect, it } from 'vitest' import { useBioTemplateWorkspace, } from '../../composables/useBioTemplateWorkspace' import { createLcmsBatchCollection, createWellPlateScreenCollection, } from '../../templates' describe('useBioTemplateWorkspace', () => { it('returns AppSidebar, FormBuilder, renderer, and component bindings for a concrete collection', () => { const collection = createWellPlateScreenCollection({ samples: ['Control', 'Treatment'], compounds: { 'Drug A': [10, 1, 0.1] }, unit: 'uM', }) const workspace = useBioTemplateWorkspace(collection) expect(workspace.controlSchema).toBe(workspace.controls.controls) expect(workspace.workspace.values).toBe(workspace.values) expect(workspace.form).toBe(workspace.workspace.form) expect(workspace.form.modelValue).toBe(workspace.values) expect(workspace.sidebar).toBe(workspace.workspace.sidebar) expect(workspace.sidebar.values).toBe(workspace.values) expect(workspace.topBar).toBe(workspace.workspace.topBar) expect(workspace.pillNav).toBe(workspace.workspace.pillNav) expect(workspace.topBarSettings).toBe(workspace.workspace.topBarSettings) expect(workspace.bindings.form).toBe(workspace.form) expect(workspace.bindings.sidebar).toBe(workspace.sidebar) expect(workspace.bindings.topBar).toBe(workspace.workspace.bindings.topBar) expect(workspace.bindings.topBarSettings).toBe(workspace.topBarSettings) expect(workspace.bindings.pillNav).toBe(workspace.pillNav) expect(workspace.renderer).toEqual({ target: collection }) expect(workspace.bindings.renderer).toEqual({ target: collection }) expect(workspace.controls.initialValues.plateFormat).toBe(96) expect(workspace.sidebar.panels.design.map(panel => panel.id)).toContain('dose') expect(workspace.componentProps.map(binding => binding.component)).toContain('DoseCalculator') expect(workspace.componentProps.map(binding => binding.component)).toContain('WellPlate') expect(workspace.componentBindingsById['plate-map:WellPlate'].component).toBe('WellPlate') expect(workspace.componentBindingsById['plate-map:WellPlate'].props.wells).toBeDefined() expect(workspace.bindings.componentBindingsById['dose-response:DoseCalculator'].props.mode).toBe('serial') expect(workspace.componentPropsById['plate-map:WellPlate'].wells).toBeDefined() expect(workspace.bindings.componentPropsById['plate-map:WellPlate'].wells).toBeDefined() expect(workspace.componentPropsById['dose-response:DoseCalculator'].mode).toBe('serial') expect(workspace.componentPropsByComponent.WellPlate).toHaveLength(2) expect(workspace.getComponentProps('DoseCalculator')?.mode).toBe('serial') expect(workspace.bindings.getComponentProps('DoseCalculator')?.mode).toBe('serial') expect(workspace.getComponentProps('WellPlate', { templateId: 'dose-response' })?.wells).toBeDefined() expect(workspace.componentImports[0].statement).toContain('DoseCalculator') expect(workspace.componentSnippets.map(snippet => snippet.component)).toContain('DoseCalculator') expect(workspace.componentUsage?.template).toContain(' { const workspace = useBioTemplateWorkspace('wellplate-screen') expect(workspace.renderer).toBeNull() expect(workspace.bindings.renderer).toBeNull() expect(workspace.controlSchema.sampleNames).toBe(workspace.controls.controls.sampleNames) expect(workspace.values.sampleNames).toEqual(['Control', 'Treatment']) expect(workspace.activeView.value).toBe('design') expect(workspace.topBar.value.pillNav.map(item => item.id)).toContain('design') expect(workspace.pillNav.items.map(item => item.id)).toContain('design') expect(workspace.controls.initialValues.sampleNames).toEqual(['Control', 'Treatment']) expect(workspace.sidebar.panels.design.map(panel => panel.id)).toContain('layout') expect(workspace.componentBindings.map(binding => binding.component)).toContain('PlateEditor') expect(workspace.componentImports[0].statement).toContain('WellPlate') expect(workspace.componentProps).toEqual([]) expect(workspace.componentBindingsById).toEqual({}) expect(workspace.componentPropsById).toEqual({}) expect(workspace.bindings.componentBindingsById).toEqual({}) expect(workspace.bindings.componentPropsById).toEqual({}) expect(workspace.componentPropsByComponent).toEqual({}) expect(workspace.getComponentProps('WellPlate')).toBeUndefined() expect(workspace.componentUsage).toBeNull() }) it('accepts direct initial values for generated preset controls', () => { const workspace = useBioTemplateWorkspace('wellplate-screen', { initialValues: { sampleNames: ['Vehicle', 'Drug'], unit: 'nM', }, }) expect(workspace.controls.initialValues.sampleNames).toEqual(['Vehicle', 'Drug']) expect(workspace.controls.initialValues.unit).toBe('nM') expect(workspace.values.sampleNames).toEqual(['Vehicle', 'Drug']) expect(workspace.form.modelValue.sampleNames).toEqual(['Vehicle', 'Drug']) }) it('supports mixed-view presets for AppSidebar panels', () => { const collection = createLcmsBatchCollection({ samples: ['S001', 'S002'], features: ['Glucose', 'Lactate'], }) const workspace = useBioTemplateWorkspace(collection) expect(Object.keys(workspace.sidebar.panels)).toEqual(['run', 'analysis']) expect(workspace.form.schema.sections.map(section => section.id)).toContain('acquisition') expect(workspace.renderer?.target).toBe(collection) expect(workspace.componentProps.map(binding => binding.component)).toContain('DataFrame') }) })