@searchkit/schema
Version:
Elasticsearch GraphQL Resolvers
80 lines (74 loc) • 2.27 kB
text/typescript
import nock from 'nock'
import { SearchkitConfig } from '@searchkit/sdk'
import { CustomQuery } from '@searchkit/sdk'
import { setupTestServer, callQuery } from './support/helper'
import HitsMock from './__mock-data__/HitResolver/Hits.json'
describe('Query Options', () => {
describe('should return as expected', () => {
const config: SearchkitConfig = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers']
},
sortOptions: [{ field: 'relevance', id: 'relevance', label: 'Relevance' }],
query: new CustomQuery({
queryFn: (query, queryManager) => {
expect(queryManager.getQueryOptions().fields).toEqual(['customField'])
expect(queryManager.getSortBy()).toEqual({
id: 'relevance',
field: 'relevance',
label: 'Relevance'
})
const field = queryManager.getQueryOptions().fields[0]
return {
bool: {
must: [
{
wildcard: {
[field]: {
value: query + '*',
boost: 1.0,
rewrite: 'constant_score'
}
}
}
]
}
}
}
})
}
const runQuery = async (page = { size: 10, from: 0 }) => {
const gql = `
query {
results(query: "tes", queryOptions: { fields: ["customField"] }) {
hits(sortBy: "relevance") {
items {
id
}
}
}
}
`
const response = await callQuery({ gql })
return response
}
it('Custom Query Options', async () => {
setupTestServer({
config,
addToQueryType: true,
typeName: 'ResultSet',
hitTypeName: 'ResultHit'
})
const scope = nock('http://localhost:9200')
.post('/movies/_search')
.reply((uri, body: any) => {
expect(body.query.bool.must[0].wildcard.customField).toBeDefined()
return [200, HitsMock]
})
const response = await runQuery()
expect(response.body.data.results.hits.items).toHaveLength(10)
})
})
})