@spalger/kibana
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
108 lines (90 loc) • 3.61 kB
JavaScript
describe('Url Format', function () {
var $ = require('jquery');
var expect = require('expect.js');
var ngMock = require('ngMock');
var fieldFormats;
beforeEach(ngMock.module('kibana'));
beforeEach(ngMock.inject(function (Private) {
fieldFormats = Private(require('ui/registry/field_formats'));
}));
describe('Url Format', function () {
var Url;
beforeEach(function () {
Url = fieldFormats.getType('url');
});
it('ouputs a simple <a> tab by default', function () {
var url = new Url();
var $a = $(url.convert('http://elastic.co', 'html'));
expect($a.is('a')).to.be(true);
expect($a.size()).to.be(1);
expect($a.attr('href')).to.be('http://elastic.co');
expect($a.attr('target')).to.be('_blank');
expect($a.children().size()).to.be(0);
});
it('outputs an <image> if type === "img"', function () {
var url = new Url({ type: 'img' });
var $img = $(url.convert('http://elastic.co', 'html'));
expect($img.is('img')).to.be(true);
expect($img.attr('src')).to.be('http://elastic.co');
});
describe('url template', function () {
it('accepts a template', function () {
var url = new Url({ urlTemplate: 'url: {{ value }}' });
var $a = $(url.convert('url', 'html'));
expect($a.is('a')).to.be(true);
expect($a.size()).to.be(1);
expect($a.attr('href')).to.be('url: url');
expect($a.attr('target')).to.be('_blank');
expect($a.children().size()).to.be(0);
});
it('only outputs the url if the contentType === "text"', function () {
var url = new Url();
expect(url.convert('url', 'text')).to.be('url');
});
});
describe('label template', function () {
it('accepts a template', function () {
var url = new Url({ labelTemplate: 'extension: {{ value }}' });
var $a = $(url.convert('php', 'html'));
expect($a.is('a')).to.be(true);
expect($a.size()).to.be(1);
expect($a.attr('href')).to.be('php');
expect($a.html()).to.be('extension: php');
});
it('uses the label template for text formating', function () {
var url = new Url({ labelTemplate: 'external {{value }}'});
expect(url.convert('url', 'text')).to.be('external url');
});
it('can use the raw value', function () {
var url = new Url({
labelTemplate: 'external {{value}}'
});
expect(url.convert('url?', 'text')).to.be('external url?');
});
it('can use the url', function () {
var url = new Url({
urlTemplate: 'http://google.com/{{value}}',
labelTemplate: 'external {{url}}'
});
expect(url.convert('url?', 'text')).to.be('external http://google.com/url%3F');
});
});
describe('templating', function () {
it('ignores unknown variables', function () {
var url = new Url({ urlTemplate: '{{ not really a var }}' });
expect(url.convert('url', 'text')).to.be('');
});
it('does not allow executing code in variable expressions', function () {
window.SHOULD_NOT_BE_TRUE = false;
var url = new Url({ urlTemplate: '{{ (window.SHOULD_NOT_BE_TRUE = true) && value }}' });
expect(url.convert('url', 'text')).to.be('');
});
describe('', function () {
it('does not get values from the prototype chain', function () {
var url = new Url({ urlTemplate: '{{ toString }}' });
expect(url.convert('url', 'text')).to.be('');
});
});
});
});
});