@wix/design-system
Version:
@wix/design-system
127 lines • 6.41 kB
JavaScript
import React from 'react';
import Selector from './Selector';
import { ASSET_PREFIX } from '../utils/test-utils';
import { createRendererWithUniDriver, cleanup } from '../utils/test-utils/unit';
import { selectorUniDriverFactory } from './Selector.uni.driver';
describe('Selector', () => {
const render = createRendererWithUniDriver(selectorUniDriverFactory);
afterEach(() => cleanup());
const defaultProps = {
id: 1,
title: 'title',
};
it('should be unchecked by default', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.isChecked()).toBe(false);
});
it('should not render the subtitle by default', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.subtitleTextDriver().exists()).toBe(false);
});
it('should not render the extra node', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.hasExtraNode()).toBe(false);
});
it('should render the title', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.titleTextDriver().getText()).toBe(defaultProps.title);
});
it('should render the subtitle', async () => {
const props = { ...defaultProps, ...{ subtitle: 'sub title' } };
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.subtitleTextDriver().getText()).toBe('sub title');
});
it('should render the extra node', async () => {
const props = { ...defaultProps, ...{ extraNode: 'extra text' } };
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.hasExtraNode()).toBe(true);
expect((await driver.getExtraNode()).textContent).toBe('extra text');
});
it('should not render the image by default', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.hasImage()).toBe(false);
});
it('should render the image', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps, image: React.createElement("img", { src: "img.png" }) }));
expect(await driver.hasImage()).toBe(true);
expect(await driver.getImage()).toBeInstanceOf(HTMLImageElement);
expect((await driver.getImage()).src).toBe(`${ASSET_PREFIX}img.png`);
});
it('should render a radio toggle by default', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.toggleType()).toBe('radio');
});
it('should render a checkbox toggle', async () => {
const toggleType = 'checkbox';
const props = { ...defaultProps, ...{ toggleType } };
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.toggleType()).toBe(toggleType);
});
it('should render an indeterminate checkbox toggle', async () => {
const toggleType = 'checkbox';
const indeterminate = true;
const props = { ...defaultProps, ...{ toggleType, indeterminate } };
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.toggleType()).toBe(toggleType);
expect(await driver.isIndeterminate()).toBe(true);
});
it('should render a radio toggle', async () => {
const toggleType = 'radio';
const props = { ...defaultProps, ...{ toggleType } };
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.toggleType()).toBe(toggleType);
});
it('should not propagate when selecting a disabled selector', async () => {
const onToggle = jest.fn();
const toggleType = 'radio';
const props = { ...defaultProps, ...{ toggleType } };
const { driver } = render(React.createElement(Selector, { onToggle: onToggle, ...props, isDisabled: true }));
await driver.toggle();
expect(onToggle).not.toHaveBeenCalled();
});
it('should not render disabled tooltip by default', async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps }));
expect(await driver.getTooltipText()).toBe(null);
});
it('should not render disabled tooltip when not disabled', async () => {
const props = {
...defaultProps,
toggleTooltipProps: { content: 'Disabled for testing' },
};
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.getTooltipText()).toBe(null);
});
it('should not render disabled tooltip when toggleTooltipProps is not provided', async () => {
const props = { ...defaultProps, isDisabled: true };
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.getTooltipText()).toBe(null);
});
it('should render disabled tooltip when disabled and toggleTooltipProps is provided', async () => {
const disabledReason = 'This item is disabled for testing';
const props = {
...defaultProps,
isDisabled: true,
toggleTooltipProps: { content: disabledReason },
};
const { driver } = render(React.createElement(Selector, { ...props }));
expect(await driver.getTooltipText()).toBe(disabledReason);
});
describe('given image size', () => {
const sizesAndTestkitMethods = [
['tiny', 'isImageTiny'],
['small', 'isImageSmall'],
['portrait', 'isImagePortrait'],
['large', 'isImageLarge'],
['cinema', 'isImageCinema'],
];
sizesAndTestkitMethods.forEach(([size, method]) => {
it(`should set correct className for "${size}"`, async () => {
const { driver } = render(React.createElement(Selector, { ...defaultProps,
imageSize: size,
image: React.createElement("img", { src: "img.png" }) }));
expect(await driver[method]()).toBe(true);
});
});
});
});
//# sourceMappingURL=Selector.spec.js.map