@activelylearn/material-ui
Version:
Material-UI's workspace package
104 lines (86 loc) • 3.43 kB
JavaScript
// @flow
import { assert } from 'chai';
import requirePropFactory from './requirePropFactory';
describe('requirePropFactory', () => {
const componentNameInError = 'componentNameInError';
let requireProp;
before(() => {
requireProp = requirePropFactory(componentNameInError);
});
it('should have the right shape', () => {
assert.strictEqual(typeof requirePropFactory, 'function', 'should be a function');
assert.strictEqual(typeof requireProp, 'function', 'should return a function');
});
describe('requireProp()', () => {
const requiredPropName = 'requiredPropName';
let requirePropValidator;
before(() => {
requirePropValidator = requireProp(requiredPropName);
});
it('should return a function', () => {
assert.strictEqual(typeof requirePropValidator, 'function');
});
describe('requirePropValidator', () => {
let props;
let propName;
it('should return null for propName not in props', () => {
propName = 'propName';
props = {};
const result = requirePropValidator(props, propName, undefined, undefined, undefined);
assert.strictEqual(result, null);
});
it('should return null for propName and requiredProp in props', () => {
propName = 'propName';
props = {};
props[propName] = true;
props[requiredPropName] = true;
const result = requirePropValidator(props, propName, undefined, undefined, undefined);
assert.strictEqual(result, null);
});
describe('propName is in props and requiredProp not in props', () => {
let result;
before(() => {
props = {};
propName = 'propName';
props[propName] = true;
delete props[requiredPropName];
result = requirePropValidator(props, propName, undefined, undefined, undefined);
});
it('should return Error', () => {
assert.property(result, 'name', 'result should have name property');
assert.property(result, 'name', 'result should have name property');
assert.strictEqual(result.name, 'Error');
assert.property(result, 'message', 'result should have message property');
assert.strictEqual(
result.message.indexOf(propName) > -1,
true,
'returned error message should have propName',
);
assert.strictEqual(
result.message.indexOf(requiredPropName) > -1,
true,
'returned error message should have requiredPropName',
);
assert.strictEqual(
result.message.indexOf(componentNameInError) > -1,
true,
'returned error message should have componentNameInError',
);
});
describe('propFullName given to validator', () => {
let propFullName;
before(() => {
propFullName = 'propFullName';
result = requirePropValidator(props, propName, undefined, undefined, propFullName);
});
it('returned error message should have propFullName', () => {
assert.strictEqual(result.message.indexOf(propFullName) > -1, true);
});
it('returned error message should not have propName', () => {
assert.strictEqual(result.message.indexOf(propName), -1);
});
});
});
});
});
});