keystone
Version:
Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose
355 lines (312 loc) • 10.1 kB
JavaScript
var demand = require('must');
exports.initList = function (List) {
List.add({
bool: { type: Boolean, note: 'This is a boolean field' },
indented: { type: Boolean, indent: true },
nested: {
bool: { type: Boolean },
},
defaultFalse: { type: Boolean, default: false },
defaultTrue: { type: Boolean, default: true },
required: { type: Boolean, required: true },
initial: { type: Boolean, initial: true },
requiredInitial: { type: Boolean, required: true, initial: true },
initialDefaultTrue: { type: Boolean, initial: true, default: true },
collapse: { type: Boolean, collapse: true },
});
};
exports.testFieldType = function (List) {
describe('updateItem', function () {
it('should be true when passed the boolean true', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: true,
}, function () {
demand(testItem.bool).be.true();
done();
});
});
it('should be true when passed the string "true"', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: 'true',
}, function () {
demand(testItem.bool).be.true();
done();
});
});
it('should be false when passed the boolean false', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: false,
}, function () {
demand(testItem.bool).be.false();
done();
});
});
it('should be false when passed the string "false"', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: 'false',
}, function () {
demand(testItem.bool).be.false();
done();
});
});
it('should be true when passed 1', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: 1,
}, function () {
demand(testItem.bool).be.true();
done();
});
});
it('should be true when passed any other string', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, { bool: 'abc' }, function (result) {
demand(testItem.bool).be.true();
done();
});
});
it('should be true when passed any numerical input > 1', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, { bool: 2 }, function (result) {
demand(testItem.bool).be.true();
done();
});
});
it('should be false when passed 0', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: 0,
}, function () {
demand(testItem.bool).be.false();
done();
});
});
it('should be false when passed undefined', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {}, function () {
demand(testItem.bool).be.false();
done();
});
});
it('should be false when passed an empty string', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, {
bool: '',
}, function () {
demand(testItem.bool).be.false();
done();
});
});
it('should be false when passed null', function (done) {
var testItem = new List.model();
List.fields.bool.updateItem(testItem, { bool: null }, function (result) {
demand(testItem.bool).be.false();
done();
});
});
it('should update nested fields', function (done) {
var testItem = new List.model();
List.fields['nested.bool'].updateItem(testItem, {
nested: {
bool: true,
},
}, function () {
demand(testItem.nested.bool).be.true();
done();
});
});
it('should update nested fields with flat paths', function (done) {
var testItem = new List.model();
List.fields['nested.bool'].updateItem(testItem, {
'nested.bool': true,
}, function () {
demand(testItem.nested.bool).be.true();
done();
});
});
});
describe('validateInput', function () {
it('should validate true', function (done) {
List.fields.bool.validateInput({ bool: true }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate false', function (done) {
List.fields.bool.validateInput({ bool: false }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate "true"', function (done) {
List.fields.bool.validateInput({ bool: 'true' }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate "false"', function (done) {
List.fields.bool.validateInput({ bool: 'false' }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate 0', function (done) {
List.fields.bool.validateInput({ bool: 0 }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate 1', function (done) {
List.fields.bool.validateInput({ bool: 1 }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate undefined input', function (done) {
List.fields.bool.validateInput({}, function (result) {
demand(result).be.true();
done();
});
});
it('should validate null', function (done) {
List.fields.bool.validateInput({ bool: null }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate an empty string', function (done) {
List.fields.bool.validateInput({ bool: '' }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate any other string input', function (done) {
List.fields.bool.validateInput({ bool: 'abc' }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate all numerical input > 2', function (done) {
List.fields.bool.validateInput({ bool: 2 }, function (result) {
demand(result).be.true();
done();
});
});
it('should invalidate object input', function (done) {
List.fields.bool.validateInput({ bool: {} }, function (result) {
demand(result).be.false();
done();
});
});
it('should invalidate array input', function (done) {
List.fields.bool.validateInput({ bool: [] }, function (result) {
demand(result).be.false();
done();
});
});
});
describe('validateRequiredInput', function () {
it('should validate true', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: true }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate a truthy string', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: 'abc' }, function (result) {
demand(result).be.true();
done();
});
});
it('should validate a truthy number', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: 2 }, function (result) {
demand(result).be.true();
done();
});
});
it('should invalidate "false"', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: 'false' }, function (result) {
demand(result).be.false();
done();
});
});
it('should invalidate false', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: false }, function (result) {
demand(result).be.false();
done();
});
});
it('should invalidate ""', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: '' }, function (result) {
demand(result).be.false();
done();
});
});
it('should invalidate null', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: null }, function (result) {
demand(result).be.false();
done();
});
});
it('should invalidate undefined', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: undefined }, function (result) {
demand(result).be.false();
done();
});
});
it('should invalidate 0', function (done) {
var testItem = new List.model();
List.fields.bool.validateRequiredInput(testItem, { bool: 0 }, function (result) {
demand(result).be.false();
done();
});
});
});
describe('addFilterToQuery', function () {
it('should filter with the mongodb negation when passed false', function () {
var result = List.fields.bool.addFilterToQuery({ value: false });
demand(result.bool).eql({
$ne: true,
});
});
it('should filter with the mongodb negation when passed "false"', function () {
var result = List.fields.bool.addFilterToQuery({ value: 'false' });
demand(result.bool).eql({
$ne: true,
});
});
it('should filter true when passed true', function () {
var result = List.fields.bool.addFilterToQuery({ value: true });
demand(result.bool).be.true();
});
});
/* Deprecated inputIsValid tests */
it('should always validate when not required', function () {
demand(List.fields.bool.inputIsValid({ bool: 'true' }, false)).be.true();
demand(List.fields.bool.inputIsValid({ bool: true }, false)).be.true();
demand(List.fields.bool.inputIsValid({ bool: 'false' }, false)).be.true();
demand(List.fields.bool.inputIsValid({ bool: false }, false)).be.true();
demand(List.fields.bool.inputIsValid({ bool: '' }, false)).be.true();
demand(List.fields.bool.inputIsValid({ bool: undefined }, false)).be.true();
});
it('should validate input properly when required', function () {
demand(List.fields.bool.inputIsValid({ bool: 'true' }, true)).be.true();
demand(List.fields.bool.inputIsValid({ bool: true }, true)).be.true();
demand(List.fields.bool.inputIsValid({ bool: 'false' }, true)).be.false();
demand(List.fields.bool.inputIsValid({ bool: false }, true)).be.false();
demand(List.fields.bool.inputIsValid({ bool: '' }, true)).be.false();
demand(List.fields.bool.inputIsValid({ bool: undefined }, true)).be.false();
});
};