import { describe, it, expect, vi } from 'vitest' import { render, fireEvent } from '@testing-library/react' import { LayersPanel } from '@/components/wysiwyg/LayersPanel' import type { Frame } from '@/lib/wysiwyg/schema' function makeFrame(): Frame { return { id: 'f1', width: 400, height: 300, background: '#ffffff', layers: [ { id: 'l1', name: 'Base', visible: true, locked: false, objects: [] }, { id: 'l2', name: 'Text', visible: true, locked: false, objects: [] }, ], } } describe('LayersPanel', () => { it('reorders layers with up/down buttons', () => { const frame = makeFrame() const onChange = vi.fn() const { getByTestId, getAllByTestId } = render() const items = getAllByTestId('layer-item') expect(items[0]).toHaveTextContent('Base') expect(items[1]).toHaveTextContent('Text') fireEvent.click(getByTestId('layer-down-l1')) expect(onChange).toHaveBeenCalled() const next = (onChange.mock.lastCall?.[0]) as Frame expect(next.layers[0].id).toBe('l2') expect(next.layers[1].id).toBe('l1') }) it('toggles lock and visibility', () => { const frame = makeFrame() const { getByTestId } = render( {}} />) fireEvent.click(getByTestId('layer-lock-l2')) fireEvent.click(getByTestId('layer-hide-l2')) // no crash; states toggled reflected in aria-pressed expect(getByTestId('layer-lock-l2')).toHaveAttribute('aria-pressed', 'true') expect(getByTestId('layer-hide-l2')).toHaveAttribute('aria-pressed', 'true') }) })