@searchkit/sdk
Version:
Elasticsearch Universal SDK for Searchkit
154 lines (148 loc) • 5.08 kB
text/typescript
import nock from 'nock'
import SearchkitRequest, { SearchkitConfig, MultiQueryOptionsFacet } from '../../src'
import ResultsNoHitsMock from '../__mock-data__/Facets/results-multi-query-options.json'
describe('MultiQueryOptionsFacet', () => {
it('range of value, min-max range facets', async () => {
const moviesSearchConfig: SearchkitConfig = {
host: 'http://localhost:9200',
index: 'us_parks',
hits: {
fields: []
},
facets: [
new MultiQueryOptionsFacet({
field: 'visitors.keyword',
options: [
{ min: 0, max: 10000, label: '0 - 10000' },
{ min: 10001, max: 100000, label: '10001 - 100000' },
{ min: 100001, max: 500000, label: '100001 - 500000' },
{ min: 500001, max: 1000000, label: '500001 - 1000000' },
{ min: 1000001, max: 5000000, label: '1000001 - 5000000' },
{ min: 5000001, max: 10000000, label: '5000001 - 10000000' },
{ min: 10000001, label: '10000001+' }
],
label: 'Visitors',
identifier: 'visitors'
})
]
}
const request = SearchkitRequest(moviesSearchConfig)
request.setFilters([
{
identifier: 'visitors',
value: '0 - 10000'
}
])
let lastESRequest
const scope = nock('http://localhost:9200')
.post('/us_parks/_search')
.reply(200, (uri, body: any) => {
expect(body.aggs).toMatchInlineSnapshot(`
Object {
"facet_bucket_all": Object {
"aggs": Object {
"visitors": Object {
"filters": Object {
"filters": Object {
"0 - 10000": Object {
"range": Object {
"visitors.keyword": Object {
"lte": 10000,
},
},
},
"10000001+": Object {
"range": Object {
"visitors.keyword": Object {
"gte": 10000001,
},
},
},
"1000001 - 5000000": Object {
"range": Object {
"visitors.keyword": Object {
"gte": 1000001,
"lte": 5000000,
},
},
},
"100001 - 500000": Object {
"range": Object {
"visitors.keyword": Object {
"gte": 100001,
"lte": 500000,
},
},
},
"10001 - 100000": Object {
"range": Object {
"visitors.keyword": Object {
"gte": 10001,
"lte": 100000,
},
},
},
"5000001 - 10000000": Object {
"range": Object {
"visitors.keyword": Object {
"gte": 5000001,
"lte": 10000000,
},
},
},
"500001 - 1000000": Object {
"range": Object {
"visitors.keyword": Object {
"gte": 500001,
"lte": 1000000,
},
},
},
},
},
},
},
"filter": Object {
"bool": Object {
"must": Array [
Object {
"bool": Object {
"must": Array [
Object {
"range": Object {
"visitors.keyword": Object {
"lte": 10000,
},
},
},
],
},
},
],
},
},
},
}
`)
lastESRequest = body
return ResultsNoHitsMock
})
.persist()
const response = await request.execute({
facets: true
})
expect(response).toMatchSnapshot()
expect(response.summary.appliedFilters).toMatchInlineSnapshot(`
Array [
Object {
"display": "ListFacet",
"id": "visitors_0 - 10000",
"identifier": "visitors",
"label": "Visitors",
"type": "MultiQueryOptionsFacet",
"value": "0 - 10000",
},
]
`)
})
})