import * as PropTypes from 'prop-types'; import * as React from 'react'; import { mount } from 'enzyme'; import * as renderer from 'react-test-renderer'; import Box from './Box'; interface ToggleState { collapse: () => void; }; class ToggleCollapse extends React.Component<{}, ToggleState> { constructor(props, context) { super(props); this.state = { collapse: context.$adminlte_box.onCollapseToggle, }; } componentDidMount() { this.state.collapse(); } static contextTypes = { $adminlte_box: PropTypes.shape({ onCollapseToggle: PropTypes.func, }), } render() { return null; } } test('Collapses on toggle', () => { const wrapper = mount(); expect(wrapper.render().hasClass('collapsed-box')).toEqual(true); }); test('Expands on toggle', () => { const wrapper = mount(); expect(wrapper.render().hasClass('collapsed-box')).toEqual(false); }); interface RemoveState { remove: () => void; }; class Remove extends React.Component<{}, RemoveState> { constructor(props, context) { super(props); this.state = { remove: context.$adminlte_box.onRemove, }; } componentDidMount() { this.state.remove(); } static contextTypes = { $adminlte_box: PropTypes.shape({ onRemove: PropTypes.func, }), } render() { return null; } } test('Render null when removed', () => { const wrapper = mount(); expect(wrapper.html()).toEqual(null); }); test('Renders default', () => { const component = renderer.create( ); expect(component.toJSON()).toMatchSnapshot(); }); test('Renders with style', () => { const component = renderer.create( ); expect(component.toJSON()).toMatchSnapshot(); }); test('Renders solid', () => { const component = renderer.create( ); expect(component.toJSON()).toMatchSnapshot(); }); test('Renders loading', () => { const component = renderer.create( ); expect(component.toJSON()).toMatchSnapshot(); }); test('Renders loading with "spinner" icon', () => { const component = renderer.create( ); expect(component.toJSON()).toMatchSnapshot(); }); test('Renders collapsed', () => { const component = renderer.create( ); expect(component.toJSON()).toMatchSnapshot(); });