Skip to content

Commit

Permalink
[EnterpriseSearch] engines list proxy endpoint (#148352)
Browse files Browse the repository at this point in the history
## Summary

Added a proxy endpoint to list engines from enterprise search.
  • Loading branch information
TattdCodeMonkey authored Jan 4, 2023
1 parent 8c7a426 commit b991c59
Show file tree
Hide file tree
Showing 4 changed files with 263 additions and 0 deletions.
20 changes: 20 additions & 0 deletions x-pack/plugins/enterprise_search/common/types/engines.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

export interface EnterpriseSearchEnginesResponse {
meta: {
from: number;
size: number;
total: number;
};
results: EnterpriseSearchEngine[];
}

export interface EnterpriseSearchEngine {
name: string;
indices: string[];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { mockDependencies, mockRequestHandler, MockRouter } from '../../__mocks__';

import { registerEnginesRoutes } from './engines';

describe('engines routes', () => {
describe('GET /internal/enterprise_search/engines', () => {
let mockRouter: MockRouter;

beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'get',
path: '/internal/enterprise_search/engines',
});

registerEnginesRoutes({
...mockDependencies,
router: mockRouter.router,
});
});

it('creates a request to enterprise search', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/api/engines',
});
});

it('validates query parameters', () => {
const request = { query: { from: 20, size: 20 } };

mockRouter.shouldValidate(request);
});

it('fails validation with invalid from parameter', () => {
const request = { query: { from: -10 } };

mockRouter.shouldThrow(request);
});

it('fails validation with invalid size parameter', () => {
const request = { query: { size: 0 } };

mockRouter.shouldThrow(request);
});
});

describe('GET /internal/enterprise_search/engines/{engine_name}', () => {
let mockRouter: MockRouter;

beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'get',
path: '/internal/enterprise_search/engines/{engine_name}',
});

registerEnginesRoutes({
...mockDependencies,
router: mockRouter.router,
});
});

it('creates a request to enterprise search', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/api/engines/:engine_name',
});
});

it('validates correctly with engine_name', () => {
const request = { params: { engine_name: 'some-engine' } };

mockRouter.shouldValidate(request);
});

it('fails validation without name', () => {
const request = { params: {} };

mockRouter.shouldThrow(request);
});
});

describe('PUT /internal/enterprise_search/engines/{engine_name}', () => {
let mockRouter: MockRouter;

beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'put',
path: '/internal/enterprise_search/engines/{engine_name}',
});

registerEnginesRoutes({
...mockDependencies,
router: mockRouter.router,
});
});

it('creates a request to enterprise search', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/api/engines/:engine_name',
});
});

it('validates correctly with engine_name', () => {
const request = {
params: { engine_name: 'some-engine' },
body: {
indices: ['search-unit-test'],
},
};

mockRouter.shouldValidate(request);
});

it('fails validation without name', () => {
const request = { params: {} };

mockRouter.shouldThrow(request);
});

it('fails validation without indices', () => {
const request = {
params: { engine_name: 'some-engine' },
body: {
name: 'some-engine',
},
};

mockRouter.shouldThrow(request);
});
});

describe('DELETE /internal/enterprise_search/engines/{engine_name}', () => {
let mockRouter: MockRouter;

beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'delete',
path: '/internal/enterprise_search/engines/{engine_name}',
});

registerEnginesRoutes({
...mockDependencies,
router: mockRouter.router,
});
});

it('creates a request to enterprise search', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/api/engines/:engine_name',
});
});

it('validates correctly with engine_name', () => {
const request = { params: { engine_name: 'some-engine' } };

mockRouter.shouldValidate(request);
});

it('fails validation without name', () => {
const request = { params: {} };

mockRouter.shouldThrow(request);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { schema } from '@kbn/config-schema';

import { RouteDependencies } from '../../plugin';

export function registerEnginesRoutes({
router,
enterpriseSearchRequestHandler,
}: RouteDependencies) {
router.get(
{
path: '/internal/enterprise_search/engines',
validate: {
query: schema.object({
from: schema.number({ defaultValue: 0, min: 0 }),
size: schema.number({ defaultValue: 10, min: 1 }),
}),
},
},
enterpriseSearchRequestHandler.createRequest({ path: '/api/engines' })
);

router.get(
{
path: '/internal/enterprise_search/engines/{engine_name}',
validate: {
params: schema.object({
engine_name: schema.string(),
}),
},
},
enterpriseSearchRequestHandler.createRequest({ path: '/api/engines/:engine_name' })
);

router.put(
{
path: '/internal/enterprise_search/engines/{engine_name}',
validate: {
params: schema.object({
engine_name: schema.string(),
}),
body: schema.object({
name: schema.maybe(schema.string()),
indices: schema.arrayOf(schema.string()),
}),
},
},
enterpriseSearchRequestHandler.createRequest({ path: '/api/engines/:engine_name' })
);

router.delete(
{
path: '/internal/enterprise_search/engines/{engine_name}',
validate: {
params: schema.object({
engine_name: schema.string(),
}),
},
},
enterpriseSearchRequestHandler.createRequest({ path: '/api/engines/:engine_name' })
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import { RouteDependencies } from '../../plugin';

import { registerDocumentRoute } from './documents';
import { registerEnginesRoutes } from './engines';
import { registerIndexRoutes } from './indices';
import { registerMappingRoute } from './mapping';
import { registerSearchRoute } from './search';
Expand All @@ -17,4 +18,5 @@ export const registerEnterpriseSearchRoutes = (dependencies: RouteDependencies)
registerMappingRoute(dependencies);
registerSearchRoute(dependencies);
registerDocumentRoute(dependencies);
registerEnginesRoutes(dependencies);
};

0 comments on commit b991c59

Please sign in to comment.