import type { ShallowWrapper } from 'enzyme'; import { shallow } from 'enzyme'; import React from 'react'; import type { ILabelEditorProps } from './LabelEditor'; import LabelEditor from './LabelEditor'; describe('', () => { let onChangeSpy: jasmine.Spy; let props: ILabelEditorProps; let component: ShallowWrapper; beforeEach(() => { onChangeSpy = jasmine.createSpy('onChangeSpy'); props = { labelSelectors: [ { key: 'my-label-1', kind: 'EQUALS', values: ['my-value-1', 'my-value-2'], }, { key: 'my-label-2', kind: 'NOT_EQUALS', values: ['my-value-3'], }, ], onLabelSelectorsChange: onChangeSpy, }; component = shallow(); }); describe('view', () => { it('renders a row for each label selector', () => { expect(component.find('.label-editor-selector-row').length).toEqual(props.labelSelectors.length); }); it('renders selector values as comma-separated lists', () => { expect(component.find('.label-editor-values-input').at(0).props().value).toEqual('my-value-1, my-value-2'); expect(component.find('.label-editor-values-input').at(1).props().value).toEqual('my-value-3'); }); }); describe('functionality', () => { it('calls `props.onLabelSelectorsChange` when selector properties are changed', () => { component .find('.label-editor-key-input') .at(0) .simulate('change', { target: { value: 'my-label-1-edited' } }); expect(onChangeSpy).toHaveBeenCalledWith([ { ...props.labelSelectors[0], key: 'my-label-1-edited', }, props.labelSelectors[1], ]); component .find('.label-editor-values-input') .at(1) .simulate('change', { target: { value: 'my-value-3, my-value-4' } }); expect(onChangeSpy).toHaveBeenCalledWith([ props.labelSelectors[0], { ...props.labelSelectors[1], values: ['my-value-3', 'my-value-4'], }, ]); }); it('handles adding label selectors', () => { component.find('.add-new').simulate('click'); expect(onChangeSpy).toHaveBeenCalledWith([...props.labelSelectors, { key: '', kind: 'EQUALS', values: [] }]); }); it('handles removing label selectors', () => { component.find('.label-editor-remove').at(1).simulate('click'); expect(onChangeSpy).toHaveBeenCalledWith([ { ...props.labelSelectors[0], }, ]); }); }); });