UNPKG

wix-style-react

Version:
203 lines (167 loc) • 8.33 kB
'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _sinon = require('sinon'); var _sinon2 = _interopRequireDefault(_sinon); var _testUtils = require('react-dom/test-utils'); var _testUtils2 = _interopRequireDefault(_testUtils); var _EditableSelector = require('./EditableSelector.driver'); var _EditableSelector2 = _interopRequireDefault(_EditableSelector); var _driverFactory = require('wix-ui-test-utils/driver-factory'); var _testkit = require('../../testkit'); var _EditableSelector3 = require('./EditableSelector'); var _EditableSelector4 = _interopRequireDefault(_EditableSelector3); var _enzyme = require('../../testkit/enzyme'); var _enzyme2 = require('enzyme'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('EditableSelector', function () { var createDriver = (0, _driverFactory.createDriverFactory)(_EditableSelector2.default); var props = void 0; beforeEach(function () { props = {}; }); it('should have a list of selectors', function () { props.options = [{ title: 'a' }, { title: 'b' }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); expect(driver.items()).toHaveLength(props.options.length); }); it('should have all selector data ', function () { props.options = [{ isSelected: true, title: 'Shir', onToggle: function onToggle() {} }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var 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', function () { props.title = "I'm a Title"; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); expect(driver.title()).toEqual(props.title); }); it('should render "add row" button', function () { props.newRowLabel = 'add new!'; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); expect(driver.newRowButton().textContent).toEqual(props.newRowLabel); }); it('should call onOptionAdded', function () { props.onOptionAdded = _sinon2.default.spy(); var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var newTitle = 'new option'; driver.addNewRow(newTitle); driver.clickApprove(); expect(props.onOptionAdded.calledWith({ newTitle: newTitle })).toEqual(true); }); it('should exit editing mode after approve click', function () { var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var label = 'new option'; driver.addNewRow(label); driver.clickApprove(); expect(driver.isEditing()).toEqual(false); }); it('should exit editing mode after cancel click', function () { var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var label = 'new option'; driver.addNewRow(label); driver.clickCancel(); expect(driver.isEditing()).toEqual(false); }); it('should have edit and delete actions for each option', function () { props.options = [{ isSelected: false, title: 'Shir' }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); expect(driver.deleteButtonAt(0)).not.toBeUndefined(); expect(driver.editButtonAt(0)).not.toBeUndefined(); }); it('should get "edit" button text from props', function () { props.options = [{ isSelected: false, title: 'Shir' }]; props.editButtonText = 'Edit Label'; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); expect(driver.editButtonAt(0).textContent).toEqual(props.editButtonText); }); it('should call onOptionEdit', function () { props.options = [{ isSelected: false, title: 'Shir', onToggle: function onToggle() {} }]; props.onOptionEdit = _sinon2.default.spy(); var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var newTitle = 'yo'; driver.editRow(0, newTitle); driver.clickApprove(); expect(props.onOptionEdit.calledWith({ newTitle: newTitle, index: 0 })).toEqual(true); }); it('should call onOptionToggle', function () { props.options = [{ isSelected: false, title: 'Shir' }]; props.onOptionToggle = _sinon2.default.spy(); var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); driver.toggleItem(0); expect(props.onOptionToggle.calledOnce).toEqual(true); expect(props.onOptionToggle.calledWith(0)).toBe(true); }); it('should call onOptionDelete', function () { props.options = [{ isSelected: false, title: 'Shir', onToggle: function onToggle() {} }]; props.onOptionDelete = _sinon2.default.spy(); var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); driver.deleteRow(0); expect(props.onOptionDelete.calledWith({ index: 0 })).toEqual(true); }); it('should use checkbox toggles', function () { props.toggleType = 'checkbox'; props.options = [{ isSelected: false, title: 'Shir' }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var selector = driver.items()[0]; expect(selector.toggleType()).toEqual(props.toggleType); }); it('should use radio toggles', function () { props.toggleType = 'radio'; props.options = [{ isSelected: false, title: 'Shir' }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var selector = driver.items()[0]; expect(selector.toggleType()).toEqual(props.toggleType); }); it('should stop edit when click add new row', function () { props.options = [{ isSelected: false, title: 'Shir', onToggle: function onToggle() {} }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var 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', function () { props.options = [{ isSelected: false, title: 'Shir', onToggle: function onToggle() {} }]; var driver = createDriver(_react2.default.createElement(_EditableSelector4.default, props)); var 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', function () { it('should exist', function () { var div = document.createElement('div'); var dataHook = 'myDataHook'; var wrapper = div.appendChild(_testUtils2.default.renderIntoDocument(_react2.default.createElement( 'div', null, _react2.default.createElement(_EditableSelector4.default, _extends({}, props, { dataHook: dataHook })) ))); var editableSelectorTestkit = (0, _testkit.editableSelectorTestkitFactory)({ wrapper: wrapper, dataHook: dataHook }); expect(editableSelectorTestkit.exists()).toBeTruthy(); }); }); describe('enzyme testkit', function () { it('should exist', function () { var dataHook = 'myDataHook'; var wrapper = (0, _enzyme2.mount)(_react2.default.createElement(_EditableSelector4.default, _extends({}, props, { dataHook: dataHook }))); var editableSelectorTestkit = (0, _enzyme.editableSelectorTestkitFactory)({ wrapper: wrapper, dataHook: dataHook }); expect(editableSelectorTestkit.exists()).toBeTruthy(); }); }); });