@appearhere/bloom
Version:
Appear Here's pattern library and styleguide
199 lines (172 loc) • 5.13 kB
JavaScript
/* global jasmine:true */
import React from 'react';
import moment from 'moment';
import { render, findDOMNode } from 'react-dom';
import { Simulate } from 'react-dom/test-utils';
import { ENTER } from '../../../constants/keycodes';
import DayPickerItem from './DayPickerItem';
describe('DayPickerItem', () => {
it('renders with a date without crashing', () => {
const div = document.createElement('div');
render(<DayPickerItem />, div);
});
describe('.handleInteraction', () => {
it('fires the `onInteraction` callback when clicked with', () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onInteraction={spy}
/>,
div,
);
Simulate.click(findDOMNode(component));
expect(spy.calls.count()).toEqual(1);
expect(spy.calls.mostRecent().args[1].isSame(now)).toBe(true);
});
it('fires the `onInteraction` callback when touched', () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onInteraction={spy}
/>,
div,
);
Simulate.touchEnd(findDOMNode(component));
expect(spy.calls.count()).toEqual(1);
expect(spy.calls.mostRecent().args[1].isSame(now)).toBe(true);
});
it('fires the `onInteraction` callback when the user pressed `enter`', () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onInteraction={spy}
/>,
div,
);
Simulate.keyUp(findDOMNode(component), { keyCode: ENTER });
expect(spy.calls.count()).toEqual(1);
expect(spy.calls.mostRecent().args[1].isSame(now)).toBe(true);
});
it("doesn't fire the `onInteraction` callback the user presses any other key besides `enter`", () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onInteraction={spy}
/>,
div,
);
Simulate.keyUp(findDOMNode(component), { keyCode: 1 });
expect(spy.calls.count()).toEqual(0);
});
it("doesn't fire the `onInteraction` callback when interacted with whilst disabled", () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onInteraction={spy}
getDayState={() => ({
isDisabled: true,
})}
/>,
div,
);
Simulate.click(findDOMNode(component));
expect(spy.calls.count()).toEqual(0);
});
});
describe('.handleHighlight', () => {
it('fires the `onHighlight` callback when the mouse passes over', () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onHighlight={spy}
/>,
div,
);
Simulate.mouseOver(findDOMNode(component));
expect(spy.calls.count()).toEqual(1);
expect(spy.calls.mostRecent().args[1].isSame(now)).toBe(true);
});
it('fires the `onHighlight` callback when it is given focus', () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onHighlight={spy}
/>,
div,
);
Simulate.focus(findDOMNode(component));
expect(spy.calls.count()).toEqual(1);
expect(spy.calls.mostRecent().args[1].isSame(now)).toBe(true);
});
it("doesn't fire the `onHighlight` callback when interacted with whilst disabled", () => {
let component;
const div = document.createElement('div');
const spy = jasmine.createSpy();
const now = moment();
render(
<DayPickerItem
ref={c => {
component = c;
}}
day={now}
onHighlight={spy}
getDayState={() => ({
isDisabled: true,
})}
/>,
div,
);
Simulate.mouseOver(findDOMNode(component));
expect(spy.calls.count()).toEqual(0);
});
});
});