wix-style-react
Version:
wix-style-react
242 lines (213 loc) • 9.08 kB
JavaScript
import React from 'react';
import MessageBoxFunctionalLayout from './MessageBoxFunctionalLayout';
import MessageBoxFunctionalLayoutFactory from './MessageBoxFunctionalLayout.driver';
import { createDriverFactory } from 'wix-ui-test-utils/driver-factory';
import sinon from 'sinon';
import { isTestkitExists, isEnzymeTestkitExists } from '../../test/utils/testkit-sanity';
import { messageBoxFunctionalLayoutTestkitFactory } from '../../testkit';
import { messageBoxFunctionalLayoutTestkitFactory as enzymeMessageBoxTestkitFactory } from '../../testkit/enzyme';
import { mount } from 'enzyme';
describe('MessageBox', function () {
var createDriver = createDriverFactory(MessageBoxFunctionalLayoutFactory);
describe('action buttons', function () {
it('should display the confirmation text on top the confirmation button', function () {
var props = {
confirmText: 'confirmText'
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getConfirmationButtonText()).toBe(props.confirmText);
});
it('should display the cancellation text on top the cancellation button', function () {
var props = {
cancelText: 'cancelText'
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getCancellationButtonText()).toBe(props.cancelText);
});
it('should disable cancel button if disabled', function () {
var props = {
cancelText: 'cancelText',
disableCancel: true
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.isCancelEnable()).toBeFalsy();
});
it('should disable confirmation button if disabled', function () {
var props = {
confirmText: 'ok',
disableConfirmation: true
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.isConfirmationEnable()).toBeFalsy();
});
it('should not display the cancellation button if cancellationText is empty', function () {
var props = {};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getCancellationButton()).toBeNull();
});
it('should trigger the \'onOk\' action upon clicking the confirmation button', function () {
var props = {
onOk: sinon.spy(),
confirmText: 'confirm'
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
driver.clickOnConfirmationButton();
expect(props.onOk.calledOnce).toBeTruthy();
});
it('should trigger the \'onCancel\' action upon clicking the cancellation button', function () {
var props = {
cancelText: 'cancelText',
onCancel: sinon.spy()
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
driver.clickOnCancellationButton();
expect(props.onCancel.calledOnce).toBeTruthy();
});
it('should render side actions', function () {
var dataHook = 'side-actions';
var props = {
sideActions: React.createElement('div', { 'data-hook': dataHook })
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getChildBySelector('[data-hook="' + dataHook + '"]')).not.toBeNull();
});
});
describe('closeButton attribute', function () {
it('should appear by default', function () {
var props = {
onCancel: sinon.spy()
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getHeaderCloseButton()).toBeTruthy();
});
it('should not appear', function () {
var props = {
onCancel: sinon.spy(),
closeButton: false
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getHeaderCloseButton()).toBeFalsy();
});
it('should trigger the \'onCancel\' action upon clicking the header close button', function () {
var props = {
onCancel: sinon.spy()
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
driver.clickOnHeaderCloseButton();
expect(props.onCancel.calledOnce).toBeTruthy();
});
it('should trigger the \'onClose\' action upon clicking the close button if \'onClose\' prop exists', function () {
var onCancelFunction = sinon.spy();
var onCloseFunction = sinon.spy();
var props = {
onCancel: onCancelFunction,
onClose: onCloseFunction
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
driver.clickOnHeaderCloseButton();
expect(props.onCancel.calledOnce).toBeFalsy();
expect(props.onClose.calledOnce).toBeTruthy();
});
});
describe('theme attribute', function () {
it('should set the theme by default to "blue"', function () {
var props = {};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.isThemeExist('blue')).toBeTruthy();
});
it('should allowing setting the theme', function () {
var props = {
theme: 'green'
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.isThemeExist('green')).toBeTruthy();
expect(driver.isThemeExist('blue')).toBeFalsy();
});
});
describe('footer children', function () {
it('should render the passed footer content', function () {
var props = {
footerBottomChildren: React.createElement('div', { 'data-hook': 'inner-div' })
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getChildBySelector('[data-hook="inner-div"]')).not.toBeNull();
expect(driver.getChildBySelector('[data-hook="footer-layout-bottom-children"]')).not.toBeNull();
});
it('should not render footer\'s wrapper div when footer content isn\'t passed', function () {
var props = {};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getChildBySelector('[data-hook="footer-layout-bottom-children"]')).toBeNull();
});
});
describe('general', function () {
it('should hide the footer', function () {
var props = {
hideFooter: true
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getFooter()).toBeNull();
});
it('should show footer by default', function () {
var props = {};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getFooter()).not.toBeNull();
});
it('should render title', function () {
var props = {
title: 'title'
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getTitle()).toBe(props.title);
});
it('should render the passed children in the markup', function () {
var props = {};
var driver = createDriver(React.createElement(
MessageBoxFunctionalLayout,
props,
React.createElement('div', { 'data-hook': 'inner-div' })
));
expect(driver.getChildBySelector('[data-hook="inner-div"]')).not.toBeNull();
});
it('should render with zero padding when explicitly asked for', function () {
var normalRendering = {};
var zeroPaddingRendering = { noBodyPadding: true };
var regularDriver = createDriver(React.createElement(
MessageBoxFunctionalLayout,
normalRendering,
React.createElement(
'div',
null,
'Content'
)
));
expect(regularDriver.toHaveBodyPadding()).toBeTruthy();
var zeroPaddingDriver = createDriver(React.createElement(
MessageBoxFunctionalLayout,
zeroPaddingRendering,
React.createElement(
'div',
null,
'Content'
)
));
expect(zeroPaddingDriver.toHaveBodyPadding()).toBeFalsy();
});
it('should render the passed image', function () {
var props = {
image: React.createElement('div', { 'data-hook': 'inner-div' })
};
var driver = createDriver(React.createElement(MessageBoxFunctionalLayout, props));
expect(driver.getChildBySelector('[data-hook="inner-div"]')).not.toBeNull();
});
});
describe('testkit', function () {
it('should exist', function () {
expect(isTestkitExists(React.createElement(MessageBoxFunctionalLayout, null), messageBoxFunctionalLayoutTestkitFactory)).toBe(true);
});
});
describe('enzyme testkit', function () {
it('should exist', function () {
expect(isEnzymeTestkitExists(React.createElement(MessageBoxFunctionalLayout, null), enzymeMessageBoxTestkitFactory, mount)).toBe(true);
});
});
});