@searchkit/sdk
Version:
Elasticsearch Universal SDK for Searchkit
117 lines (105 loc) • 2.67 kB
text/typescript
import nock from 'nock'
import SearchkitRequest, { Filter, SearchkitConfig } from '../../src'
import ResultsNoHitsMock from '../__mock-data__/Facets/results-no-hits.json'
describe('NumericRangeFilter', () => {
it('Combination of min and max number filters', async () => {
const moviesSearchConfig: SearchkitConfig = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers']
},
filters: [
new Filter({
identifier: 'imdbRating',
field: 'imdbRating',
label: 'IMDB Rating'
})
]
}
const request = SearchkitRequest(moviesSearchConfig)
request.setFilters([
{
identifier: 'imdbRating',
min: 5,
max: 10
}
])
let lastESRequest
const scope = nock('http://localhost:9200')
.post('/movies/_search')
.reply(200, (uri, body) => {
expect(body).toMatchSnapshot()
lastESRequest = body
return ResultsNoHitsMock
})
.persist()
let response = await request.execute({
facets: true
})
expect(response).toMatchSnapshot()
expect(response.summary.appliedFilters).toMatchInlineSnapshot(`
Array [
Object {
"display": "RangeFilter",
"id": "imdbRating_5_10",
"identifier": "imdbRating",
"label": "IMDB Rating",
"max": 10,
"min": 5,
"type": "NumericRangeSelectedFilter",
},
]
`)
request.setFilters([
{
identifier: 'imdbRating',
min: 5
}
])
response = await request.execute({
facets: true
})
expect(lastESRequest.query.bool.filter[0]).toMatchInlineSnapshot(`
Object {
"bool": Object {
"filter": Array [
Object {
"range": Object {
"imdbRating": Object {
"gte": 5,
},
},
},
],
},
}
`)
expect(response.summary.appliedFilters).toHaveLength(1)
request.setFilters([
{
identifier: 'imdbRating',
max: 5
}
])
response = await request.execute({
facets: true
})
expect(lastESRequest.query.bool.filter[0]).toMatchInlineSnapshot(`
Object {
"bool": Object {
"filter": Array [
Object {
"range": Object {
"imdbRating": Object {
"lte": 5,
},
},
},
],
},
}
`)
expect(response.summary.appliedFilters).toHaveLength(1)
})
})