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) }) })