wix-style-react
Version:
wix-style-react
181 lines (160 loc) • 7.54 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; };
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', function () {
var createDriver = createDriverFactory(editableSelectorDriverFactory);
var props = void 0;
beforeEach(function () {
props = {};
});
it('should have a list of selectors', function () {
props.options = [{ title: 'a' }, { title: 'b' }];
var driver = createDriver(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, props));
expect(driver.title()).toEqual(props.title);
});
it('should render "add row" button', function () {
props.newRowLabel = 'add new!';
var driver = createDriver(React.createElement(EditableSelector, props));
expect(driver.newRowButton().textContent).toEqual(props.newRowLabel);
});
it('should call onOptionAdded', function () {
props.onOptionAdded = sinon.spy();
var driver = createDriver(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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 = sinon.spy();
var driver = createDriver(React.createElement(EditableSelector, 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 = sinon.spy();
var driver = createDriver(React.createElement(EditableSelector, 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 = sinon.spy();
var driver = createDriver(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(React.createElement(EditableSelector, 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(ReactTestUtils.renderIntoDocument(React.createElement(
'div',
null,
React.createElement(EditableSelector, _extends({}, props, { dataHook: dataHook }))
)));
var editableSelectorTestkit = editableSelectorTestkitFactory({
wrapper: wrapper,
dataHook: dataHook
});
expect(editableSelectorTestkit.exists()).toBeTruthy();
});
});
describe('enzyme testkit', function () {
it('should exist', function () {
var dataHook = 'myDataHook';
var wrapper = mount(React.createElement(EditableSelector, _extends({}, props, { dataHook: dataHook })));
var editableSelectorTestkit = enzymeEditableSelectorTestkitFactory({
wrapper: wrapper,
dataHook: dataHook
});
expect(editableSelectorTestkit.exists()).toBeTruthy();
});
});
});