wix-style-react
Version:
wix-style-react
203 lines (167 loc) • 8.33 kB
JavaScript
;
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();
});
});
});