From affd7eedca2ecbfbfd0b3a072077e499ab6b1830 Mon Sep 17 00:00:00 2001 From: Maja Grubic Date: Mon, 6 Apr 2020 15:09:15 +0100 Subject: [PATCH] Allow markdown in error embeddable (#62427) (#62584) * Allow markdown in error embeddable * Replace markdown factory with markdown component Co-authored-by: Elastic Machine Co-authored-by: Elastic Machine --- .../lib/embeddables/error_embeddable.test.tsx | 61 +++++++++++++++++++ .../lib/embeddables/error_embeddable.tsx | 7 ++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx diff --git a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx new file mode 100644 index 00000000000000..816001ba42ff1d --- /dev/null +++ b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx @@ -0,0 +1,61 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import React from 'react'; +import { ErrorEmbeddable } from './error_embeddable'; +import { EmbeddableRoot } from './embeddable_root'; +import { mount } from 'enzyme'; +// @ts-ignore +import { findTestSubject } from '@elastic/eui/lib/test'; + +test('ErrorEmbeddable renders an embeddable', async () => { + const embeddable = new ErrorEmbeddable('some error occurred', { id: '123', title: 'Error' }); + const component = mount(); + expect( + component.getDOMNode().querySelectorAll('[data-test-subj="embeddableStackError"]').length + ).toBe(1); + expect( + component.getDOMNode().querySelectorAll('[data-test-subj="errorMessageMarkdown"]').length + ).toBe(1); + expect( + component + .getDOMNode() + .querySelectorAll('[data-test-subj="errorMessageMarkdown"]')[0] + .innerHTML.includes('some error occurred') + ).toBe(true); +}); + +test('ErrorEmbeddable renders an embeddable with markdown message', async () => { + const error = '[some link](http://localhost:5601/takeMeThere)'; + const embeddable = new ErrorEmbeddable(error, { id: '123', title: 'Error' }); + const component = mount(); + expect( + component.getDOMNode().querySelectorAll('[data-test-subj="embeddableStackError"]').length + ).toBe(1); + expect( + component.getDOMNode().querySelectorAll('[data-test-subj="errorMessageMarkdown"]').length + ).toBe(1); + expect( + component + .getDOMNode() + .querySelectorAll('[data-test-subj="errorMessageMarkdown"]')[0] + .innerHTML.includes( + 'some link' + ) + ).toBe(true); +}); diff --git a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx index 2c2c47775369d7..cdbe7af98a4f40 100644 --- a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx +++ b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx @@ -20,6 +20,7 @@ import { EuiText, EuiIcon, EuiSpacer } from '@elastic/eui'; import React from 'react'; import ReactDOM from 'react-dom'; +import { Markdown } from '../../../../kibana_react/public'; import { Embeddable } from './embeddable'; import { EmbeddableInput, EmbeddableOutput, IEmbeddable } from './i_embeddable'; import { IContainer } from '../containers'; @@ -53,7 +54,11 @@ export class ErrorEmbeddable extends Embeddable - {title} + , dom