webhook-trigger-panel.test.tsx1.6 KBView on GitHub
import { render, screen, fireEvent } from '@testing-library/react';
import { WebhookTriggerPanelView } from '@/modules/documents/playbook/WebhookTriggerPanel';

const URL = 'https://api.example.com/webhooks/playbook/abc123';

describe('WebhookTriggerPanelView', () => {
  it('shows the POST URL and a curl example when a url is present', () => {
    render(
      <WebhookTriggerPanelView url={URL} enabled onRotate={() => {}} onToggleEnabled={() => {}} />,
    );
    expect((screen.getByTestId('webhook-url') as HTMLInputElement).value).toBe(URL);
    expect(screen.getByText(/curl -X POST/)).toBeInTheDocument();
  });

  it('shows a generating message (not a URL) while loading with no url yet', () => {
    render(<WebhookTriggerPanelView enabled loading onRotate={() => {}} onToggleEnabled={() => {}} />);
    expect(screen.getByText(/Generating webhook URL/)).toBeInTheDocument();
    expect(screen.queryByTestId('webhook-url')).not.toBeInTheDocument();
  });

  it('calls onRotate when Rotate URL is clicked', () => {
    const onRotate = jest.fn();
    render(
      <WebhookTriggerPanelView url={URL} enabled onRotate={onRotate} onToggleEnabled={() => {}} />,
    );
    fireEvent.click(screen.getByRole('button', { name: /Rotate URL/i }));
    expect(onRotate).toHaveBeenCalledTimes(1);
  });

  it('calls onToggleEnabled when the switch is toggled', () => {
    const onToggleEnabled = jest.fn();
    render(
      <WebhookTriggerPanelView
        url={URL}
        enabled
        onRotate={() => {}}
        onToggleEnabled={onToggleEnabled}
      />,
    );
    fireEvent.click(screen.getByRole('switch'));
    expect(onToggleEnabled).toHaveBeenCalledWith(false);
  });
});