[App Search] Add routes for Role Mappings (#94221)

* [App Search] Add routes for Role Mappings

* Add registering of routes

Forgot to port this when cherry picking from another branch.

* Add validation
This commit is contained in:
Scotty Bollinger 2021-03-10 12:55:58 -06:00 committed by GitHub
parent 4044633e4a
commit 672bd95a48
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 350 additions and 0 deletions

View file

@ -12,6 +12,7 @@ import { registerCredentialsRoutes } from './credentials';
import { registerCurationsRoutes } from './curations';
import { registerDocumentsRoutes, registerDocumentRoutes } from './documents';
import { registerEnginesRoutes } from './engines';
import { registerRoleMappingsRoutes } from './role_mappings';
import { registerSearchSettingsRoutes } from './search_settings';
import { registerSettingsRoutes } from './settings';
@ -24,4 +25,5 @@ export const registerAppSearchRoutes = (dependencies: RouteDependencies) => {
registerDocumentRoutes(dependencies);
registerCurationsRoutes(dependencies);
registerSearchSettingsRoutes(dependencies);
registerRoleMappingsRoutes(dependencies);
};

View file

@ -0,0 +1,215 @@
/*
* 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 { MockRouter, mockRequestHandler, mockDependencies } from '../../__mocks__';
import {
registerRoleMappingsRoute,
registerRoleMappingRoute,
registerNewRoleMappingRoute,
registerResetRoleMappingRoute,
} from './role_mappings';
const roleMappingBaseSchema = {
rules: { username: 'user' },
roleType: 'owner',
engines: ['e1', 'e2'],
accessAllEngines: false,
authProvider: ['*'],
};
describe('role mappings routes', () => {
describe('GET /api/app_search/role_mappings', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'get',
path: '/api/app_search/role_mappings',
});
registerRoleMappingsRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings',
});
});
});
describe('POST /api/app_search/role_mappings', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'post',
path: '/api/app_search/role_mappings',
});
registerRoleMappingsRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings',
});
});
describe('validates', () => {
it('correctly', () => {
const request = { body: roleMappingBaseSchema };
mockRouter.shouldValidate(request);
});
it('missing required fields', () => {
const request = { body: {} };
mockRouter.shouldThrow(request);
});
});
});
describe('GET /api/app_search/role_mappings/{id}', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'get',
path: '/api/app_search/role_mappings/{id}',
});
registerRoleMappingRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings/:id',
});
});
});
describe('PUT /api/app_search/role_mappings/{id}', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'put',
path: '/api/app_search/role_mappings/{id}',
});
registerRoleMappingRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings/:id',
});
});
describe('validates', () => {
it('correctly', () => {
const request = {
body: {
...roleMappingBaseSchema,
id: '123',
},
};
mockRouter.shouldValidate(request);
});
it('missing required fields', () => {
const request = { body: {} };
mockRouter.shouldThrow(request);
});
});
});
describe('DELETE /api/app_search/role_mappings/{id}', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'delete',
path: '/api/app_search/role_mappings/{id}',
});
registerRoleMappingRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings/:id',
});
});
});
describe('GET /api/app_search/role_mappings/new', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'get',
path: '/api/app_search/role_mappings/new',
});
registerNewRoleMappingRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings/new',
});
});
});
describe('GET /api/app_search/role_mappings/reset', () => {
let mockRouter: MockRouter;
beforeEach(() => {
jest.clearAllMocks();
mockRouter = new MockRouter({
method: 'post',
path: '/api/app_search/role_mappings/reset',
});
registerResetRoleMappingRoute({
...mockDependencies,
router: mockRouter.router,
});
});
it('creates a request handler', () => {
expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({
path: '/role_mappings/reset',
});
});
});
});

View file

@ -0,0 +1,133 @@
/*
* 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';
const roleMappingBaseSchema = {
rules: schema.recordOf(schema.string(), schema.string()),
roleType: schema.string(),
engines: schema.arrayOf(schema.string()),
accessAllEngines: schema.boolean(),
authProvider: schema.arrayOf(schema.string()),
};
export function registerRoleMappingsRoute({
router,
enterpriseSearchRequestHandler,
}: RouteDependencies) {
router.get(
{
path: '/api/app_search/role_mappings',
validate: false,
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings',
})
);
router.post(
{
path: '/api/app_search/role_mappings',
validate: {
body: schema.object(roleMappingBaseSchema),
},
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings',
})
);
}
export function registerRoleMappingRoute({
router,
enterpriseSearchRequestHandler,
}: RouteDependencies) {
router.get(
{
path: '/api/app_search/role_mappings/{id}',
validate: {
params: schema.object({
id: schema.string(),
}),
},
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings/:id',
})
);
router.put(
{
path: '/api/app_search/role_mappings/{id}',
validate: {
body: schema.object({
...roleMappingBaseSchema,
id: schema.string(),
}),
params: schema.object({
id: schema.string(),
}),
},
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings/:id',
})
);
router.delete(
{
path: '/api/app_search/role_mappings/{id}',
validate: {
params: schema.object({
id: schema.string(),
}),
},
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings/:id',
})
);
}
export function registerNewRoleMappingRoute({
router,
enterpriseSearchRequestHandler,
}: RouteDependencies) {
router.get(
{
path: '/api/app_search/role_mappings/new',
validate: false,
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings/new',
})
);
}
export function registerResetRoleMappingRoute({
router,
enterpriseSearchRequestHandler,
}: RouteDependencies) {
router.post(
{
path: '/api/app_search/role_mappings/reset',
validate: false,
},
enterpriseSearchRequestHandler.createRequest({
path: '/role_mappings/reset',
})
);
}
export const registerRoleMappingsRoutes = (dependencies: RouteDependencies) => {
registerRoleMappingsRoute(dependencies);
registerRoleMappingRoute(dependencies);
registerNewRoleMappingRoute(dependencies);
registerResetRoleMappingRoute(dependencies);
};