/**
* Copyright (c) 2019 Paul Armstrong
*/
import Hoverable from '../Hoverable';
import React from 'react';
import { View } from 'react-native';
import { fireEvent, render } from 'react-native-testing-library';
describe('Hoverable', () => {
describe('when hover is supported', () => {
beforeEach(() => {
// Enable the hover monitor
document.dispatchEvent(new Event('mousemove'));
});
describe('render props', () => {
test('returns true when component is hovered', () => {
const hoverFn = jest.fn(() => );
const TestHover = (): React.ReactElement => {hoverFn};
const { getByTestId } = render();
fireEvent(getByTestId('foo'), 'mouseEnter');
expect(hoverFn).toHaveBeenCalledWith(true);
});
test('returns false when component is not hovered', () => {
const hoverFn = jest.fn(() => );
const TestHover = (): React.ReactElement => {hoverFn};
const { getByTestId } = render();
fireEvent(getByTestId('foo'), 'mouseEnter');
fireEvent(getByTestId('foo'), 'mouseLeave');
expect(hoverFn).toHaveBeenNthCalledWith(1, false);
expect(hoverFn).toHaveBeenNthCalledWith(2, true);
expect(hoverFn).toHaveBeenNthCalledWith(3, false);
});
});
describe('handler props', () => {
test('calls onHoverIn', () => {
const hoverFn = jest.fn();
const TestHover = (): React.ReactElement => (
);
const { getByTestId } = render();
fireEvent(getByTestId('foo'), 'mouseEnter');
expect(hoverFn).toHaveBeenCalled();
});
test('calls onHoverOut', () => {
const hoverFn = jest.fn();
const TestHover = (): React.ReactElement => (
);
const { getByTestId } = render();
fireEvent(getByTestId('foo'), 'mouseEnter');
fireEvent(getByTestId('foo'), 'mouseLeave');
expect(hoverFn).toHaveBeenCalled();
});
});
});
describe('when hover is not supported', () => {
beforeEach(() => {
// Disable the hover monitor
document.dispatchEvent(new Event('touchstart'));
});
test('does not send hover even if mouseEnter is triggered', () => {
const hoverFn = jest.fn(() => );
const TestHover = (): React.ReactElement => {hoverFn};
const { getByTestId } = render();
fireEvent(getByTestId('foo'), 'mouseEnter');
expect(hoverFn).not.toHaveBeenCalledWith(true);
});
test('does not send hover even if mouseLeave is triggered', () => {
const hoverFn = jest.fn(() => );
const TestHover = (): React.ReactElement => {hoverFn};
const { getByTestId } = render();
fireEvent(getByTestId('foo'), 'mouseEnter');
fireEvent(getByTestId('foo'), 'mouseLeave');
expect(hoverFn).not.toHaveBeenCalledWith(true);
});
});
});