UNPKG

wix-style-react

Version:
186 lines (165 loc) • 6.85 kB
import React from 'react'; import sinon from 'sinon'; import ReactTestUtils from 'react-dom/test-utils'; import editableSelectorDriverFactory from './EditableSelector.driver'; import { createDriverFactory } from 'wix-ui-test-utils/driver-factory'; import { editableSelectorTestkitFactory } from '../../testkit'; import EditableSelector from './EditableSelector'; import { editableSelectorTestkitFactory as enzymeEditableSelectorTestkitFactory } from '../../testkit/enzyme'; import { mount } from 'enzyme'; describe('EditableSelector', () => { const createDriver = createDriverFactory(editableSelectorDriverFactory); let props; beforeEach(() => { props = {}; }); it('should have a list of selectors', () => { props.options = [{ title: 'a' }, { title: 'b' }]; const driver = createDriver(<EditableSelector {...props} />); expect(driver.items()).toHaveLength(props.options.length); }); it('should have all selector data ', () => { props.options = [{ isSelected: true, title: 'Shir', onToggle: () => {} }]; const driver = createDriver(<EditableSelector {...props} />); const selector = driver.items()[0]; expect(selector.isChecked()).toEqual(props.options[0].isSelected); expect(selector.titleTextDriver().getText()).toEqual( props.options[0].title, ); }); it('should render a title', () => { props.title = "I'm a Title"; const driver = createDriver(<EditableSelector {...props} />); expect(driver.title()).toEqual(props.title); }); it('should render "add row" button', () => { props.newRowLabel = 'add new!'; const driver = createDriver(<EditableSelector {...props} />); expect(driver.newRowButton().textContent).toEqual(props.newRowLabel); }); it('should call onOptionAdded', () => { props.onOptionAdded = sinon.spy(); const driver = createDriver(<EditableSelector {...props} />); const newTitle = 'new option'; driver.addNewRow(newTitle); driver.clickApprove(); expect(props.onOptionAdded.calledWith({ newTitle })).toEqual(true); }); it('should exit editing mode after approve click', () => { const driver = createDriver(<EditableSelector {...props} />); const label = 'new option'; driver.addNewRow(label); driver.clickApprove(); expect(driver.isEditing()).toEqual(false); }); it('should exit editing mode after cancel click', () => { const driver = createDriver(<EditableSelector {...props} />); const label = 'new option'; driver.addNewRow(label); driver.clickCancel(); expect(driver.isEditing()).toEqual(false); }); it('should have edit and delete actions for each option', () => { props.options = [{ isSelected: false, title: 'Shir' }]; const driver = createDriver(<EditableSelector {...props} />); expect(driver.deleteButtonAt(0)).not.toBeUndefined(); expect(driver.editButtonAt(0)).not.toBeUndefined(); }); it('should get "edit" button text from props', () => { props.options = [{ isSelected: false, title: 'Shir' }]; props.editButtonText = 'Edit Label'; const driver = createDriver(<EditableSelector {...props} />); expect(driver.editButtonAt(0).textContent).toEqual(props.editButtonText); }); it('should call onOptionEdit', () => { props.options = [{ isSelected: false, title: 'Shir', onToggle: () => {} }]; props.onOptionEdit = sinon.spy(); const driver = createDriver(<EditableSelector {...props} />); const newTitle = 'yo'; driver.editRow(0, newTitle); driver.clickApprove(); expect(props.onOptionEdit.calledWith({ newTitle, index: 0 })).toEqual(true); }); it('should call onOptionToggle', () => { props.options = [{ isSelected: false, title: 'Shir' }]; props.onOptionToggle = sinon.spy(); const driver = createDriver(<EditableSelector {...props} />); driver.toggleItem(0); expect(props.onOptionToggle.calledOnce).toEqual(true); expect(props.onOptionToggle.calledWith(0)).toBe(true); }); it('should call onOptionDelete', () => { props.options = [{ isSelected: false, title: 'Shir', onToggle: () => {} }]; props.onOptionDelete = sinon.spy(); const driver = createDriver(<EditableSelector {...props} />); driver.deleteRow(0); expect(props.onOptionDelete.calledWith({ index: 0 })).toEqual(true); }); it('should use checkbox toggles', () => { props.toggleType = 'checkbox'; props.options = [{ isSelected: false, title: 'Shir' }]; const driver = createDriver(<EditableSelector {...props} />); const selector = driver.items()[0]; expect(selector.toggleType()).toEqual(props.toggleType); }); it('should use radio toggles', () => { props.toggleType = 'radio'; props.options = [{ isSelected: false, title: 'Shir' }]; const driver = createDriver(<EditableSelector {...props} />); const selector = driver.items()[0]; expect(selector.toggleType()).toEqual(props.toggleType); }); it('should stop edit when click add new row', () => { props.options = [{ isSelected: false, title: 'Shir', onToggle: () => {} }]; const driver = createDriver(<EditableSelector {...props} />); const newTitle = 'yo'; expect(driver.isEditingRow()).toBeFalsy(); driver.startEditing(0, newTitle); expect(driver.isEditingRow()).toBeTruthy(); driver.startAdding(); expect(driver.isEditingRow()).toBeFalsy(); expect(driver.isAddingRow()).toBeTruthy(); }); it('should stop add when click edit row', () => { props.options = [{ isSelected: false, title: 'Shir', onToggle: () => {} }]; const driver = createDriver(<EditableSelector {...props} />); const newTitle = 'yo'; expect(driver.startAdding()).toBeFalsy(); driver.startAdding(); expect(driver.isAddingRow()).toBeTruthy(); driver.startEditing(0, newTitle); expect(driver.isEditingRow()).toBeTruthy(); expect(driver.isAddingRow()).toBeFalsy(); }); describe('testkit', () => { it('should exist', () => { const div = document.createElement('div'); const dataHook = 'myDataHook'; const wrapper = div.appendChild( ReactTestUtils.renderIntoDocument( <div> <EditableSelector {...props} dataHook={dataHook} /> </div>, ), ); const editableSelectorTestkit = editableSelectorTestkitFactory({ wrapper, dataHook, }); expect(editableSelectorTestkit.exists()).toBeTruthy(); }); }); describe('enzyme testkit', () => { it('should exist', () => { const dataHook = 'myDataHook'; const wrapper = mount( <EditableSelector {...props} dataHook={dataHook} />, ); const editableSelectorTestkit = enzymeEditableSelectorTestkitFactory({ wrapper, dataHook, }); expect(editableSelectorTestkit.exists()).toBeTruthy(); }); }); });