comparify
Version:
Simple criteria checking, so you can test a subset of an object's properties.
168 lines (138 loc) • 4.52 kB
JavaScript
var comparify = require('../');
describe('Comparify', function() {
var object = {
key1: 1,
key2: "2",
keyNull: null,
deep: {
key3: 3
},
veryDeep: {
value: {
key4: 4
}
},
many: [1, '2']
};
it('should check simple keys', function() {
comparify(object, {key1: 1}).should.be.true;
comparify(object, {key1: 0}, true).should.be.false;
comparify(object, {keyNull: null}).should.be.true;
comparify(object, {keyNull: 1}).should.be.false;
});
it('should check dot-notation keys', function() {
comparify(object, {'deep.key3': 3}).should.be.true;
comparify(object, {'deep.key3': 4}).should.be.false;
});
it('should check multiple keys', function() {
comparify(object, {
'key1': 1,
key2: '2'
}).should.be.true;
comparify(object, {
'key1': 1,
key2: '3'
}).should.be.false;
});
it('should check mixed simple and nested keys', function() {
comparify(object, {
'deep.key3': 3,
key1: 1
}).should.be.true;
comparify(object, {
'deep.key3': 2,
key1: 1
}).should.be.false;
});
it('should recurse through object searches', function() {
comparify(object, {
deep: {key3: 3}
}).should.be.true;
comparify(object, {
deep: {key3: 4}
}).should.be.false;
});
it('should handle mixed object and dot-notation', function() {
comparify(object, {
'deep.key3': 3,
deep: {key3: 3}
}).should.be.true;
comparify(object, {
'deep.key3': 4,
deep: {key3: 3}
}).should.be.false;
comparify(object, {
'deep.key3': 3,
deep: {key3: 4}
}).should.be.false;
});
it('should handle the kitchen sink', function() {
comparify(object, {
key1: 1,
'key2': '2',
keyNull: null,
deep: {key3: 3},
'deep.key3': 3,
veryDeep: {
'value.key4': 4,
value: {key4: 4}
},
'veryDeep.value.key4': 4
}).should.be.true;
});
it('should use regexes', function() {
comparify(object, {'key2': /2/}).should.be.true;
comparify(object, {'key2': /3/}).should.be.false;
});
it('should handle arrays as values', function() {
comparify(object, {'many': 1}).should.be.true;
comparify(object, {'many': '2'}).should.be.true;
comparify(object, {'many': 3}).should.be.false;
});
it('should handle arrays as criterias', function() {
comparify(object, {many: [1, '2']}).should.be.true;
comparify(object, {many: ['1', 2]}).should.be.false;
});
describe('Example use test cases', function() {
var email = {
from: 'tester@example.com',
to: ['myfriend@example.com', 'boss@example.com'],
subject: 'My Email',
body: 'Hello,\nI will be on vacation for the rest of the year.\n\nThanks!'
};
it('should check FROM address', function() {
comparify(email, {from: 'tester@example.com'}).should.be.true;
comparify(email, {from: 'other@example.com'}).should.be.false;
});
it('should check TO addresses', function() {
comparify(email, {to: 'myfriend@example.com'}).should.be.true;
comparify(email, {to: 'boss@example.com'}).should.be.true;
comparify(email, {to: 'other@example.com'}).should.be.false;
});
it('should check multiple TO addresses', function() {
comparify(email, {to: ['myfriend@example.com', 'boss@example.com']}).should.be.true;
comparify(email, {to: ['myfriend@example.com', 'you@example.com']}).should.be.false;
});
});
describe('README.md demo examples', function() {
var data = {
timestamp: 1395877795067,
deviceID: '765CBA',
recipient: {
name: 'Thomas'
},
uses: ['making pancakes', 'running', 'hugs']
};
it('shouldn\'t lie', function() {
(comparify(data, {deviceID: '765CBA'}) === true).should.be.true;
(comparify(data, {deviceID: 'ABC123'}) === false).should.be.true;
(comparify(data, {'recipient.name': 'Thomas'}) === true).should.be.true;
(comparify(data, {recipient: {name: 'Thomas'}}) === true).should.be.true;
(comparify(data, {uses: 'running'}) === true).should.be.true;
(comparify(data, {uses: 'skiing'}) === false).should.be.true;
(comparify(data, {uses: ['running', 'hugs']}) === true).should.be.true;
(comparify(data, {uses: ['running', 'skiing']}) === false).should.be.true;
(comparify(data, {'recipient.name': /omas/}) === true).should.be.true;
});
});
});