From cdaab8d9026a9dfff8c2619427d7d0139ee74635 Mon Sep 17 00:00:00 2001 From: spalger Date: Sat, 1 Oct 2016 00:48:21 +0200 Subject: [PATCH] [esErrors/isTermSizeZeroError] always return true/false When the error coming from the elasticsearch.js client is not as expected, isTermSizeZeroError throws a TypeError. This seems incorrect, the function should just return true or false in just about any scenario. --- .../__tests__/is_term_size_zero_error.js | 4 ++++ .../elasticsearch_errors/elasticsearch_error.js | 11 +++++++++++ .../elasticsearch_errors/is_term_size_zero_error.js | 5 ++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/ui/public/elasticsearch_errors/__tests__/is_term_size_zero_error.js b/src/ui/public/elasticsearch_errors/__tests__/is_term_size_zero_error.js index 614e70799be56..ff9235f3aa801 100644 --- a/src/ui/public/elasticsearch_errors/__tests__/is_term_size_zero_error.js +++ b/src/ui/public/elasticsearch_errors/__tests__/is_term_size_zero_error.js @@ -30,4 +30,8 @@ describe('isTermSizeZeroError', () => { }; expect(isTermSizeZeroError(error)).to.be(false); }); + + it ('returns false for non-elasticsearch error input', () => { + expect(isTermSizeZeroError({ foo: 'bar' })).to.be(false); + }); }); diff --git a/src/ui/public/elasticsearch_errors/elasticsearch_error.js b/src/ui/public/elasticsearch_errors/elasticsearch_error.js index a375a88f2c9af..d860104912623 100644 --- a/src/ui/public/elasticsearch_errors/elasticsearch_error.js +++ b/src/ui/public/elasticsearch_errors/elasticsearch_error.js @@ -15,6 +15,17 @@ export default class ElasticsearchError { } } + static hasRootCause(error, cause) { + try { + const esError = new ElasticsearchError(error); + return esError.hasRootCause(cause); + } catch (err) { + // we assume that any failure represents a validation error + // in the ElasticsearchError constructor + return false; + } + } + getRootCauses() { const rootCauses = _.get(this.error, 'resp.error.root_cause'); return _.pluck(rootCauses, 'reason'); diff --git a/src/ui/public/elasticsearch_errors/is_term_size_zero_error.js b/src/ui/public/elasticsearch_errors/is_term_size_zero_error.js index ddce7d46751d5..ea2049a68fbb1 100644 --- a/src/ui/public/elasticsearch_errors/is_term_size_zero_error.js +++ b/src/ui/public/elasticsearch_errors/is_term_size_zero_error.js @@ -1,6 +1,5 @@ -import ElasticsearchError from './elasticsearch_error'; +import { hasRootCause } from './elasticsearch_error'; export default function isTermSizeZeroError(error) { - const esError = new ElasticsearchError(error); - return esError.hasRootCause('size must be positive, got 0'); + return hasRootCause(error, 'size must be positive, got 0'); }