import * as PropTypes from 'prop-types';
import * as React from 'react';
import { mount } from 'enzyme';
import * as renderer from 'react-test-renderer';
import Layout from './Layout';
test('Layout sets body classes on mount', () => {
mount();
expect(document.body.classList.contains('skin-blue')).toEqual(true);
expect(document.body.classList.contains('sidebar-mini')).toEqual(true);
});
test('Layout sets boxed class on body', () => {
mount();
expect(document.body.classList.contains('layout-boxed')).toEqual(true);
});
test('Layout sets fixed class on body', () => {
mount();
expect(document.body.classList.contains('fixed')).toEqual(true);
});
test('Layout sets body classes on receiving props', () => {
const wrapper = mount();
wrapper.setProps({ skin: 'red', boxed: false, fixed: false });
expect(document.body.classList.contains('skin-blue')).toEqual(false);
expect(document.body.classList.contains('skin-red')).toEqual(true);
expect(document.body.classList.contains('layout-boxed')).toEqual(false);
expect(document.body.classList.contains('fixed')).toEqual(false);
});
test('Layout keeps same skin on receiving props', () => {
const wrapper = mount();
wrapper.setProps({ skin: 'blue' });
expect(document.body.classList.contains('skin-blue')).toEqual(true);
});
test('Layout removes body classes on unmount', () => {
const wrapper = mount();
document.body.classList.add('sidebar-collapse');
wrapper.unmount();
expect(document.body.classList.contains('sidebar-mini')).toEqual(false);
expect(document.body.classList.contains('sidebar-collapse')).toEqual(false);
expect(document.body.classList.contains('skin-blue')).toEqual(false);
expect(document.body.classList.contains('layout-boxed')).toEqual(false);
expect(document.body.classList.contains('fixed')).toEqual(false);
});
interface SetCollapseProps {
collapsed: boolean;
};
class SetCollapse extends React.Component {
constructor(props, context) {
super(props);
context.$adminlte_layout.setMainSidebarCollapsed(props.collapsed);
}
static propTypes = {
collapsed: PropTypes.bool.isRequired,
}
static contextTypes = {
$adminlte_layout: PropTypes.shape({
setMainSidebarCollapsed: PropTypes.func,
}),
};
render() {
return null;
}
}
test('Collapses sidebar on set', () => {
mount();
expect(document.body.classList.contains('sidebar-collapse')).toEqual(true);
});
test('Expands sidebar on set', () => {
document.body.classList.add('sidebar-collapse');
mount();
expect(document.body.classList.contains('sidebar-collapse')).toEqual(false);
});
class ToggleCollapse extends React.Component<{}, {}> {
constructor(props, context) {
super(props);
context.$adminlte_layout.toggleMainSidebar();
}
static contextTypes = {
$adminlte_layout: PropTypes.shape({
toggleMainSidebar: PropTypes.func,
}),
}
render() {
return null;
}
}
test('Collapses sidebar on toggle', () => {
mount();
expect(document.body.classList.contains('sidebar-collapse')).toEqual(true);
});
test('Expands sidebar on toggle', () => {
document.body.classList.add('sidebar-collapse');
mount();
expect(document.body.classList.contains('sidebar-collapse')).toEqual(false);
});
test('Renders default', () => {
const component = renderer.create(
);
expect(component.toJSON()).toMatchSnapshot();
});
test('Renders boxed', () => {
const component = renderer.create(
);
expect(component.toJSON()).toMatchSnapshot();
});
test('Renders fixed', () => {
const component = renderer.create(
);
expect(component.toJSON()).toMatchSnapshot();
});