60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import type { BackendTarget } from '@dbmole/core'
|
|
import { describe, expect, it } from 'vitest'
|
|
import type { EsBackend, EsResponse } from '../../src/es/backend.js'
|
|
import { createBackend, ping, resolvePort } from '../../src/esBackend.js'
|
|
import type { ConnectionConfig } from '../../src/schema.js'
|
|
|
|
const config = (extra: Partial<ConnectionConfig> = {}): ConnectionConfig => ({
|
|
name: 'es',
|
|
type: 'elasticsearch',
|
|
host: 'es.example.com',
|
|
scheme: 'https',
|
|
verifyTls: true,
|
|
apiKey: 'secret==',
|
|
readonly: false,
|
|
...extra
|
|
})
|
|
|
|
const target = (cfg: ConnectionConfig): BackendTarget<ConnectionConfig> => ({
|
|
config: cfg,
|
|
connectHost: '127.0.0.1',
|
|
connectPort: cfg.port ?? 9200,
|
|
serverName: cfg.host
|
|
})
|
|
|
|
const fakeBackend = (body: unknown): EsBackend => ({
|
|
request: async (): Promise<EsResponse> => ({ status: 200, body }),
|
|
dispose: async () => {}
|
|
})
|
|
|
|
describe('resolvePort', () => {
|
|
it('honours an explicit port', () => {
|
|
expect(resolvePort(config({ port: 9201 }))).toBe(9201)
|
|
})
|
|
|
|
it('defaults to 9200 when absent', () => {
|
|
expect(resolvePort(config())).toBe(9200)
|
|
})
|
|
})
|
|
|
|
describe('createBackend', () => {
|
|
it('returns a backend with request/dispose and no network on construction', async () => {
|
|
const backend = createBackend(target(config()))
|
|
expect(typeof backend.request).toBe('function')
|
|
expect(typeof backend.dispose).toBe('function')
|
|
await backend.dispose()
|
|
})
|
|
})
|
|
|
|
describe('ping', () => {
|
|
it('reports the ES version when present', async () => {
|
|
const res = await ping({ backend: fakeBackend({ version: { number: '8.15.0' } }) })
|
|
expect(res).toEqual({ status: 200, version: '8.15.0' })
|
|
})
|
|
|
|
it('reports null when the version is absent', async () => {
|
|
const res = await ping({ backend: fakeBackend({}) })
|
|
expect(res).toEqual({ status: 200, version: null })
|
|
})
|
|
})
|