wix-style-react
Version:
wix-style-react
184 lines (160 loc) • 5.99 kB
JavaScript
import React from 'react';
import RadioGroup from './RadioGroup';
import radioGroupDriverFactory from './RadioGroup.driver';
import { radioGroupTestkitFactory } from '../../testkit';
import { isTestkitExists, isEnzymeTestkitExists } from '../../test/utils/testkit-sanity';
import { radioGroupTestkitFactory as enzymeRadioGroupTestkitFactory } from '../../testkit/enzyme';
import { mount } from 'enzyme';
import { createRendererWithDriver, cleanup } from '../../test/utils/unit';
describe('RadioGroup', function () {
var render = createRendererWithDriver(radioGroupDriverFactory);
var createDriver = function createDriver(jsx) {
return render(jsx).driver;
};
var defaultRadioGroup = function defaultRadioGroup(props) {
return React.createElement(
RadioGroup,
props,
React.createElement(
RadioGroup.Radio,
{ value: 1 },
'Option 1'
),
React.createElement(
RadioGroup.Radio,
{ value: 2 },
'Option 2'
),
React.createElement(
RadioGroup.Radio,
{ value: 3 },
'Option 3'
),
React.createElement(
RadioGroup.Radio,
{ value: 4 },
'Option 4'
)
);
};
afterEach(function () {
cleanup();
});
it('should have the correct radio buttons', function () {
var driver = createDriver(defaultRadioGroup());
expect(driver.getNumberOfRadios()).toBe(4);
expect(driver.getRadioValueAt(0)).toBe('1');
});
it('should return true if a radio button is disabled and false otherwise', function () {
var disabledRadios = [1, 2];
var driver = createDriver(defaultRadioGroup({ disabledRadios: disabledRadios }));
expect(driver.isRadioDisabled(0)).toBe(true);
expect(driver.isRadioDisabled(1)).toBe(true);
expect(driver.isRadioDisabled(2)).toBe(false);
expect(driver.isRadioDisabled(3)).toBe(false);
});
it('should check the option that matches the initial value', function () {
var value = 2;
var driver = createDriver(defaultRadioGroup({ value: value }));
expect(driver.getSelectedValue()).toBe(value.toString());
});
it('should update selected value after change to props', function () {
var _render = render(defaultRadioGroup({ value: 1 })),
driver = _render.driver,
rerender = _render.rerender;
var value = 2;
rerender(defaultRadioGroup({ value: 2 }));
expect(driver.getSelectedValue()).toBe(value.toString());
});
it('should not check any options if value was not matched', function () {
var value = 10;
var driver = createDriver(defaultRadioGroup({ value: value }));
expect(driver.getSelectedValue()).toBe(null);
});
describe('onChange attribute', function () {
it('should be called with the correct option value', function () {
var onChange = jest.fn();
var driver = createDriver(defaultRadioGroup({ onChange: onChange }));
driver.selectByValue(1);
expect(onChange).toBeCalledWith(1);
});
it('should not be called upon checked option', function () {
var value = 1;
var onChange = jest.fn();
var driver = createDriver(defaultRadioGroup({ onChange: onChange, value: value }));
driver.selectByValue(1);
expect(onChange.mock.calls).toHaveLength(0);
});
it('should not be called upon disabled option', function () {
var disabledRadios = [1];
var onChange = jest.fn();
var driver = createDriver(defaultRadioGroup({ onChange: onChange, disabledRadios: disabledRadios }));
driver.selectByValue(1);
expect(onChange.mock.calls).toHaveLength(0);
});
});
describe('vAlign attribute', function () {
var radioGroup = function radioGroup(props) {
return React.createElement(
RadioGroup,
props,
React.createElement(
RadioGroup.Radio,
{ value: 1 },
'Option 1'
),
React.createElement(
RadioGroup.Radio,
{ value: 2 },
'Option 2'
)
);
};
it('should have a default vcenter class', function () {
var driver = createDriver(radioGroup());
expect(driver.getClassOfLabelAt(0)).toContain('vcenter');
expect(driver.getClassOfLabelAt(1)).toContain('vcenter');
});
it('should have a vtop class', function () {
var driver = createDriver(radioGroup({ vAlign: 'top' }));
expect(driver.getClassOfLabelAt(0)).toContain('vtop');
expect(driver.getClassOfLabelAt(1)).toContain('vtop');
});
});
describe('display attribute', function () {
it('should be vertical by default', function () {
var driver = createDriver(defaultRadioGroup());
expect(driver.isVerticalDisplay()).toBe(true);
});
it('should be horizontal', function () {
var driver = createDriver(defaultRadioGroup({ display: 'horizontal' }));
expect(driver.isHorizontalDisplay()).toBe(true);
});
});
describe('spacing attribute', function () {
it('should be 12px by default', function () {
var driver = createDriver(defaultRadioGroup());
expect(driver.spacing()).toBe('12px');
});
it('should be spaced', function () {
var driver = createDriver(defaultRadioGroup({ spacing: '30px' }));
expect(driver.spacing()).toBe('30px');
});
});
describe('line-height attribute', function () {
it('should have default value', function () {
var driver = createDriver(defaultRadioGroup());
expect(driver.lineHeight()).toBe(RadioGroup.defaultProps.lineHeight);
});
});
describe('testkit', function () {
it('should exist', function () {
expect(isTestkitExists(React.createElement(RadioGroup, null), radioGroupTestkitFactory)).toBe(true);
});
});
describe('enzyme testkit', function () {
it('should exist', function () {
expect(isEnzymeTestkitExists(React.createElement(RadioGroup, null), enzymeRadioGroupTestkitFactory, mount)).toBe(true);
});
});
});