/**
* Copyright (c) 2019 Paul Armstrong
*/
import React from 'react';
import RelativeTooltip from '../RelativeTooltip';
import { render } from '@testing-library/react';
import { MeasureOnSuccessCallback, View } from 'react-native';
describe('RelativeTooltip', () => {
let viewRef;
beforeEach(() => {
viewRef = React.createRef();
render();
});
test('renders a tooltip to a portal', () => {
const portal = document.createElement('div');
portal.setAttribute('id', 'tooltipPortal');
document.body.appendChild(portal);
jest.spyOn(View.prototype, 'measure').mockImplementation((fn: MeasureOnSuccessCallback): void => {
fn(0, 0, 45, 20, 0, 0);
});
jest
.spyOn(View.prototype, 'measureInWindow')
.mockImplementation((fn: (x: number, y: number, width: number, height: number) => void): void => {
fn(20, 100, 40, 30);
});
const { getByRole, queryAllByText } = render(, {
container: portal,
});
expect(getByRole('tooltip').style).toMatchObject({
top: '89px',
left: '17px',
});
expect(queryAllByText('foobar')).toHaveLength(1);
document.body.removeChild(portal);
});
test('renders directly without a portal available', () => {
jest.spyOn(View.prototype, 'measure').mockImplementation((fn: MeasureOnSuccessCallback): void => {
fn(0, 0, 45, 20, 0, 0);
});
jest
.spyOn(View.prototype, 'measureInWindow')
.mockImplementation((fn: (x: number, y: number, width: number, height: number) => void): void => {
fn(20, 100, 40, 30);
});
const { getByRole, queryAllByText } = render();
expect(getByRole('tooltip').style).toMatchObject({
top: '89px',
left: '17px',
});
expect(queryAllByText('foobar')).toHaveLength(1);
});
});