import React from 'react';
import { shallow, mount } from 'enzyme';
import { Alert } from '../';
describe('Alert', () => {
it('should render children', () => {
const alert = mount(Yo!);
expect(alert.text()).toBe('Yo!');
});
it('should pass className down', () => {
const alert = mount(Yo!);
expect(alert.find('.alert').hostNodes().prop('className')).toContain('test-class-name');
});
it('should pass close className down', () => {
function noop() { }
const alert = mount(Yo!);
expect(alert.find('.close').hostNodes().prop('className')).toContain('test-class-name');
});
it('should pass other props down', () => {
const alert = mount(Yo!);
expect(alert.find('.alert').hostNodes().prop('data-testprop')).toContain('testvalue');
});
it('should have default transitionTimeouts', () => {
const alert = mount(Yo!);
const transition = alert.find('Transition');
expect(transition.prop('timeout')).toEqual(150);
expect(transition.prop('appear')).toBe(true);
expect(transition.prop('enter')).toBe(true);
expect(transition.prop('exit')).toBe(true);
});
it('should have support configurable transitionTimeouts', () => {
const alert = mount(
Yo!
);
const transition = alert.find('Transition');
expect(transition.prop('timeout')).toEqual(0);
expect(transition.prop('appear')).toBe(false);
expect(transition.prop('enter')).toBe(false);
expect(transition.prop('exit')).toBe(false);
});
it('should have "success" as default color', () => {
const alert = mount(Yo!).find('div');
expect(alert.hasClass('alert-success')).toBe(true);
});
it('should accept color prop', () => {
const alert = mount(Yo!).find('div');
expect(alert.hasClass('alert-warning')).toBe(true);
});
it('should use a div tag by default', () => {
const alert = mount(Yo!);
expect(alert.find('div').hostNodes().length).toBe(1);
});
it('should be non dismissible by default', () => {
const alert = mount(Yo!).find('div');
expect(alert.find('button').hostNodes().length).toEqual(0);
expect(alert.hasClass('alert-dismissible')).toBe(false);
});
it('should show dismiss button if passed toggle', () => {
const alert = mount( { }}>Yo!).find('div');
expect(alert.find('button').hostNodes().length).toEqual(1);
expect(alert.hasClass('alert-dismissible')).toBe(true);
});
it('should support custom tag', () => {
const alert = mount(Yo!);
expect(alert.find('p').hostNodes().length).toBe(1);
});
it('should be empty if not isOpen', () => {
const alert = shallow(Yo!);
expect(alert.html()).toBe('');
});
it('should be dismissible', () => {
const onClick = jest.fn();
const alert = mount(Yo!);
alert.find('button').hostNodes().simulate('click');
expect(onClick).toHaveBeenCalled();
});
it('should render close button with custom aria-label', () => {
const alert = mount( { }} closeAriaLabel="oseclay">Yo!).find('div');
const closeButton = alert.find('button').hostNodes().first();
expect(closeButton.prop('aria-label')).toBe('oseclay');
});
});