Files
elasticsearch-js/test/dsl/fluent-query.test.ts
delvedor 6038d01f45 Stash
2021-02-08 17:11:28 +01:00

557 lines
8.8 KiB
TypeScript

'use strict'
import { test } from 'tap'
/* eslint-disable no-unused-vars */
import * as types from '../../dsl/lib/types'
/* eslint-enable no-unused-vars */
import { F, Q } from '../../dsl'
test('match', t => {
t.deepEqual(
F()
.match('foo', 'bar')
.match('foo', 'baz')
.build(),
Q(
Q.match('foo', 'bar'),
Q.match('foo', 'baz')
)
)
t.deepEqual(
F()
.match('foo', ['bar', 'baz'])
.build(),
Q(
Q.match('foo', ['bar', 'baz'])
)
)
t.end()
})
test('matchPhrase', t => {
t.deepEqual(
F()
.matchPhrase('foo', 'bar')
.build(),
Q(Q.matchPhrase('foo', 'bar'))
)
t.end()
})
test('matchPhrasePrefix', t => {
t.deepEqual(
F()
.matchPhrasePrefix('foo', 'bar')
.build(),
Q(Q.matchPhrasePrefix('foo', 'bar'))
)
t.end()
})
test('multiMatch', t => {
t.deepEqual(
F()
.multiMatch(['foo1', 'foo2'], 'bar')
.build(),
Q(Q.multiMatch(['foo1', 'foo2'], 'bar'))
)
t.end()
})
test('matchAll', t => {
t.deepEqual(
F()
.matchAll()
.build(),
Q(Q.matchAll())
)
t.deepEqual(
F()
.matchAll({ boost: 1 })
.build(),
Q(Q.matchAll({ boost: 1 }))
)
t.end()
})
test('matchNone', t => {
t.deepEqual(
F()
.matchNone()
.build(),
Q(Q.matchNone())
)
t.end()
})
test('common', t => {
t.deepEqual(
F()
.common('key', 'val')
.build(),
Q(Q.common('key', 'val'))
)
t.deepEqual(
F()
.common('key', 'val', { boost: 1 })
.build(),
Q(Q.common('key', 'val', { boost: 1 }))
)
t.deepEqual(
F()
.common('key', ['val1', 'val2'])
.build(),
Q(Q.common('key', ['val1', 'val2']))
)
t.end()
})
test('queryString', t => {
t.deepEqual(
F()
.queryString('val', { boost: 1 })
.build(),
Q(Q.queryString('val', { boost: 1 }))
)
t.end()
})
test('simpleQueryString', t => {
t.deepEqual(
F()
.simpleQueryString('val', { boost: 1 })
.build(),
Q(Q.simpleQueryString('val', { boost: 1 }))
)
t.end()
})
test('term', t => {
t.deepEqual(
F()
.term('key', 'val')
.build(),
Q(Q.term('key', 'val'))
)
t.deepEqual(
F()
.term('key', 'val', { boost: 1 })
.build(),
Q(Q.term('key', 'val', { boost: 1 }))
)
t.deepEqual(
F()
.term('key', ['val1', 'val2'])
.build(),
Q(Q.term('key', ['val1', 'val2']))
)
t.end()
})
test('terms', t => {
t.deepEqual(
F()
.terms('key', ['val1', 'val2'])
.build(),
Q(Q.terms('key', ['val1', 'val2']))
)
t.deepEqual(
F()
.terms('key', ['val1', 'val2'], { boost: 1 })
.build(),
Q(Q.terms('key', ['val1', 'val2'], { boost: 1 }))
)
t.end()
})
test('termsSet', t => {
t.deepEqual(
F()
.termsSet('key', ['val1', 'val2'])
.build(),
Q(Q.termsSet('key', ['val1', 'val2']))
)
t.deepEqual(
F()
.termsSet('key', ['val1', 'val2'], { boost: 1 })
.build(),
Q(Q.termsSet('key', ['val1', 'val2'], { boost: 1 }))
)
t.end()
})
test('range', t => {
t.deepEqual(
F()
.range('key', { gt: 10 })
.build(),
Q(Q.range('key', { gt: 10 }))
)
t.end()
})
test('exists', t => {
t.deepEqual(
F()
.exists('key')
.build(),
Q(Q.exists('key'))
)
t.deepEqual(
F()
.exists(['key1', 'key2'])
.build(),
Q(Q.exists(['key1', 'key2']))
)
t.end()
})
test('prefix', t => {
t.deepEqual(
F()
.prefix('key', 'val')
.build(),
Q(Q.prefix('key', 'val'))
)
t.deepEqual(
F()
.prefix('key', 'val', { boost: 1 })
.build(),
Q(Q.prefix('key', 'val', { boost: 1 }))
)
t.deepEqual(
F()
.prefix('key', ['val1', 'val2'])
.build(),
Q(Q.prefix('key', ['val1', 'val2']))
)
t.end()
})
test('wildcard', t => {
t.deepEqual(
F()
.wildcard('key', 'val')
.build(),
Q(Q.wildcard('key', 'val'))
)
t.deepEqual(
F()
.wildcard('key', 'val', { boost: 1 })
.build(),
Q(Q.wildcard('key', 'val', { boost: 1 }))
)
t.deepEqual(
F()
.wildcard('key', ['val1', 'val2'])
.build(),
Q(Q.wildcard('key', ['val1', 'val2']))
)
t.end()
})
test('regexp', t => {
t.deepEqual(
F()
.regexp('key', 'val')
.build(),
Q(Q.regexp('key', 'val'))
)
t.deepEqual(
F()
.regexp('key', 'val', { boost: 1 })
.build(),
Q(Q.regexp('key', 'val', { boost: 1 }))
)
t.deepEqual(
F()
.regexp('key', ['val1', 'val2'])
.build(),
Q(Q.regexp('key', ['val1', 'val2']))
)
t.end()
})
test('fuzzy', t => {
t.deepEqual(
F()
.fuzzy('key', 'val')
.build(),
Q(Q.fuzzy('key', 'val'))
)
t.deepEqual(
F()
.fuzzy('key', 'val', { boost: 1 })
.build(),
Q(Q.fuzzy('key', 'val', { boost: 1 }))
)
t.deepEqual(
F()
.fuzzy('key', ['val1', 'val2'])
.build(),
Q(Q.fuzzy('key', ['val1', 'val2']))
)
t.end()
})
test('ids', t => {
t.deepEqual(
F()
.ids('key', ['val1', 'val2'])
.build(),
Q(Q.ids('key', ['val1', 'val2']))
)
t.end()
})
test('minShouldMatch', t => {
t.deepEqual(
F()
.minShouldMatch(42)
.build(),
Q(Q.minShouldMatch(42))
)
t.end()
})
test('name', t => {
t.deepEqual(
F()
.name('test')
.build(),
Q(Q.name('test'))
)
t.end()
})
test('size', t => {
t.deepEqual(
F()
.size(42)
.build(),
Q(Q.size(42))
)
t.end()
})
test('script', t => {
t.deepEqual(
F().script("doc['num1'].value > 1").build(),
Q(Q.script("doc['num1'].value > 1"))
)
t.deepEqual(
F().script("doc['num1'].value > 1", 'painless').build(),
Q(Q.script("doc['num1'].value > 1", 'painless'))
)
t.deepEqual(
F().script("doc['num1'].value > 1", { foo: 'bar' }).build(),
Q(Q.script("doc['num1'].value > 1", { foo: 'bar' }))
)
t.deepEqual(
F().script("doc['num1'].value > 1", { foo: 'bar' }, 'painless').build(),
Q(Q.script("doc['num1'].value > 1", { foo: 'bar' }, 'painless'))
)
t.end()
})
test('must', t => {
const q1 = F().must(
F().match('foo', 'bar'),
F().term('hello', 'world'),
F().should(
F().match('one', 'two').match('three', 'four')
),
F().match('faz', ['baz', 'zaz'])
)
const q2 = Q.must(
Q.match('foo', 'bar'),
Q.term('hello', 'world'),
Q.should(
Q.match('one', 'two'),
Q.match('three', 'four')
),
Q.match('faz', ['baz', 'zaz'])
)
t.deepEqual(q1.buildQuery(), Q.bool(q2))
t.end()
})
test('should', t => {
const q1 = F().should(
F().match('foo', 'bar'),
F().term('hello', 'world'),
F().must(
F().match('one', 'two').match('three', 'four')
),
F().match('faz', ['baz', 'zaz'])
)
const q2 = Q.should(
Q.match('foo', 'bar'),
Q.term('hello', 'world'),
Q.must(
Q.match('one', 'two'),
Q.match('three', 'four')
),
Q.match('faz', ['baz', 'zaz'])
)
t.deepEqual(q1.buildQuery(), Q.bool(q2))
t.end()
})
test('mustNot', t => {
const q1 = F().mustNot(
F().match('foo', 'bar'),
F().term('hello', 'world'),
F().should(
F().match('one', 'two').match('three', 'four')
),
F().match('faz', ['baz', 'zaz'])
)
const q2 = Q.mustNot(
Q.match('foo', 'bar'),
Q.term('hello', 'world'),
Q.should(
Q.match('one', 'two'),
Q.match('three', 'four')
),
Q.match('faz', ['baz', 'zaz'])
)
t.deepEqual(q1.buildQuery(), Q.bool(q2))
t.end()
})
test('filter', t => {
const q1 = F().filter(
F().match('foo', 'bar'),
F().term('hello', 'world'),
F().should(
F().match('one', 'two').match('three', 'four')
),
F().match('faz', ['baz', 'zaz'])
)
const q2 = Q.filter(
Q.match('foo', 'bar'),
Q.term('hello', 'world'),
Q.should(
Q.match('one', 'two'),
Q.match('three', 'four')
),
Q.match('faz', ['baz', 'zaz'])
)
t.deepEqual(q1.buildQuery(), Q.bool(q2))
t.end()
})
test('and', t => {
const q1 = F()
.match('foo', 'bar')
.match('foo', 'baz')
const q2 = F()
.should(
F()
.term('foo', 'bar')
.term('foo', 'baz')
)
t.deepEqual(
q1.clone().and(q2).buildQuery(),
Q.and(q1.buildQuery(), q2.buildQuery())
)
const q3 = F()
.match('foo', 'bar')
.match('foo', 'baz')
.sort('foo')
const q4 = F()
.should(
F()
.term('foo', 'bar')
.term('foo', 'baz')
)
t.deepEqual(
q3.clone().and(q4).buildQuery(),
Q.and(q3.buildQuery(), q4.buildQuery())
)
t.end()
})
test('toJSON', t => {
const q1 = F()
.match('foo', 'bar')
t.strictEqual(
JSON.stringify(q1),
'{"match":{"foo":"bar"}}'
)
const q2 = F()
.match('foo', 'bar')
.match('foo', 'baz')
t.strictEqual(
JSON.stringify(q2),
'{"bool":{"must":[{"match":{"foo":"bar"}},{"match":{"foo":"baz"}}]}}'
)
t.end()
})