import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, vi } from 'vitest';
import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from './resizable';
import React from 'react';
describe('Resizable', () => {
it('renders correctly with panels and handles', () => {
const { container } = render(
One
Two
);
expect(screen.getByText('One')).toBeInTheDocument();
expect(screen.getByText('Two')).toBeInTheDocument();
expect(container.querySelector('[data-slot="resizable-handle"]')).toBeInTheDocument();
});
it('applies initial sizes correctly', () => {
render(
One
Two
);
const panel1 = screen.getByText('One').closest('[data-slot="resizable-panel"]');
const panel2 = screen.getByText('Two').closest('[data-slot="resizable-panel"]');
expect(panel1).toHaveStyle('flex: 30 1 0%');
expect(panel2).toHaveStyle('flex: 70 1 0%');
});
it('updates sizes on handle drag', () => {
Object.defineProperty(HTMLElement.prototype, 'offsetWidth', {
configurable: true,
value: 1000,
});
const { container } = render(
One
Two
);
const handle = container.querySelector('[data-slot="resizable-handle"]') as HTMLElement;
const panel1 = screen.getByText('One').closest('[data-slot="resizable-panel"]');
fireEvent.mouseDown(handle, { clientX: 500, clientY: 0 });
fireEvent.mouseMove(window, { clientX: 600, clientY: 0 });
expect(panel1).toHaveStyle('flex: 60 1 0%');
fireEvent.mouseUp(window);
});
});