From 3b1d2bd96012adf43298ba7c05e46ed57a9ce515 Mon Sep 17 00:00:00 2001 From: Diana Derevyankina <54894989+DziyanaDzeraviankina@users.noreply.github.com> Date: Tue, 14 Jul 2020 18:11:00 +0300 Subject: [PATCH] Convert vega tests to jest (#71073) * Convert vega tests to jest Part of #57813 * Remove unused config * Move assets to __test__ folder and remove unnecessary code * clenup * cleanup * Revert default.spec.hjson file and mock default_spec * Refactor some code Co-authored-by: Alexey Antonov --- .../__tests__/vis_type_vega/vega_graph.hjson | 76 ---- .../vis_type_vega/vega_image_512.png | Bin 30730 -> 0 bytes .../vis_type_vega/vega_map_image_256.png | Bin 1671 -> 0 bytes .../vis_type_vega/vega_map_test.hjson | 20 - .../vis_type_vega/vega_tooltip_test.hjson | 44 --- .../vis_type_vega/vega_visualization.js | 362 ------------------ .../vis_type_vega/vegalite_graph.hjson | 45 --- .../vis_type_vega/vegalite_image_256.png | Bin 9287 -> 0 bytes .../vis_type_vega/vegalite_image_512.png | Bin 23449 -> 0 bytes .../tag_cloud_visualization.test.js | 2 - .../public/__mocks__/services.ts | 57 --- .../vega_visualization.test.js.snap | 9 + .../vis_type_vega/public/default_spec.ts | 23 ++ .../public/test_utils/default.spec.json | 41 ++ .../public/test_utils/vega_graph.json | 78 ++++ .../public/test_utils/vega_map_test.json | 20 + .../public/test_utils/vegalite_graph.json | 42 ++ src/plugins/vis_type_vega/public/vega_type.ts | 5 +- .../public/vega_visualization.test.js | 232 +++++++++++ 19 files changed, 447 insertions(+), 609 deletions(-) delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_graph.hjson delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_image_512.png delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_image_256.png delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_test.hjson delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_tooltip_test.hjson delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_visualization.js delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_graph.hjson delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_image_256.png delete mode 100644 src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_image_512.png delete mode 100644 src/plugins/vis_type_vega/public/__mocks__/services.ts create mode 100644 src/plugins/vis_type_vega/public/__snapshots__/vega_visualization.test.js.snap create mode 100644 src/plugins/vis_type_vega/public/default_spec.ts create mode 100644 src/plugins/vis_type_vega/public/test_utils/default.spec.json create mode 100644 src/plugins/vis_type_vega/public/test_utils/vega_graph.json create mode 100644 src/plugins/vis_type_vega/public/test_utils/vega_map_test.json create mode 100644 src/plugins/vis_type_vega/public/test_utils/vegalite_graph.json create mode 100644 src/plugins/vis_type_vega/public/vega_visualization.test.js diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_graph.hjson b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_graph.hjson deleted file mode 100644 index db19c937ca9909..00000000000000 --- a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_graph.hjson +++ /dev/null @@ -1,76 +0,0 @@ -{ - // Adapted from Vega's https://vega.github.io/vega/examples/stacked-area-chart/ - - $schema: https://vega.github.io/schema/vega/v5.json - data: [ - { - name: table - values: [ - {x: 0, y: 28, c: 0}, {x: 0, y: 55, c: 1}, {x: 1, y: 43, c: 0}, {x: 1, y: 91, c: 1}, - {x: 2, y: 81, c: 0}, {x: 2, y: 53, c: 1}, {x: 3, y: 19, c: 0}, {x: 3, y: 87, c: 1}, - {x: 4, y: 52, c: 0}, {x: 4, y: 48, c: 1}, {x: 5, y: 24, c: 0}, {x: 5, y: 49, c: 1}, - {x: 6, y: 87, c: 0}, {x: 6, y: 66, c: 1}, {x: 7, y: 17, c: 0}, {x: 7, y: 27, c: 1}, - {x: 8, y: 68, c: 0}, {x: 8, y: 16, c: 1}, {x: 9, y: 49, c: 0}, {x: 9, y: 15, c: 1} - ] - transform: [ - { - type: stack - groupby: ["x"] - sort: {field: "c"} - field: y - } - ] - } - ] - scales: [ - { - name: x - type: point - range: width - domain: {data: "table", field: "x"} - } - { - name: y - type: linear - range: height - nice: true - zero: true - domain: {data: "table", field: "y1"} - } - { - name: color - type: ordinal - range: category - domain: {data: "table", field: "c"} - } - ] - marks: [ - { - type: group - from: { - facet: {name: "series", data: "table", groupby: "c"} - } - marks: [ - { - type: area - from: {data: "series"} - encode: { - enter: { - interpolate: {value: "monotone"} - x: {scale: "x", field: "x"} - y: {scale: "y", field: "y0"} - y2: {scale: "y", field: "y1"} - fill: {scale: "color", field: "c"} - } - update: { - fillOpacity: {value: 1} - } - hover: { - fillOpacity: {value: 0.5} - } - } - } - ] - } - ] -} diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_image_512.png b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_image_512.png deleted file mode 100644 index cc28886794f0359da3097fa2320dcc35b3257ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30730 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
(OVW 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 KQ7-ny|Nj8YQ~@^t diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_image_256.png b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_image_256.png deleted file mode 100644 index ac455ada3900b28af2246884756e0b801977ac06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1671 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJDXKTj9OkczmsR~UI295|Q_ zKj_c$zjsWO{q>2mygV63CeKDwhLiVN)jqKDG`K4Wh#4?E{N$>h!0?BmaYF+m$8>!w zM&<|X94)Lo4m)Zta!N4RJ1FQRFdTZ??RS9T2P0D=BeQ^Bd diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_test.hjson b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_test.hjson deleted file mode 100644 index 633b8658ad8491..00000000000000 --- a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_map_test.hjson +++ /dev/null @@ -1,20 +0,0 @@ -# This graph creates a single rectangle for the whole graph on top of a map -# Note that the actual map tiles are not loaded -{ - $schema: https://vega.github.io/schema/vega/v5.json - config: { - kibana: {type: "map", mapStyle: false} - } - marks: [ - { - type: rect - encode: { - enter: { - fill: {value: "#0f0"} - width: {signal: "width"} - height: {signal: "height"} - } - } - } - ] -} diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_tooltip_test.hjson b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_tooltip_test.hjson deleted file mode 100644 index 77465c8b3f007a..00000000000000 --- a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_tooltip_test.hjson +++ /dev/null @@ -1,44 +0,0 @@ -# This graph creates a single rectangle for the whole graph, -# backed by a datum with two fields - fld1 & fld2 -# On mouse over, with 0 delay, it should show tooltip -{ - config: { - kibana: { - tooltips: { - // always center on the mark, not mouse x,y - centerOnMark: false - position: top - padding: 20 - } - } - } - data: [ - { - name: table - values: [ - { - title: This is a long title - fieldA: value of fld1 - fld2: 42 - } - ] - } - ] - $schema: https://vega.github.io/schema/vega/v5.json - marks: [ - { - from: {data: "table"} - type: rect - encode: { - enter: { - fill: {value: "#060"} - x: {signal: "0"} - y: {signal: "0"} - width: {signal: "width"} - height: {signal: "height"} - tooltip: {signal: "datum || null"} - } - } - } - ] -} diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_visualization.js b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_visualization.js deleted file mode 100644 index 30e7587707d2ea..00000000000000 --- a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vega_visualization.js +++ /dev/null @@ -1,362 +0,0 @@ -/* - * 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 Bluebird from 'bluebird'; -import expect from '@kbn/expect'; -import ngMock from 'ng_mock'; -import $ from 'jquery'; - -import 'leaflet/dist/leaflet.js'; -import 'leaflet-vega'; -// Will be replaced with new path when tests are moved -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { createVegaVisualization } from '../../../../../../plugins/vis_type_vega/public/vega_visualization'; -import { ImageComparator } from 'test_utils/image_comparator'; - -import vegaliteGraph from '!!raw-loader!./vegalite_graph.hjson'; -import vegaliteImage256 from './vegalite_image_256.png'; -import vegaliteImage512 from './vegalite_image_512.png'; - -import vegaGraph from '!!raw-loader!./vega_graph.hjson'; -import vegaImage512 from './vega_image_512.png'; - -import vegaTooltipGraph from '!!raw-loader!./vega_tooltip_test.hjson'; - -import vegaMapGraph from '!!raw-loader!./vega_map_test.hjson'; -import vegaMapImage256 from './vega_map_image_256.png'; -// Will be replaced with new path when tests are moved -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { VegaParser } from '../../../../../../plugins/vis_type_vega/public/data_model/vega_parser'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SearchAPI } from '../../../../../../plugins/vis_type_vega/public/data_model/search_api'; - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { createVegaTypeDefinition } from '../../../../../../plugins/vis_type_vega/public/vega_type'; -// TODO This is an integration test and thus requires a running platform. When moving to the new platform, -// this test has to be migrated to the newly created integration test environment. -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { npStart } from 'ui/new_platform'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { BaseVisType } from '../../../../../../plugins/visualizations/public/vis_types/base_vis_type'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ExprVis } from '../../../../../../plugins/visualizations/public/expressions/vis'; - -import { - setInjectedVars, - setData, - setSavedObjects, - setNotifications, - setKibanaMapFactory, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../plugins/vis_type_vega/public/services'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ServiceSettings } from '../../../../../../plugins/maps_legacy/public/map/service_settings'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { KibanaMap } from '../../../../../../plugins/maps_legacy/public/map/kibana_map'; - -const THRESHOLD = 0.1; -const PIXEL_DIFF = 30; - -describe('VegaVisualizations', () => { - let domNode; - let VegaVisualization; - let vis; - let imageComparator; - let vegaVisualizationDependencies; - let vegaVisType; - - setKibanaMapFactory((...args) => new KibanaMap(...args)); - setInjectedVars({ - emsTileLayerId: {}, - enableExternalUrls: true, - esShardTimeout: 10000, - }); - setData(npStart.plugins.data); - setSavedObjects(npStart.core.savedObjects); - setNotifications(npStart.core.notifications); - - const mockMapConfig = { - includeElasticMapsService: true, - proxyElasticMapsServiceInMaps: false, - tilemap: { - deprecated: { - config: { - options: { - attribution: '', - }, - }, - }, - options: { - attribution: '', - minZoom: 0, - maxZoom: 10, - }, - }, - regionmap: { - includeElasticMapsService: true, - layers: [], - }, - manifestServiceUrl: '', - emsFileApiUrl: 'https://vector.maps.elastic.co', - emsTileApiUrl: 'https://tiles.maps.elastic.co', - emsLandingPageUrl: 'https://maps.elastic.co/v7.7', - emsFontLibraryUrl: 'https://tiles.maps.elastic.co/fonts/{fontstack}/{range}.pbf', - emsTileLayerId: { - bright: 'road_map', - desaturated: 'road_map_desaturated', - dark: 'dark_map', - }, - }; - - beforeEach(ngMock.module('kibana')); - beforeEach( - ngMock.inject(() => { - const serviceSettings = new ServiceSettings(mockMapConfig, mockMapConfig.tilemap); - vegaVisualizationDependencies = { - serviceSettings, - core: { - uiSettings: npStart.core.uiSettings, - }, - plugins: { - data: { - query: { - timefilter: { - timefilter: {}, - }, - }, - }, - }, - }; - - vegaVisType = new BaseVisType(createVegaTypeDefinition(vegaVisualizationDependencies)); - VegaVisualization = createVegaVisualization(vegaVisualizationDependencies); - }) - ); - - describe('VegaVisualization - basics', () => { - beforeEach(async function () { - setupDOM('512px', '512px'); - imageComparator = new ImageComparator(); - - vis = new ExprVis({ - type: vegaVisType, - }); - }); - - afterEach(function () { - teardownDOM(); - imageComparator.destroy(); - }); - - it('should show vegalite graph and update on resize (may fail in dev env)', async function () { - let vegaVis; - try { - vegaVis = new VegaVisualization(domNode, vis); - - const vegaParser = new VegaParser( - vegaliteGraph, - new SearchAPI({ - search: npStart.plugins.data.search, - uiSettings: npStart.core.uiSettings, - injectedMetadata: npStart.core.injectedMetadata, - }) - ); - await vegaParser.parseAsync(); - - await vegaVis.render(vegaParser, vis.params, { data: true }); - const mismatchedPixels1 = await compareImage(vegaliteImage512); - expect(mismatchedPixels1).to.be.lessThan(PIXEL_DIFF); - - domNode.style.width = '256px'; - domNode.style.height = '256px'; - - await vegaVis.render(vegaParser, vis.params, { resize: true }); - const mismatchedPixels2 = await compareImage(vegaliteImage256); - expect(mismatchedPixels2).to.be.lessThan(PIXEL_DIFF); - } finally { - vegaVis.destroy(); - } - }); - - it('should show vega graph (may fail in dev env)', async function () { - let vegaVis; - try { - vegaVis = new VegaVisualization(domNode, vis); - const vegaParser = new VegaParser( - vegaGraph, - new SearchAPI({ - search: npStart.plugins.data.search, - uiSettings: npStart.core.uiSettings, - injectedMetadata: npStart.core.injectedMetadata, - }) - ); - await vegaParser.parseAsync(); - - await vegaVis.render(vegaParser, vis.params, { data: true }); - const mismatchedPixels = await compareImage(vegaImage512); - - expect(mismatchedPixels).to.be.lessThan(PIXEL_DIFF); - } finally { - vegaVis.destroy(); - } - }); - - it('should show vegatooltip on mouseover over a vega graph (may fail in dev env)', async () => { - let vegaVis; - try { - vegaVis = new VegaVisualization(domNode, vis); - const vegaParser = new VegaParser( - vegaTooltipGraph, - new SearchAPI({ - search: npStart.plugins.data.search, - uiSettings: npStart.core.uiSettings, - injectedMetadata: npStart.core.injectedMetadata, - }) - ); - await vegaParser.parseAsync(); - await vegaVis.render(vegaParser, vis.params, { data: true }); - - const $el = $(domNode); - const offset = $el.offset(); - - const event = new MouseEvent('mousemove', { - view: window, - bubbles: true, - cancelable: true, - clientX: offset.left + 10, - clientY: offset.top + 10, - }); - - $el.find('canvas')[0].dispatchEvent(event); - - await Bluebird.delay(10); - - let tooltip = document.getElementById('vega-kibana-tooltip'); - expect(tooltip).to.be.ok(); - expect(tooltip.innerHTML).to.be( - '

This is a long title

' + - '' + - '' + - '' + - '
fieldA:value of fld1
fld2:42
' - ); - - vegaVis.destroy(); - - tooltip = document.getElementById('vega-kibana-tooltip'); - expect(tooltip).to.not.be.ok(); - } finally { - vegaVis.destroy(); - } - }); - - it('should show vega blank rectangle on top of a map (vegamap)', async () => { - let vegaVis; - try { - vegaVis = new VegaVisualization(domNode, vis); - const vegaParser = new VegaParser( - vegaMapGraph, - new SearchAPI({ - search: npStart.plugins.data.search, - uiSettings: npStart.core.uiSettings, - injectedMetadata: npStart.core.injectedMetadata, - }) - ); - await vegaParser.parseAsync(); - - domNode.style.width = '256px'; - domNode.style.height = '256px'; - - await vegaVis.render(vegaParser, vis.params, { data: true }); - const mismatchedPixels = await compareImage(vegaMapImage256); - expect(mismatchedPixels).to.be.lessThan(PIXEL_DIFF); - } finally { - vegaVis.destroy(); - } - }); - - it('should add a small subpixel value to the height of the canvas to avoid getting it set to 0', async () => { - let vegaVis; - try { - vegaVis = new VegaVisualization(domNode, vis); - const vegaParser = new VegaParser( - `{ - "$schema": "https://vega.github.io/schema/vega/v5.json", - "marks": [ - { - "type": "text", - "encode": { - "update": { - "text": { - "value": "Test" - }, - "align": {"value": "center"}, - "baseline": {"value": "middle"}, - "xc": {"signal": "width/2"}, - "yc": {"signal": "height/2"} - fontSize: {value: "14"} - } - } - } - ] - }`, - new SearchAPI({ - search: npStart.plugins.data.search, - uiSettings: npStart.core.uiSettings, - injectedMetadata: npStart.core.injectedMetadata, - }) - ); - await vegaParser.parseAsync(); - - domNode.style.width = '256px'; - domNode.style.height = '256px'; - - await vegaVis.render(vegaParser, vis.params, { data: true }); - const vegaView = vegaVis._vegaView._view; - expect(vegaView.height()).to.be(250.00000001); - } finally { - vegaVis.destroy(); - } - }); - }); - - async function compareImage(expectedImageSource) { - const elementList = domNode.querySelectorAll('canvas'); - expect(elementList.length).to.equal(1); - const firstCanvasOnMap = elementList[0]; - return imageComparator.compareImage(firstCanvasOnMap, expectedImageSource, THRESHOLD); - } - - function setupDOM(width, height) { - domNode = document.createElement('div'); - domNode.style.top = '0'; - domNode.style.left = '0'; - domNode.style.width = width; - domNode.style.height = height; - domNode.style.position = 'fixed'; - domNode.style.border = '1px solid blue'; - domNode.style['pointer-events'] = 'none'; - document.body.appendChild(domNode); - } - - function teardownDOM() { - domNode.innerHTML = ''; - document.body.removeChild(domNode); - } -}); diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_graph.hjson b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_graph.hjson deleted file mode 100644 index 2132b0f77e6bcd..00000000000000 --- a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_graph.hjson +++ /dev/null @@ -1,45 +0,0 @@ -{ - $schema: https://vega.github.io/schema/vega-lite/v4.json - data: { - format: {property: "aggregations.time_buckets.buckets"} - values: { - aggregations: { - time_buckets: { - buckets: [ - {key: 1512950400000, doc_count: 0} - {key: 1513036800000, doc_count: 0} - {key: 1513123200000, doc_count: 0} - {key: 1513209600000, doc_count: 4545} - {key: 1513296000000, doc_count: 4667} - {key: 1513382400000, doc_count: 4660} - {key: 1513468800000, doc_count: 133} - {key: 1513555200000, doc_count: 0} - {key: 1513641600000, doc_count: 0} - {key: 1513728000000, doc_count: 0} - ] - } - } - status: 200 - } - } - mark: line - encoding: { - x: { - field: key - type: temporal - axis: null - } - y: { - field: doc_count - type: quantitative - axis: null - } - } - config: { - range: { - category: {scheme: "elastic"} - } - mark: {color: "#54B399"} - } - autosize: {type: "fit", contains: "padding"} -} diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_image_256.png b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_vega/vegalite_image_256.png deleted file mode 100644 index 8f2d146287b08086081cc8aca548b294010a301b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9287 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 TIUJ)80zZcXN9>q3B { uiState: false, }); - domNode.style.width = '256px'; - domNode.style.height = '368px'; await tagcloudVisualization.render(dummyTableGroup, vis.params, { resize: true, params: false, diff --git a/src/plugins/vis_type_vega/public/__mocks__/services.ts b/src/plugins/vis_type_vega/public/__mocks__/services.ts deleted file mode 100644 index 4775241a66d505..00000000000000 --- a/src/plugins/vis_type_vega/public/__mocks__/services.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 { CoreStart, IUiSettingsClient, NotificationsStart, SavedObjectsStart } from 'kibana/public'; - -import { createGetterSetter } from '../../../kibana_utils/public'; -import { DataPublicPluginStart } from '../../../data/public'; -import { dataPluginMock } from '../../../data/public/mocks'; -import { coreMock } from '../../../../core/public/mocks'; - -export const [getData, setData] = createGetterSetter('Data'); -setData(dataPluginMock.createStartContract()); - -export const [getNotifications, setNotifications] = createGetterSetter( - 'Notifications' -); -setNotifications(coreMock.createStart().notifications); - -export const [getUISettings, setUISettings] = createGetterSetter('UISettings'); -setUISettings(coreMock.createStart().uiSettings); - -export const [getInjectedMetadata, setInjectedMetadata] = createGetterSetter< - CoreStart['injectedMetadata'] ->('InjectedMetadata'); -setInjectedMetadata(coreMock.createStart().injectedMetadata); - -export const [getSavedObjects, setSavedObjects] = createGetterSetter( - 'SavedObjects' -); -setSavedObjects(coreMock.createStart().savedObjects); - -export const [getInjectedVars, setInjectedVars] = createGetterSetter<{ - enableExternalUrls: boolean; - emsTileLayerId: unknown; -}>('InjectedVars'); -setInjectedVars({ - emsTileLayerId: {}, - enableExternalUrls: true, -}); - -export const getEnableExternalUrls = () => getInjectedVars().enableExternalUrls; -export const getEmsTileLayerId = () => getInjectedVars().emsTileLayerId; diff --git a/src/plugins/vis_type_vega/public/__snapshots__/vega_visualization.test.js.snap b/src/plugins/vis_type_vega/public/__snapshots__/vega_visualization.test.js.snap new file mode 100644 index 00000000000000..650d9c1b430f0c --- /dev/null +++ b/src/plugins/vis_type_vega/public/__snapshots__/vega_visualization.test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`VegaVisualizations VegaVisualization - basics should show vega blank rectangle on top of a map (vegamap) 1`] = `"
"`; + +exports[`VegaVisualizations VegaVisualization - basics should show vega graph (may fail in dev env) 1`] = `"
"`; + +exports[`VegaVisualizations VegaVisualization - basics should show vegalite graph and update on resize (may fail in dev env) 1`] = `"
"`; + +exports[`VegaVisualizations VegaVisualization - basics should show vegalite graph and update on resize (may fail in dev env) 2`] = `"
"`; diff --git a/src/plugins/vis_type_vega/public/default_spec.ts b/src/plugins/vis_type_vega/public/default_spec.ts new file mode 100644 index 00000000000000..71f44b694a10eb --- /dev/null +++ b/src/plugins/vis_type_vega/public/default_spec.ts @@ -0,0 +1,23 @@ +/* + * 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. + */ + +// @ts-ignore +import defaultSpec from '!!raw-loader!./default.spec.hjson'; + +export const getDefaultSpec = () => defaultSpec; diff --git a/src/plugins/vis_type_vega/public/test_utils/default.spec.json b/src/plugins/vis_type_vega/public/test_utils/default.spec.json new file mode 100644 index 00000000000000..8cf763647115f2 --- /dev/null +++ b/src/plugins/vis_type_vega/public/test_utils/default.spec.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v4.json", + "title": "Event counts from all indexes", + "data": { + "url": { + "%context%": true, + "%timefield%": "@timestamp", + "index": "_all", + "body": { + "aggs": { + "time_buckets": { + "date_histogram": { + "field": "@timestamp", + "interval": { "%autointerval%": true }, + "extended_bounds": { + "min": { "%timefilter%": "min" }, + "max": { "%timefilter%": "max" } + }, + "min_doc_count": 0 + } + } + }, + "size": 0 + } + }, + "format": { "property": "aggregations.time_buckets.buckets" } + }, + "mark": "line", + "encoding": { + "x": { + "field": "key", + "type": "temporal", + "axis": { "title": false } + }, + "y": { + "field": "doc_count", + "type": "quantitative", + "axis": { "title": "Document count" } + } + } +} diff --git a/src/plugins/vis_type_vega/public/test_utils/vega_graph.json b/src/plugins/vis_type_vega/public/test_utils/vega_graph.json new file mode 100644 index 00000000000000..babde96fd3daee --- /dev/null +++ b/src/plugins/vis_type_vega/public/test_utils/vega_graph.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "data": [ + { + "name": "table", + "values": [ + {"x": 0, "y": 28, "c": 0}, {"x": 0, "y": 55, "c": 1}, {"x": 1, "y": 43, "c": 0}, {"x": 1, "y": 91, "c": 1}, + {"x": 2, "y": 81, "c": 0}, {"x": 2, "y": 53, "c": 1}, {"x": 3, "y": 19, "c": 0}, {"x": 3, "y": 87, "c": 1}, + {"x": 4, "y": 52, "c": 0}, {"x": 4, "y": 48, "c": 1}, {"x": 5, "y": 24, "c": 0}, {"x": 5, "y": 49, "c": 1}, + {"x": 6, "y": 87, "c": 0}, {"x": 6, "y": 66, "c": 1}, {"x": 7, "y": 17, "c": 0}, {"x": 7, "y": 27, "c": 1}, + {"x": 8, "y": 68, "c": 0}, {"x": 8, "y": 16, "c": 1}, {"x": 9, "y": 49, "c": 0}, {"x": 9, "y": 15, "c": 1} + ], + "transform": [ + { + "type": "stack", + "groupby": ["x"], + "sort": {"field": "c"}, + "field": "y" + } + ] + } + ], + "scales": [ + { + "name": "x", + "type": "point", + "range": "width", + "domain": {"data": "table", "field": "x"} + }, + { + "name": "y", + "type": "linear", + "range": "height", + "nice": true, + "zero": true, + "domain": {"data": "table", "field": "y1"} + }, + { + "name": "color", + "type": "ordinal", + "range": "category", + "domain": {"data": "table", "field": "c"} + } + ], + "marks": [ + { + "type": "group", + "from": { + "facet": {"name": "series", "data": "table", "groupby": "c"} + }, + "marks": [ + { + "type": "area", + "from": {"data": "series"}, + "encode": { + "enter": { + "interpolate": {"value": "monotone"}, + "x": {"scale": "x", "field": "x"}, + "y": {"scale": "y", "field": "y0"}, + "y2": {"scale": "y", "field": "y1"}, + "fill": {"scale": "color", "field": "c"} + }, + "update": { + "fillOpacity": {"value": 1} + }, + "hover": { + "fillOpacity": {"value": 0.5} + } + } + } + ] + } + ], + "autosize": { "type": "none" }, + "width": 512, + "height": 512, + "config": { "kibana": { "renderer": "svg" }} +} diff --git a/src/plugins/vis_type_vega/public/test_utils/vega_map_test.json b/src/plugins/vis_type_vega/public/test_utils/vega_map_test.json new file mode 100644 index 00000000000000..9100de38ae3878 --- /dev/null +++ b/src/plugins/vis_type_vega/public/test_utils/vega_map_test.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "config": { + "kibana": { "renderer": "svg", "type": "map", "mapStyle": false} + }, + "width": 512, + "height": 512, + "marks": [ + { + "type": "rect", + "encode": { + "enter": { + "fill": {"value": "#0f0"}, + "width": {"signal": "width"}, + "height": {"signal": "height"} + } + } + } + ] +} diff --git a/src/plugins/vis_type_vega/public/test_utils/vegalite_graph.json b/src/plugins/vis_type_vega/public/test_utils/vegalite_graph.json new file mode 100644 index 00000000000000..5394f009b074fd --- /dev/null +++ b/src/plugins/vis_type_vega/public/test_utils/vegalite_graph.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v4.json", + "data": { + "format": {"property": "aggregations.time_buckets.buckets"}, + "values": { + "aggregations": { + "time_buckets": { + "buckets": [ + {"key": 1512950400000, "doc_count": 0}, + {"key": 1513036800000, "doc_count": 0}, + {"key": 1513123200000, "doc_count": 0}, + {"key": 1513209600000, "doc_count": 4545}, + {"key": 1513296000000, "doc_count": 4667}, + {"key": 1513382400000, "doc_count": 4660}, + {"key": 1513468800000, "doc_count": 133}, + {"key": 1513555200000, "doc_count": 0}, + {"key": 1513641600000, "doc_count": 0}, + {"key": 1513728000000, "doc_count": 0} + ] + } + }, + "status": 200 + } + }, + "mark": "line", + "encoding": { + "x": { + "field": "key", + "type": "temporal", + "axis": null + }, + "y": { + "field": "doc_count", + "type": "quantitative", + "axis": null + } + }, + "autosize": { "type": "fit" }, + "width": 512, + "height": 512, + "config": { "kibana": { "renderer": "svg" }} +} diff --git a/src/plugins/vis_type_vega/public/vega_type.ts b/src/plugins/vis_type_vega/public/vega_type.ts index 55ad134c053015..5825661f9001c8 100644 --- a/src/plugins/vis_type_vega/public/vega_type.ts +++ b/src/plugins/vis_type_vega/public/vega_type.ts @@ -25,8 +25,7 @@ import { VegaVisEditor } from './components'; import { createVegaRequestHandler } from './vega_request_handler'; // @ts-ignore import { createVegaVisualization } from './vega_visualization'; -// @ts-ignore -import defaultSpec from '!!raw-loader!./default.spec.hjson'; +import { getDefaultSpec } from './default_spec'; export const createVegaTypeDefinition = (dependencies: VegaVisualizationDependencies) => { const requestHandler = createVegaRequestHandler(dependencies); @@ -40,7 +39,7 @@ export const createVegaTypeDefinition = (dependencies: VegaVisualizationDependen description: 'Vega and Vega-Lite are product names and should not be translated', }), icon: 'visVega', - visConfig: { defaults: { spec: defaultSpec } }, + visConfig: { defaults: { spec: getDefaultSpec() } }, editorConfig: { optionsTemplate: VegaVisEditor, enableAutoApply: true, diff --git a/src/plugins/vis_type_vega/public/vega_visualization.test.js b/src/plugins/vis_type_vega/public/vega_visualization.test.js new file mode 100644 index 00000000000000..a6ad6e4908bb48 --- /dev/null +++ b/src/plugins/vis_type_vega/public/vega_visualization.test.js @@ -0,0 +1,232 @@ +/* + * 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 $ from 'jquery'; + +import 'leaflet/dist/leaflet.js'; +import 'leaflet-vega'; +import { createVegaVisualization } from './vega_visualization'; + +import vegaliteGraph from './test_utils/vegalite_graph.json'; +import vegaGraph from './test_utils/vega_graph.json'; +import vegaMapGraph from './test_utils/vega_map_test.json'; + +import { VegaParser } from './data_model/vega_parser'; +import { SearchAPI } from './data_model/search_api'; + +import { createVegaTypeDefinition } from './vega_type'; + +import { + setInjectedVars, + setData, + setSavedObjects, + setNotifications, + setKibanaMapFactory, +} from './services'; +import { coreMock } from '../../../core/public/mocks'; +import { dataPluginMock } from '../../data/public/mocks'; +import { KibanaMap } from '../../maps_legacy/public/map/kibana_map'; + +jest.mock('./default_spec', () => ({ + getDefaultSpec: () => jest.requireActual('./test_utils/default.spec.json'), +})); + +jest.mock('./lib/vega', () => ({ + vega: jest.requireActual('vega'), + vegaLite: jest.requireActual('vega-lite'), +})); + +describe('VegaVisualizations', () => { + let domNode; + let VegaVisualization; + let vis; + let vegaVisualizationDependencies; + let vegaVisType; + + let mockWidth; + let mockedWidthValue; + let mockHeight; + let mockedHeightValue; + + const coreStart = coreMock.createStart(); + const dataPluginStart = dataPluginMock.createStartContract(); + + const setupDOM = (width = 512, height = 512) => { + mockedWidthValue = width; + mockedHeightValue = height; + domNode = document.createElement('div'); + + mockWidth = jest.spyOn($.prototype, 'width').mockImplementation(() => mockedWidthValue); + mockHeight = jest.spyOn($.prototype, 'height').mockImplementation(() => mockedHeightValue); + }; + + setKibanaMapFactory((...args) => new KibanaMap(...args)); + setInjectedVars({ + emsTileLayerId: {}, + enableExternalUrls: true, + esShardTimeout: 10000, + }); + setData(dataPluginStart); + setSavedObjects(coreStart.savedObjects); + setNotifications(coreStart.notifications); + + beforeEach(() => { + vegaVisualizationDependencies = { + core: coreMock.createSetup(), + plugins: { + data: dataPluginMock.createSetupContract(), + }, + }; + + vegaVisType = createVegaTypeDefinition(vegaVisualizationDependencies); + VegaVisualization = createVegaVisualization(vegaVisualizationDependencies); + }); + + describe('VegaVisualization - basics', () => { + beforeEach(async () => { + setupDOM(); + + vis = { + type: vegaVisType, + }; + }); + + afterEach(() => { + mockWidth.mockRestore(); + mockHeight.mockRestore(); + }); + + test('should show vegalite graph and update on resize (may fail in dev env)', async () => { + let vegaVis; + try { + vegaVis = new VegaVisualization(domNode, vis); + + const vegaParser = new VegaParser( + JSON.stringify(vegaliteGraph), + new SearchAPI({ + search: dataPluginStart.search, + uiSettings: coreStart.uiSettings, + injectedMetadata: coreStart.injectedMetadata, + }) + ); + await vegaParser.parseAsync(); + await vegaVis.render(vegaParser); + expect(domNode.innerHTML).toMatchSnapshot(); + + mockedWidthValue = 256; + mockedHeightValue = 256; + + await vegaVis._vegaView.resize(); + + expect(domNode.innerHTML).toMatchSnapshot(); + } finally { + vegaVis.destroy(); + } + }); + + test('should show vega graph (may fail in dev env)', async () => { + let vegaVis; + try { + vegaVis = new VegaVisualization(domNode, vis); + const vegaParser = new VegaParser( + JSON.stringify(vegaGraph), + new SearchAPI({ + search: dataPluginStart.search, + uiSettings: coreStart.uiSettings, + injectedMetadata: coreStart.injectedMetadata, + }) + ); + await vegaParser.parseAsync(); + + await vegaVis.render(vegaParser); + expect(domNode.innerHTML).toMatchSnapshot(); + } finally { + vegaVis.destroy(); + } + }); + + test('should show vega blank rectangle on top of a map (vegamap)', async () => { + let vegaVis; + try { + vegaVis = new VegaVisualization(domNode, vis); + const vegaParser = new VegaParser( + JSON.stringify(vegaMapGraph), + new SearchAPI({ + search: dataPluginStart.search, + uiSettings: coreStart.uiSettings, + injectedMetadata: coreStart.injectedMetadata, + }) + ); + await vegaParser.parseAsync(); + + mockedWidthValue = 256; + mockedHeightValue = 256; + + await vegaVis.render(vegaParser); + expect(domNode.innerHTML).toMatchSnapshot(); + } finally { + vegaVis.destroy(); + } + }); + + test('should add a small subpixel value to the height of the canvas to avoid getting it set to 0', async () => { + let vegaVis; + try { + vegaVis = new VegaVisualization(domNode, vis); + const vegaParser = new VegaParser( + `{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "marks": [ + { + "type": "text", + "encode": { + "update": { + "text": { + "value": "Test" + }, + "align": {"value": "center"}, + "baseline": {"value": "middle"}, + "xc": {"signal": "width/2"}, + "yc": {"signal": "height/2"} + fontSize: {value: "14"} + } + } + } + ] + }`, + new SearchAPI({ + search: dataPluginStart.search, + uiSettings: coreStart.uiSettings, + injectedMetadata: coreStart.injectedMetadata, + }) + ); + await vegaParser.parseAsync(); + + mockedWidthValue = 256; + mockedHeightValue = 256; + + await vegaVis.render(vegaParser); + const vegaView = vegaVis._vegaView._view; + expect(vegaView.height()).toBe(250.00000001); + } finally { + vegaVis.destroy(); + } + }); + }); +});