@searchkit/schema
Version:
Elasticsearch GraphQL Resolvers
143 lines (129 loc) • 3.97 kB
text/typescript
import nock from 'nock'
import { SearchkitConfig } from '@searchkit/sdk'
import { MultiMatchQuery } from '@searchkit/sdk'
import { setupTestServer, callQuery } from './support/helper'
import HitsMock from './__mock-data__/HitResolver/Hits.json'
import NoHitsES7Mock from './__mock-data__/HitResolver/NoHitsES7.json'
import NoHitsMock from './__mock-data__/HitResolver/NoHits.json'
describe('Pagination', () => {
describe('should return as expected', () => {
const config: SearchkitConfig = {
host: 'http://localhost:9200',
index: 'movies',
hits: {
fields: ['actors', 'writers']
},
query: new MultiMatchQuery({ fields: ['actors', 'writers', 'title^4', 'plot'] })
}
const runQuery = async (page = { size: 10, from: 0 }) => {
const gql = `
query {
results {
summary {
total
}
hits(page: {from: ${page.from}, size: ${page.size} }) {
items {
id
}
page {
total
totalPages
pageNumber
from
size
}
}
}
}
`
const response = await callQuery({ gql })
return response
}
it('Pagination results', async () => {
setupTestServer({
config,
addToQueryType: true,
typeName: 'ResultSet',
hitTypeName: 'ResultHit'
})
const scope = nock('http://localhost:9200')
.post('/movies/_search')
.reply((uri, body) => [200, HitsMock])
let response = await runQuery()
expect(response.body.data.results.hits.page).toMatchInlineSnapshot(`
Object {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 4162,
"totalPages": 417,
}
`)
expect(response.body.data.results.hits.items).toHaveLength(10)
expect(response.status).toEqual(200)
nock('http://localhost:9200')
.post('/movies/_search')
.reply((uri, body) => [200, HitsMock])
response = await runQuery({ from: 20, size: 10 })
expect(response.body.data.results.hits.page).toMatchInlineSnapshot(`
Object {
"from": 20,
"pageNumber": 2,
"size": 10,
"total": 4162,
"totalPages": 417,
}
`)
expect(response.status).toEqual(200)
})
it('No Results es7', async () => {
setupTestServer({
config,
addToQueryType: true,
typeName: 'ResultSet',
hitTypeName: 'ResultHit'
})
const scope = nock('http://localhost:9200')
.post('/movies/_search')
.reply((uri, body) => [200, NoHitsES7Mock])
const response = await runQuery()
expect(response.body.data.results.hits.page).toMatchInlineSnapshot(`
Object {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 0,
"totalPages": 0,
}
`)
expect(response.body.data.results.hits.items).toHaveLength(0)
expect(response.body.data.results.summary.total).toEqual(0)
expect(response.status).toEqual(200)
})
it('No Results es6', async () => {
setupTestServer({
config,
addToQueryType: true,
typeName: 'ResultSet',
hitTypeName: 'ResultHit'
})
const scope = nock('http://localhost:9200')
.post('/movies/_search')
.reply((uri, body) => [200, NoHitsMock])
const response = await runQuery()
expect(response.body.data.results.hits.page).toMatchInlineSnapshot(`
Object {
"from": 0,
"pageNumber": 0,
"size": 10,
"total": 0,
"totalPages": 0,
}
`)
expect(response.body.data.results.summary.total).toEqual(0)
expect(response.body.data.results.hits.items).toHaveLength(0)
expect(response.status).toEqual(200)
})
})
})