import { render, screen } from '../test-utils';
import SlidingPanel, { SlidingPanelProps } from './SlidingPanel';

describe('SlidingPanel', () => {
  const initialProps: SlidingPanelProps = {
    open: true,
    children: <div data-testid="content">Content</div>,
    testId: 'wrapper',
  };

  const customRender = (overrides: Partial<SlidingPanelProps> = {}) =>
    render(<SlidingPanel {...initialProps} {...overrides} />);

  describe('open', () => {
    it('should respect open=false', () => {
      customRender({ open: false });
      expect(screen.queryByTestId('wrapper')).not.toBeInTheDocument();
    });

    it('should respect open=true', () => {
      customRender();
      expect(screen.getByTestId('wrapper')).toBeInTheDocument();
    });
  });

  describe('position', () => {
    it(`should default to 'left'`, () => {
      customRender();
      expect(screen.queryByTestId('wrapper')).toHaveClass(`sliding-panel--open-left`);
    });

    (['left', 'right', 'top', 'bottom'] as const).forEach((position) => {
      describe(position, () => {
        it(`should add the classname`, () => {
          customRender({ position });
          expect(screen.queryByTestId('wrapper')).toHaveClass(`sliding-panel--open-${position}`);
        });

        it(`should add the classname for 'showSlidingPanelBorder'`, () => {
          customRender({ position, showSlidingPanelBorder: true });
          expect(screen.queryByTestId('wrapper')).toHaveClass(`sliding-panel--border-${position}`);
        });
      });
    });
  });

  it('should render children', () => {
    customRender();
    expect(screen.getByTestId('content')).toBeInTheDocument();
  });

  it('should respect className', () => {
    const className = 'customClass';
    customRender({ className });
    expect(screen.getByTestId('wrapper')).toHaveClass(className);
  });

  describe('slidingPanelPositionFixed', () => {
    it('should not be fixed by default', () => {
      customRender();
      expect(screen.getByTestId('wrapper')).not.toHaveClass('sliding-panel--fixed');
    });

    it('should respect slidingPanelPositionFixed=true', () => {
      customRender({ slidingPanelPositionFixed: true });
      expect(screen.getByTestId('wrapper')).toHaveClass('sliding-panel--fixed');
    });
  });
});
