import React from 'react';
import {mount, shallow} from 'sentry-test/enzyme';

import RadioGroup from 'app/views/settings/components/forms/controls/radioGroup';

describe('RadioGroup', function() {
  describe('render()', function() {
    it('renders', function() {
      const wrapper = shallow(
        <RadioGroup
          name="radio"
          value="choice_one"
          choices={[
            ['choice_one', 'Choice One'],
            ['choice_two', 'Choice Two'],
            ['choice_three', 'Choice Three'],
          ]}
        />
      );
      expect(wrapper).toMatchSnapshot();
    });

    it('renders disabled', function() {
      const wrapper = mount(
        <RadioGroup
          name="radio"
          value="choice_one"
          disabled
          choices={[['choice_one', 'Choice One']]}
        />
      );
      expect(wrapper).toMatchSnapshot();

      expect(wrapper.find('RadioLineText').props().disabled).toBe(true);
      expect(wrapper.find('RadioLineButtonFill').props().disabled).toBe(true);
    });

    it('can select a different item', function() {
      const wrapper = shallow(
        <RadioGroup
          name="radio"
          value="choice_three"
          choices={[
            ['choice_one', 'Choice One'],
            ['choice_two', 'Choice Two'],
            ['choice_three', 'Choice Three'],
          ]}
        />
      );
      expect(wrapper).toMatchSnapshot();
    });

    it('calls onChange when clicked', function() {
      const mock = jest.fn();

      const wrapper = mount(
        <RadioGroup
          name="radio"
          value="choice_one"
          choices={[
            ['choice_one', 'Choice One'],
            ['choice_two', 'Choice Two'],
            ['choice_three', 'Choice Three'],
          ]}
          onChange={mock}
        />
      );
      wrapper
        .find('[role="radio"]')
        .last()
        .simulate('click');
      expect(mock).toHaveBeenCalledWith(expect.any(String), expect.any(Object));
    });
  });
});