/*
 * Copyright OpenSearch Contributors
 * SPDX-License-Identifier: Apache-2.0
 */

import { fireEvent, render } from '@testing-library/react';
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import React from 'react';
import { WebhookHeaders } from '../components/WebhookHeaders';

describe('<WebhookHeaders /> spec', () => {
  configure({ adapter: new Adapter() });

  it('renders the empty component', () => {
    const headerUtils = render(
      <WebhookHeaders headers={[]} setHeaders={() => {}} type="header" />
    );
    expect(headerUtils.container.firstChild).toMatchSnapshot();

    const parameterUtils = render(
      <WebhookHeaders headers={[]} setHeaders={() => {}} type="header" />
    );
    expect(parameterUtils.container.firstChild).toMatchSnapshot();
  });

  it('renders the component', () => {
    const headers = [
      { key: 'Content-Type', value: 'application/json' },
      { key: 'key2', value: 'value2' },
      { key: 'key3', value: '' },
      { key: '', value: 'value4' },
      { key: '', value: '' },
      { key: 'key6', value: 'value6' },
    ];
    const headerUtils = render(
      <WebhookHeaders headers={headers} setHeaders={() => {}} type="header" />
    );
    expect(headerUtils.container.firstChild).toMatchSnapshot();

    const parameterUtils = render(
      <WebhookHeaders
        headers={headers}
        setHeaders={() => {}}
        type="parameter"
      />
    );
    expect(parameterUtils.container.firstChild).toMatchSnapshot();
  });

  it('changes input', () => {
    const headers = [{ key: 'key1', value: 'value1' }];
    const setHeaders = jest.fn();
    const parameterUtils = render(
      <WebhookHeaders
        headers={headers}
        setHeaders={setHeaders}
        type="parameter"
      />
    );

    fireEvent.change(parameterUtils.getByDisplayValue('key1'), {
      target: { value: 'test-key' },
    });
    expect(setHeaders).toBeCalledWith([{ key: 'test-key', value: 'value1' }]);

    fireEvent.change(parameterUtils.getByDisplayValue('value1'), {
      target: { value: 'test-value' },
    });
    expect(setHeaders).toBeCalledWith([
      { key: 'test-key', value: 'test-value' },
    ]);

    parameterUtils.getByText('Remove parameter').click();
    parameterUtils.getByText('Add parameter').click();
  });
});