import React from 'react'; import Enzyme, { shallow } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { render, fireEvent, waitFor, screen, cleanup } from '@testing-library/react'; import { DualRangeSlider } from '.'; afterEach(() => cleanup()); const renderElement = ({ domain = [0, 25], valueMin = 5, valueMax = 10, step = 1, onChange = () => undefined, onPropsChange = () => undefined }) => { render( ); }; describe('', () => { it('should render with correct values', () => { renderElement({ domain: [-100, 100], valueMin: -20, valueMax: 50 }); expect(screen.getByTestId('lower-bound-input')).toHaveValue(-20); expect(screen.getByTestId('upper-bound-input')).toHaveValue(50); expect(screen.getAllByTestId('slider-button')[0]).toHaveAttribute('aria-valuenow', '-20'); expect(screen.getAllByTestId('slider-button')[1]).toHaveAttribute('aria-valuenow', '50'); }); it('should change slider values when input changes', async () => { renderElement({ domain: [-100, 100], valueMin: -20, valueMax: 50 }); fireEvent.change(screen.getByTestId('lower-bound-input'), { target: { value: 9 } }); await waitFor(() => { expect(screen.getByTestId('lower-bound-input')).toHaveValue(9); expect(screen.getAllByTestId('slider-button')[0]).toHaveAttribute('aria-valuenow', '9'); }); }); it('should prevent values outside of domain', async () => { renderElement({ domain: [-100, 100], valueMin: -20, valueMax: 50 }); fireEvent.change(screen.getByTestId('lower-bound-input'), { target: { value: -111 } }); await waitFor(() => { expect(screen.getByTestId('lower-bound-input')).toHaveValue(-100); expect(screen.getAllByTestId('slider-button')[0]).toHaveAttribute('aria-valuenow', '-100'); }); fireEvent.change(screen.getByTestId('lower-bound-input'), { target: { value: 70 } }); await waitFor(() => { expect(screen.getByTestId('lower-bound-input')).toHaveValue(70); expect(screen.getByTestId('upper-bound-input')).toHaveValue(70); expect(screen.getAllByTestId('slider-button')[0]).toHaveAttribute('aria-valuenow', '70'); expect(screen.getAllByTestId('slider-button')[1]).toHaveAttribute('aria-valuenow', '70'); }); }); it('should use nice domain values', async () => { renderElement({ domain: [-97, 88] }); expect(screen.getAllByTestId('tick-value')[0]).toHaveTextContent('-100'); expect(screen.getAllByTestId('tick-value')[4]).toHaveTextContent('100'); }); });