import _, { forEach, has } from 'lodash';
import assert from 'assert';
import React from 'react';
import { CSSTransition } from 'react-transition-group';
import { mount, shallow } from 'enzyme';
import { common } from '../../util/generic-tests';
import SwitchLabeled from './SwitchLabeled';
import Switch from '../Switch/Switch';
describe('SwitchLabeled', () => {
common(SwitchLabeled);
describe('props', () => {
describe('isDisabled', () => {
it('passes the value through to its `Switch` instance.', () => {
const wrapper = shallow();
assert.equal(wrapper.find(Switch).prop('isDisabled'), true);
});
it('defaults to `false`.', () => {
const wrapper = mount();
assert.equal(wrapper.prop('isDisabled'), false);
});
});
describe('isSelected', () => {
it('passes the value through to its `Switch` instance.', () => {
const wrapper = shallow();
assert.equal(wrapper.find(Switch).prop('isSelected'), true);
});
it('defaults to `false`.', () => {
const wrapper = mount();
assert.equal(wrapper.prop('isSelected'), false);
});
});
describe('onSelect', () => {
it('passes the value through to its `Switch` instance.', () => {
const foo = () => null;
const wrapper = shallow();
assert.equal(wrapper.find(Switch).prop('onSelect'), foo);
});
it('defaults to the Lodash `noop` method.', () => {
const wrapper = mount();
assert.equal(wrapper.prop('onSelect'), _.noop);
});
});
describe('Label (as a prop)', () => {
it('renders the value in a `span` neighboring its `Switch` instance.', () => {
const wrapper = shallow();
assert.equal(
wrapper.find(CSSTransition).find('span').prop('children'),
'foo'
);
});
});
describe('Label (as a child)', () => {
it('renders the value in a `span` neighboring its `Switch` instance.', () => {
const wrapper = shallow(
foo
);
assert.equal(
wrapper.find(CSSTransition).find('span').prop('children'),
'foo'
);
});
});
describe('pass throughs', () => {
let wrapper: any;
const extraProps = {
foo: 1,
bar: 2,
baz: 3,
qux: 4,
quux: 5,
Label: 'test default',
className: 'wut',
style: { marginRight: 10 },
initialState: { test: true },
callbackId: 1,
'data-testid': 10,
};
beforeEach(() => {
wrapper = shallow(
);
});
afterEach(() => {
if (wrapper) {
wrapper.unmount();
}
});
it('passes through all props not defined in `propTypes` to its `Switch` instance.', () => {
const switchProps = wrapper.find(Switch).props();
// It should pass `foo`, `bar`, `baz`, `qux`, and `quux`
// and `className`, and 'data-testid' through
// to the `Switch` instance.
forEach(
[
'foo',
'bar',
'baz',
'qux',
'quux',
'isDisabled',
'isSelected',
'onSelect',
'className',
'callbackId',
'data-testid',
],
(prop) => {
expect(has(switchProps, prop)).toBe(true);
}
);
});
it('omits all props defined in `propTypes from its `Switch` instance', () => {
const switchProps = wrapper.find(Switch).props();
// It should omit `Label', 'children', and 'initialState'
// from the `Switch` instance.
forEach(['Label', 'style', 'initialState'], (prop) => {
expect(has(switchProps, prop)).toBe(false);
});
});
});
});
});