@rule.js/elasticsearch
Version:
Serializable object assertions.
116 lines (105 loc) • 2.59 kB
JavaScript
'use strict'
const assert = require('power-assert')
const esUtil = require('@rule.js/elasticsearch-util')
const ruleElasticsearch = require('../index')()
const ruleContextualize = require('@rule.js/contextualize')
const Rule = require('@rule.js/core').extend(
{},
{
elasticsearch: ruleElasticsearch,
contextualize: ruleContextualize
}
)
const search = esUtil.search
describe('@rule.js/elasticsearch#functional', () => {
before(function() {
this.timeout(10000)
return esUtil.prepareType({
mapping: {
index: 'test',
type: 'people',
body: {
people: {
properties: {
firstName: {
type: 'keyword'
},
lastName: {
type: 'keyword'
},
age: {
type: 'integer'
},
deceased: {
type: 'boolean'
},
occupation: {
type: 'keyword'
},
country: {
type: 'keyword'
},
instrument: {
type: 'keyword'
}
}
}
}
},
data: require('./fixtures/es-data')
})
})
it('allows strict equality', () => {
const query = Rule()
.equal('lastName', 'Boudreau')
.elasticsearch()
return search(query).then(res => {
assert.equal(res.hits.hits.length, 1)
})
})
it('allows multiple conditions', () => {
const query = Rule()
.equal('firstName', 'Joe')
.equal('lastName', 'Pass')
.elasticsearch()
return search(query).then(res => {
assert.equal(res.hits.hits.length, 1)
})
})
it('does greater than comparisons', () => {
const query = Rule()
.gt('age', 24)
.lt('age', 50)
.elasticsearch()
return search(query).then(res => {
assert.equal(res.hits.hits.length, 1)
assert.equal(res.hits.hits[0]._source.country, 'Germany')
})
})
it('matches all', () => {
const query = Rule()
.gt('user.age', 10)
.contextualize({
user: {
age: 15
}
})
.elasticsearch()
return search(query).then(res => {
assert.equal(res.hits.hits.length, 5)
})
})
it('matches none', () => {
const query = Rule()
.lt('user.age', 10)
.contextualize({
user: {
age: 15
}
})
.elasticsearch()
return search(query).then(res => {
assert.equal(res.hits.hits.length, 0)
})
})
})