diff --git a/src/plugins/kibana/server/lib/__tests__/process_es_ingest_simulate_response.js b/src/plugins/kibana/server/lib/__tests__/process_es_ingest_simulate_response.js index 31232c998f7a..0a54b11e34a8 100644 --- a/src/plugins/kibana/server/lib/__tests__/process_es_ingest_simulate_response.js +++ b/src/plugins/kibana/server/lib/__tests__/process_es_ingest_simulate_response.js @@ -5,25 +5,21 @@ import processESIngestSimulateResponse from '../process_es_ingest_simulate_respo describe('processESIngestSimulateResponse', function () { it('returns a result for each processor in the pipeline', function () { - const pipeline = { - processors: [ { processorId: 'processor1' }, { processorId: 'processor2' } ] - }; + const processors = [ { processorId: 'processor1' }, { processorId: 'processor2' } ]; const response = { docs: [ { processor_results: [] } ] }; - const results = processESIngestSimulateResponse(pipeline, response); + const results = processESIngestSimulateResponse(processors, response); expect(results.length).to.be(2); }); it('each processor that does not receive a result will contain default info', function () { - const pipeline = { - processors: [ - { processorId: 'processor1', outputObject: 'foo' }, - { processorId: 'processor2', outputObject: 'bar' }, - { processorId: 'processor3', outputObject: 'baz' } - ] - }; + const processors = [ + { processorId: 'processor1', outputObject: 'foo' }, + { processorId: 'processor2', outputObject: 'bar' }, + { processorId: 'processor3', outputObject: 'baz' } + ]; const response = { docs: [ { processor_results: [] } ] }; @@ -33,19 +29,17 @@ describe('processESIngestSimulateResponse', function () { { processorId: 'processor2', output: 'bar', error: undefined }, { processorId: 'processor3', output: 'baz', error: undefined } ]; - const actual = processESIngestSimulateResponse(pipeline, response); + const actual = processESIngestSimulateResponse(processors, response); expect(actual).to.eql(expected); }); it('each processor that receives a result will contain response info', function () { - const pipeline = { - processors: [ - { processorId: 'processor1', outputObject: 'foo' }, - { processorId: 'processor2', outputObject: 'bar' }, - { processorId: 'processor3', outputObject: 'baz' } - ] - }; + const processors = [ + { processorId: 'processor1', outputObject: 'foo' }, + { processorId: 'processor2', outputObject: 'bar' }, + { processorId: 'processor3', outputObject: 'baz' } + ]; const response = { docs: [ { processor_results: [ { tag: 'processor2', doc: { _source: 'new_bar' }, error: undefined }, @@ -58,7 +52,7 @@ describe('processESIngestSimulateResponse', function () { { processorId: 'processor2', output: 'new_bar', error: undefined }, { processorId: 'processor3', output: 'new_baz', error: undefined } ]; - const actual = processESIngestSimulateResponse(pipeline, response); + const actual = processESIngestSimulateResponse(processors, response); expect(actual).to.eql(expected); }); @@ -66,13 +60,11 @@ describe('processESIngestSimulateResponse', function () { describe('processors that return an error object', function () { it('will be the root_cause reason if one exists', function () { - const pipeline = { - processors: [ - { processorId: 'processor1', outputObject: 'foo' }, - { processorId: 'processor2', outputObject: 'bar' }, - { processorId: 'processor3', outputObject: 'baz' } - ] - }; + const processors = [ + { processorId: 'processor1', outputObject: 'foo' }, + { processorId: 'processor2', outputObject: 'bar' }, + { processorId: 'processor3', outputObject: 'baz' } + ]; const response = { docs: [ { processor_results: [ { tag: 'processor2', doc: { _source: 'new_bar' }, error: undefined }, @@ -89,19 +81,17 @@ describe('processESIngestSimulateResponse', function () { { processorId: 'processor2', output: 'new_bar', error: undefined }, { processorId: 'processor3', output: undefined, error: { isNested: false, message: 'something bad happened'} } ]; - const actual = processESIngestSimulateResponse(pipeline, response); + const actual = processESIngestSimulateResponse(processors, response); expect(actual).to.eql(expected); }); it('will be the root_cause type if reason does not exists', function () { - const pipeline = { - processors: [ - { processorId: 'processor1', outputObject: 'foo' }, - { processorId: 'processor2', outputObject: 'bar' }, - { processorId: 'processor3', outputObject: 'baz' } - ] - }; + const processors = [ + { processorId: 'processor1', outputObject: 'foo' }, + { processorId: 'processor2', outputObject: 'bar' }, + { processorId: 'processor3', outputObject: 'baz' } + ]; const response = { docs: [ { processor_results: [ { tag: 'processor2', doc: { _source: 'new_bar' }, error: undefined }, @@ -118,20 +108,18 @@ describe('processESIngestSimulateResponse', function () { { processorId: 'processor2', output: 'new_bar', error: undefined }, { processorId: 'processor3', output: undefined, error: { isNested: false, message: 'something bad happened'} } ]; - const actual = processESIngestSimulateResponse(pipeline, response); + const actual = processESIngestSimulateResponse(processors, response); expect(actual).to.eql(expected); }); it('any processor after errored processor will be set to a nested error state', function () { - const pipeline = { - processors: [ - { processorId: 'processor0', outputObject: 'oof' }, - { processorId: 'processor1', outputObject: 'foo' }, - { processorId: 'processor2', outputObject: 'bar' }, - { processorId: 'processor3', outputObject: 'baz' } - ] - }; + const processors = [ + { processorId: 'processor0', outputObject: 'oof' }, + { processorId: 'processor1', outputObject: 'foo' }, + { processorId: 'processor2', outputObject: 'bar' }, + { processorId: 'processor3', outputObject: 'baz' } + ]; const response = { docs: [ { @@ -153,7 +141,7 @@ describe('processESIngestSimulateResponse', function () { { processorId: 'processor2', output: undefined, error: { isNested: true, message: 'Invalid Parent Processor' } }, { processorId: 'processor3', output: undefined, error: { isNested: true, message: 'Invalid Parent Processor' } } ]; - const actual = processESIngestSimulateResponse(pipeline, response); + const actual = processESIngestSimulateResponse(processors, response); expect(actual).to.eql(expected); }); diff --git a/src/plugins/kibana/server/lib/process_es_ingest_simulate_response.js b/src/plugins/kibana/server/lib/process_es_ingest_simulate_response.js index 41cf9eaa2c9f..03e832f4c349 100644 --- a/src/plugins/kibana/server/lib/process_es_ingest_simulate_response.js +++ b/src/plugins/kibana/server/lib/process_es_ingest_simulate_response.js @@ -6,11 +6,11 @@ function translateError(esError) { return _.get(rootCause, 'reason') || _.get(rootCause, 'type'); } -export default function processESIngestSimulateResponse(simulateApiDocument, resp) { - const results = simulateApiDocument.processors.map((processor) => { +export default function processESIngestSimulateResponse(processors, resp) { + const results = processors.map((processor) => { return { - processorId: processor.processor_id, - output: processor.output_object, + processorId: processor.processorId, + output: processor.outputObject, error: undefined }; }); diff --git a/src/plugins/kibana/server/routes/api/ingest/register_simulate.js b/src/plugins/kibana/server/routes/api/ingest/register_simulate.js index 539a8b734a97..735361f3a1c1 100644 --- a/src/plugins/kibana/server/routes/api/ingest/register_simulate.js +++ b/src/plugins/kibana/server/routes/api/ingest/register_simulate.js @@ -2,6 +2,7 @@ import _ from 'lodash'; import processESIngestSimulateResponse from '../../../lib/process_es_ingest_simulate_response'; import simulateRequestSchema from '../../../lib/schemas/simulate_request_schema'; import ingestSimulateApiKibanaToEsConverter from '../../../lib/converters/ingest_simulate_api_kibana_to_es_converter'; +import { keysToCamelCaseShallow, keysToSnakeCaseShallow } from '../../../lib/case_conversion'; module.exports = function registerSimulate(server) { server.route({ @@ -23,7 +24,8 @@ module.exports = function registerSimulate(server) { method: 'POST', body: body }) - .then(_.partial(processESIngestSimulateResponse, simulateApiDocument)) + .then(_.partial(processESIngestSimulateResponse, _.map(simulateApiDocument.processors, keysToCamelCaseShallow))) + .then((processors) => _.map(processors, keysToSnakeCaseShallow)) .then(reply); } }); diff --git a/test/unit/api/ingest/processors/_set.js b/test/unit/api/ingest/processors/_set.js index 743bba9acc66..ec3f0804639a 100644 --- a/test/unit/api/ingest/processors/_set.js +++ b/test/unit/api/ingest/processors/_set.js @@ -5,16 +5,16 @@ define(function (require) { const testPipeline = { processors: [{ - processorId: 'processor1', - typeId: 'set', - targetField: 'foo', + processor_id: 'processor1', + type_id: 'set', + target_field: 'foo', value: 'bar' }], input: {} }; return function (bdd, scenarioManager, request) { - bdd.describe('simulate', function simulatePipeline() { + bdd.describe('simulate - set processor', function simulatePipeline() { bdd.it('should return 400 for an invalid payload', function invalidPayload() { return Promise.all([ @@ -23,8 +23,8 @@ define(function (require) { .send({ input: {}, processors: [{ - processorId: 'processor1', - typeId: 'set', + processor_id: 'processor1', + type_id: 'set', value: 'bar' }] }) @@ -32,6 +32,26 @@ define(function (require) { ]); }); + bdd.it('should return 200 for a valid simulate request', function validSetSimulate() { + return request.post('/kibana/ingest/simulate') + .send(testPipeline) + .expect(200); + }); + + bdd.it('should enforce snake case', function setSimulateSnakeCase() { + return request.post('/kibana/ingest/simulate') + .send({ + processors: [{ + processorId: 'processor1', + typeId: 'set', + targetField: 'foo', + value: 'bar' + }], + input: {} + }) + .expect(400); + }); + }); }; });