diff --git a/src/core_plugins/metric_vis/public/__tests__/metric_vis.js b/src/core_plugins/metric_vis/public/__tests__/metric_vis.js new file mode 100644 index 0000000000000..c3a3f77be37c9 --- /dev/null +++ b/src/core_plugins/metric_vis/public/__tests__/metric_vis.js @@ -0,0 +1,60 @@ +import $ from 'jquery'; +import ngMock from 'ng_mock'; +import expect from 'expect.js'; + +import VisProvider from 'ui/vis'; +import LogstashIndexPatternStubProvider from 'fixtures/stubbed_logstash_index_pattern'; +import MetricVisProvider from '../metric_vis'; + +describe('metric_vis', () => { + let setup = null; + + beforeEach(ngMock.module('kibana')); + beforeEach(ngMock.inject((Private, $rootScope) => { + setup = () => { + const Vis = Private(VisProvider); + const metricVisType = Private(MetricVisProvider); + const indexPattern = Private(LogstashIndexPatternStubProvider); + + indexPattern.stubSetFieldFormat('ip', 'url', { + urlTemplate: 'http://ip.info?address={{value}}', + labelTemplate: 'ip[{{value}}]' + }); + + const vis = new Vis(indexPattern, { + type: 'metric', + aggs: [{ id: '1', type: 'top_hits', schema: 'metric', params: { field: 'ip' } }], + }); + + const $el = $('
'); + const renderbot = metricVisType.createRenderbot(vis, $el); + const render = (esResponse) => { + renderbot.render(esResponse); + $rootScope.$digest(); + }; + + return { $el, render }; + }; + })); + + it('renders html value from field formatter', () => { + const { $el, render } = setup(); + + const ip = '235.195.237.208'; + render({ + hits: { total: 0, hits: [] }, + aggregations: { + '1': { + hits: { total: 1, hits: [{ _source: { ip } }] } + } + } + }); + + const $link = $el + .find('a[href]') + .filter(function () { return this.href.includes('ip.info'); }); + + expect($link).to.have.length(1); + expect($link.text()).to.be(`ip[${ip}]`); + }); +}); diff --git a/src/core_plugins/metric_vis/public/metric_vis_controller.js b/src/core_plugins/metric_vis/public/metric_vis_controller.js index aa3f0f131d6cd..2f98c3f9ae20f 100644 --- a/src/core_plugins/metric_vis/public/metric_vis_controller.js +++ b/src/core_plugins/metric_vis/public/metric_vis_controller.js @@ -4,7 +4,7 @@ import { uiModules } from 'ui/modules'; // didn't already const module = uiModules.get('kibana/metric_vis', ['kibana']); -module.controller('KbnMetricVisController', function ($scope, $element, Private, $sce) { +module.controller('KbnMetricVisController', function ($scope, $element, Private) { const tabifyAggResponse = Private(AggResponseTabifyProvider); const metrics = $scope.metrics = []; @@ -16,7 +16,7 @@ module.controller('KbnMetricVisController', function ($scope, $element, Private, metrics.push({ label: column.title, - value: $sce.trustAsHtml(value.toString('html')) + value: value.toString('html') }); }); }); diff --git a/src/test_utils/stub_index_pattern.js b/src/test_utils/stub_index_pattern.js index 7042224996df8..87c574aee53dc 100644 --- a/src/test_utils/stub_index_pattern.js +++ b/src/test_utils/stub_index_pattern.js @@ -1,19 +1,17 @@ import _ from 'lodash'; import sinon from 'sinon'; import Promise from 'bluebird'; -import { IndexedArray } from 'ui/indexed_array'; import { IndexPatternProvider } from 'ui/index_patterns/_index_pattern'; import { formatHit } from 'ui/index_patterns/_format_hit'; import { getComputedFields } from 'ui/index_patterns/_get_computed_fields'; import { RegistryFieldFormatsProvider } from 'ui/registry/field_formats'; import { IndexPatternsFlattenHitProvider } from 'ui/index_patterns/_flatten_hit'; -import { IndexPatternsFieldProvider } from 'ui/index_patterns/_field'; +import { IndexPatternsFieldListProvider } from 'ui/index_patterns/_field_list'; export default function (Private) { const fieldFormats = Private(RegistryFieldFormatsProvider); const flattenHit = Private(IndexPatternsFlattenHitProvider); - - const Field = Private(IndexPatternsFieldProvider); + const FieldList = Private(IndexPatternsFieldListProvider); function StubIndexPattern(pattern, timeField, fields) { this.id = pattern; @@ -39,17 +37,17 @@ export default function (Private) { this.formatHit = formatHit(this, fieldFormats.getDefaultInstance('string')); this.formatField = this.formatHit.formatField; - this._indexFields = function () { - this.fields = new IndexedArray({ - index: ['name'], - group: ['type'], - initialSet: fields.map(function (field) { - return new Field(this, field); - }, this) - }); + this._reindexFields = function () { + this.fields = new FieldList(this, this.fields || fields); + }; + + this.stubSetFieldFormat = function (fieldName, id, params) { + const FieldFormat = fieldFormats.byId[id]; + this.fieldFormatMap[fieldName] = new FieldFormat(params); + this._reindexFields(); }; - this._indexFields(); + this._reindexFields(); } return StubIndexPattern; diff --git a/src/ui/public/agg_types/__tests__/buckets/_range.js b/src/ui/public/agg_types/__tests__/buckets/_range.js index 37e3e235c9ebf..38aa6cf37cd8c 100644 --- a/src/ui/public/agg_types/__tests__/buckets/_range.js +++ b/src/ui/public/agg_types/__tests__/buckets/_range.js @@ -4,7 +4,7 @@ import expect from 'expect.js'; import resp from 'fixtures/agg_resp/range'; import { VisProvider } from 'ui/vis'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; -import { RegistryFieldFormatsProvider } from 'ui/registry/field_formats'; + describe('Range Agg', function () { const buckets = values(resp.aggregations[1].buckets); @@ -15,14 +15,9 @@ describe('Range Agg', function () { beforeEach(ngMock.inject(function (Private) { Vis = Private(VisProvider); indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - - const BytesFormat = Private(RegistryFieldFormatsProvider).byId.bytes; - - indexPattern.fieldFormatMap.bytes = new BytesFormat({ + indexPattern.stubSetFieldFormat('bytes', 'bytes', { pattern: '0,0.[000] b' }); - - indexPattern._indexFields(); })); describe('formating', function () { diff --git a/src/ui/public/field_editor/__tests__/field_editor.js b/src/ui/public/field_editor/__tests__/field_editor.js index e27d1105a8757..31bea302d6647 100644 --- a/src/ui/public/field_editor/__tests__/field_editor.js +++ b/src/ui/public/field_editor/__tests__/field_editor.js @@ -1,15 +1,14 @@ import $ from 'jquery'; import ngMock from 'ng_mock'; import expect from 'expect.js'; + import { IndexPatternsFieldProvider } from 'ui/index_patterns/_field'; -import { RegistryFieldFormatsProvider } from 'ui/registry/field_formats'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import _ from 'lodash'; describe('FieldEditor directive', function () { let Field; - let StringFormat; let $rootScope; let compile; @@ -27,12 +26,9 @@ describe('FieldEditor directive', function () { $rootScope = $injector.get('$rootScope'); Field = Private(IndexPatternsFieldProvider); - StringFormat = Private(RegistryFieldFormatsProvider).getType('string'); $rootScope.indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - // set the field format for this field - $rootScope.indexPattern.fieldFormatMap.time = new StringFormat({ foo: 1, bar: 2 }); - $rootScope.indexPattern._indexFields(); + $rootScope.indexPattern.stubSetFieldFormat('time', 'string', { foo: 1, bar: 2 }); $rootScope.field = $rootScope.indexPattern.fields.byName.time; compile = function () {