wix-style-react
Version:
187 lines (157 loc) • 5.77 kB
JavaScript
import React from 'react';
import { createRendererWithUniDriver, cleanup } from '../../../test/utils/unit';
import ListItemEditable from '../ListItemEditable';
import { listItemEditablePrivateDriverFactory } from './ListItemEditable.private.uni.driver';
describe('ListItemEditable', () => {
const render = createRendererWithUniDriver(
listItemEditablePrivateDriverFactory,
);
afterEach(() => {
cleanup();
});
it('should render', async () => {
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={jest.fn()} />,
);
expect(await driver.exists()).toBe(true);
});
it('should not render, driver should not fail initializing', async () => {
const { driver } = render();
expect(await driver.exists()).toBe(false);
});
it('should render placeholder text when have no value', async () => {
const placeholder = 'some placeholder';
const { driver } = render(
<ListItemEditable
onApprove={jest.fn()}
onCancel={jest.fn()}
placeholder={placeholder}
/>,
);
expect(await driver.getPlaceholder()).toBe(placeholder);
});
it('should show disabled confirm button when have no value', async () => {
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={jest.fn()} />,
);
expect(await driver.isApproveButtonDisabled()).toBe(true);
});
describe('when value is entered', () => {
it('should show enabled confirm button', async () => {
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={jest.fn()} />,
);
await driver.enterText('some text');
expect(await driver.isApproveButtonDisabled()).toBe(false);
});
it('should call onApprove with the input value when clicked', async () => {
const onApprove = jest.fn();
const inputValue = 'some value';
const { driver } = render(
<ListItemEditable onCancel={jest.fn()} onApprove={onApprove} />,
);
await driver.enterText(inputValue);
await driver.clickApprove();
expect(onApprove).toHaveBeenCalledWith(inputValue);
});
});
it('should call onCancel when clicked', async () => {
const onCancel = jest.fn();
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={onCancel} />,
);
await driver.clickCancel();
expect(onCancel).toHaveBeenCalled();
});
describe('tooltips', () => {
it('should render cancel button tooltip', async () => {
const cancelButtonTooltipContent = 'cancel tooltip';
const { driver } = render(
<ListItemEditable
cancelButtonTooltipContent={cancelButtonTooltipContent}
onApprove={jest.fn()}
onCancel={jest.fn()}
/>,
);
expect(await driver.getCancelButtonTooltipText()).toBe(
cancelButtonTooltipContent,
);
});
it('should not show tooltip when approve button is disabled', async () => {
const approveButtonTooltipContent = 'approve tooltip';
const { driver } = render(
<ListItemEditable
approveButtonTooltipContent={approveButtonTooltipContent}
onApprove={jest.fn()}
onCancel={jest.fn()}
/>,
);
expect(await driver.getApproveButtonTooltipText()).toBe(null);
});
it('should show tooltip when approve button is enabled', async () => {
const approveButtonTooltipContent = 'approve tooltip';
const { driver } = render(
<ListItemEditable
approveButtonTooltipContent={approveButtonTooltipContent}
onApprove={jest.fn()}
onCancel={jest.fn()}
/>,
);
await driver.enterText('some text');
expect(await driver.getApproveButtonTooltipText()).toBe(
approveButtonTooltipContent,
);
});
it('should not show cancel button tooltip if tooltip prop is not provided', async () => {
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={jest.fn()} />,
);
expect(await driver.getCancelButtonTooltipText()).toBe(null);
});
it('should not show approve button tooltip if tooltip prop is not provided', async () => {
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={jest.fn()} />,
);
await driver.enterText('some text');
expect(await driver.getApproveButtonTooltipText()).toBe(null);
});
});
describe('status attribute', () => {
it('should have no status', async () => {
const { driver } = render(
<ListItemEditable onApprove={jest.fn()} onCancel={jest.fn()} />,
);
expect(await driver.hasStatus('error')).toBe(false);
});
it.each([
{ status: 'error' },
{ status: 'warning' },
{ status: 'loading' },
])('should display status when %p', async test => {
const { driver } = render(
<ListItemEditable
onApprove={jest.fn()}
onCancel={jest.fn()}
{...test}
/>,
);
expect(await driver.hasStatus(test.status)).toBe(true);
expect(await driver.getStatusMessage()).toBeNull();
});
it.each([
{ status: 'error', statusMessage: 'Error Message' },
{ status: 'warning', statusMessage: 'Warning Message' },
{ status: 'loading', statusMessage: 'Loading Message' },
])('should display status with message when %p', async test => {
const { driver } = render(
<ListItemEditable
onApprove={jest.fn()}
onCancel={jest.fn()}
{...test}
/>,
);
expect(await driver.hasStatus(test.status)).toBe(true);
expect(await driver.getStatusMessage()).toBe(test.statusMessage);
});
});
});