Unit Tests for common/lib (#53736)

* converting mocha tests to jest

* adding a few lib tests

* adding more lib tests

* moving test files and adding autocomplete tests

* updating test definition

* fixing import and test definitions
This commit is contained in:
Tim Schnell 2020-01-10 14:02:11 -06:00 committed by GitHub
parent 51e07f27f2
commit c9e4304770
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 411 additions and 266 deletions

View file

@ -1,42 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import expect from '@kbn/expect';
import { getColorsFromPalette } from '../../lib/get_colors_from_palette';
import {
grayscalePalette,
gradientPalette,
} from '../../../canvas_plugin_src/functions/common/__tests__/fixtures/test_styles';
describe('getColorsFromPalette', () => {
it('returns the array of colors from a palette object when gradient is false', () => {
expect(getColorsFromPalette(grayscalePalette, 20)).to.eql(grayscalePalette.colors);
});
it('returns an array of colors with equidistant colors with length equal to the number of series when gradient is true', () => {
const result = getColorsFromPalette(gradientPalette, 16);
expect(result)
.to.have.length(16)
.and.to.eql([
'#ffffff',
'#eeeeee',
'#dddddd',
'#cccccc',
'#bbbbbb',
'#aaaaaa',
'#999999',
'#888888',
'#777777',
'#666666',
'#555555',
'#444444',
'#333333',
'#222222',
'#111111',
'#000000',
]);
});
});

View file

@ -1,49 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import expect from '@kbn/expect';
import { getLegendConfig } from '../get_legend_config';
describe('getLegendConfig', () => {
describe('show', () => {
it('hides the legend', () => {
expect(getLegendConfig(false, 2))
.to.only.have.key('show')
.and.to.have.property('show', false);
expect(getLegendConfig(false, 10))
.to.only.have.key('show')
.and.to.have.property('show', false);
});
it('hides the legend when there are less than 2 series', () => {
expect(getLegendConfig(false, 1))
.to.only.have.key('show')
.and.to.have.property('show', false);
expect(getLegendConfig(true, 1))
.to.only.have.key('show')
.and.to.have.property('show', false);
});
it('shows the legend when there are two or more series', () => {
expect(getLegendConfig('sw', 2)).to.have.property('show', true);
expect(getLegendConfig(true, 5)).to.have.property('show', true);
});
});
describe('position', () => {
it('sets the position of the legend', () => {
expect(getLegendConfig('nw')).to.have.property('position', 'nw');
expect(getLegendConfig('ne')).to.have.property('position', 'ne');
expect(getLegendConfig('sw')).to.have.property('position', 'sw');
expect(getLegendConfig('se')).to.have.property('position', 'se');
});
it("defaults to 'ne'", () => {
expect(getLegendConfig(true)).to.have.property('position', 'ne');
expect(getLegendConfig('foo')).to.have.property('position', 'ne');
});
});
});

View file

@ -7,184 +7,195 @@
jest.mock('ui/new_platform');
import { functionSpecs } from '../../__tests__/fixtures/function_specs';
import { getAutocompleteSuggestions } from './autocomplete';
import { getAutocompleteSuggestions, getFnArgDefAtPosition } from './autocomplete';
describe('getAutocompleteSuggestions', () => {
it('should suggest functions', () => {
const suggestions = getAutocompleteSuggestions(functionSpecs, '', 0);
expect(suggestions.length).toBe(functionSpecs.length);
expect(suggestions[0].start).toBe(0);
expect(suggestions[0].end).toBe(0);
describe('autocomplete', () => {
describe('getFnArgDefAtPosition', () => {
it('should return function definition for plot', () => {
const expression = 'plot ';
const def = getFnArgDefAtPosition(functionSpecs, expression, expression.length);
const plotFn = functionSpecs.find(spec => spec.name === 'plot');
expect(def.fnDef).toBe(plotFn);
});
});
it('should suggest functions filtered by text', () => {
const expression = 'pl';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, 0);
const nonmatching = suggestions.map(s => s.text).filter(text => !text.includes(expression));
expect(nonmatching.length).toBe(0);
expect(suggestions[0].start).toBe(0);
expect(suggestions[0].end).toBe(expression.length);
});
describe('getAutocompleteSuggestions', () => {
it('should suggest functions', () => {
const suggestions = getAutocompleteSuggestions(functionSpecs, '', 0);
expect(suggestions.length).toBe(functionSpecs.length);
expect(suggestions[0].start).toBe(0);
expect(suggestions[0].end).toBe(0);
});
it('should suggest arguments', () => {
const expression = 'plot ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const plotFn = functionSpecs.find(spec => spec.name === 'plot');
expect(suggestions.length).toBe(Object.keys(plotFn.args).length);
expect(suggestions[0].start).toBe(expression.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest functions filtered by text', () => {
const expression = 'pl';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, 0);
const nonmatching = suggestions.map(s => s.text).filter(text => !text.includes(expression));
expect(nonmatching.length).toBe(0);
expect(suggestions[0].start).toBe(0);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest arguments filtered by text', () => {
const expression = 'plot axis';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const plotFn = functionSpecs.find(spec => spec.name === 'plot');
const matchingArgs = Object.keys(plotFn.args).filter(key => key.includes('axis'));
expect(suggestions.length).toBe(matchingArgs.length);
expect(suggestions[0].start).toBe('plot '.length);
expect(suggestions[0].end).toBe('plot axis'.length);
});
it('should suggest arguments', () => {
const expression = 'plot ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const plotFn = functionSpecs.find(spec => spec.name === 'plot');
expect(suggestions.length).toBe(Object.keys(plotFn.args).length);
expect(suggestions[0].start).toBe(expression.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest values', () => {
const expression = 'shape shape=';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
expect(suggestions.length).toBe(shapeFn.args.shape.options.length);
expect(suggestions[0].start).toBe(expression.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest arguments filtered by text', () => {
const expression = 'plot axis';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const plotFn = functionSpecs.find(spec => spec.name === 'plot');
const matchingArgs = Object.keys(plotFn.args).filter(key => key.includes('axis'));
expect(suggestions.length).toBe(matchingArgs.length);
expect(suggestions[0].start).toBe('plot '.length);
expect(suggestions[0].end).toBe('plot axis'.length);
});
it('should suggest values filtered by text', () => {
const expression = 'shape shape=ar';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
const matchingValues = shapeFn.args.shape.options.filter((key: string) => key.includes('ar'));
expect(suggestions.length).toBe(matchingValues.length);
expect(suggestions[0].start).toBe(expression.length - 'ar'.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest values', () => {
const expression = 'shape shape=';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
expect(suggestions.length).toBe(shapeFn.args.shape.options.length);
expect(suggestions[0].start).toBe(expression.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest functions inside an expression', () => {
const expression = 'if {}';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
expect(suggestions.length).toBe(functionSpecs.length);
expect(suggestions[0].start).toBe(expression.length - 1);
expect(suggestions[0].end).toBe(expression.length - 1);
});
it('should suggest values filtered by text', () => {
const expression = 'shape shape=ar';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
const matchingValues = shapeFn.args.shape.options.filter((key: string) => key.includes('ar'));
expect(suggestions.length).toBe(matchingValues.length);
expect(suggestions[0].start).toBe(expression.length - 'ar'.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest arguments inside an expression', () => {
const expression = 'if {lt }';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
const ltFn = functionSpecs.find(spec => spec.name === 'lt');
expect(suggestions.length).toBe(Object.keys(ltFn.args).length);
expect(suggestions[0].start).toBe(expression.length - 1);
expect(suggestions[0].end).toBe(expression.length - 1);
});
it('should suggest functions inside an expression', () => {
const expression = 'if {}';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
expect(suggestions.length).toBe(functionSpecs.length);
expect(suggestions[0].start).toBe(expression.length - 1);
expect(suggestions[0].end).toBe(expression.length - 1);
});
it('should suggest values inside an expression', () => {
const expression = 'if {shape shape=}';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
expect(suggestions.length).toBe(shapeFn.args.shape.options.length);
expect(suggestions[0].start).toBe(expression.length - 1);
expect(suggestions[0].end).toBe(expression.length - 1);
});
it('should suggest arguments inside an expression', () => {
const expression = 'if {lt }';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
const ltFn = functionSpecs.find(spec => spec.name === 'lt');
expect(suggestions.length).toBe(Object.keys(ltFn.args).length);
expect(suggestions[0].start).toBe(expression.length - 1);
expect(suggestions[0].end).toBe(expression.length - 1);
});
it('should suggest values inside quotes', () => {
const expression = 'shape shape="ar"';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
const matchingValues = shapeFn.args.shape.options.filter((key: string) => key.includes('ar'));
expect(suggestions.length).toBe(matchingValues.length);
expect(suggestions[0].start).toBe(expression.length - '"ar"'.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should suggest values inside an expression', () => {
const expression = 'if {shape shape=}';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
expect(suggestions.length).toBe(shapeFn.args.shape.options.length);
expect(suggestions[0].start).toBe(expression.length - 1);
expect(suggestions[0].end).toBe(expression.length - 1);
});
it('should prioritize functions that start with text', () => {
const expression = 't';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const tableIndex = suggestions.findIndex(suggestion => suggestion.text.includes('table'));
const alterColumnIndex = suggestions.findIndex(suggestion =>
suggestion.text.includes('alterColumn')
);
expect(tableIndex).toBeLessThan(alterColumnIndex);
});
it('should suggest values inside quotes', () => {
const expression = 'shape shape="ar"';
const suggestions = getAutocompleteSuggestions(
functionSpecs,
expression,
expression.length - 1
);
const shapeFn = functionSpecs.find(spec => spec.name === 'shape');
const matchingValues = shapeFn.args.shape.options.filter((key: string) => key.includes('ar'));
expect(suggestions.length).toBe(matchingValues.length);
expect(suggestions[0].start).toBe(expression.length - '"ar"'.length);
expect(suggestions[0].end).toBe(expression.length);
});
it('should prioritize functions that match the previous function type', () => {
const expression = 'plot | ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const renderIndex = suggestions.findIndex(suggestion => suggestion.text.includes('render'));
const anyIndex = suggestions.findIndex(suggestion => suggestion.text.includes('any'));
expect(renderIndex).toBeLessThan(anyIndex);
});
it('should prioritize functions that start with text', () => {
const expression = 't';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const tableIndex = suggestions.findIndex(suggestion => suggestion.text.includes('table'));
const alterColumnIndex = suggestions.findIndex(suggestion =>
suggestion.text.includes('alterColumn')
);
expect(tableIndex).toBeLessThan(alterColumnIndex);
});
it('should alphabetize functions', () => {
const expression = '';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const metricIndex = suggestions.findIndex(suggestion => suggestion.text.includes('metric'));
const anyIndex = suggestions.findIndex(suggestion => suggestion.text.includes('any'));
expect(anyIndex).toBeLessThan(metricIndex);
});
it('should prioritize functions that match the previous function type', () => {
const expression = 'plot | ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const renderIndex = suggestions.findIndex(suggestion => suggestion.text.includes('render'));
const anyIndex = suggestions.findIndex(suggestion => suggestion.text.includes('any'));
expect(renderIndex).toBeLessThan(anyIndex);
});
it('should prioritize arguments that start with text', () => {
const expression = 'plot y';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const yaxisIndex = suggestions.findIndex(suggestion => suggestion.text.includes('yaxis'));
const defaultStyleIndex = suggestions.findIndex(suggestion =>
suggestion.text.includes('defaultStyle')
);
expect(yaxisIndex).toBeLessThan(defaultStyleIndex);
});
it('should alphabetize functions', () => {
const expression = '';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const metricIndex = suggestions.findIndex(suggestion => suggestion.text.includes('metric'));
const anyIndex = suggestions.findIndex(suggestion => suggestion.text.includes('any'));
expect(anyIndex).toBeLessThan(metricIndex);
});
it('should prioritize unnamed arguments', () => {
const expression = 'case ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const whenIndex = suggestions.findIndex(suggestion => suggestion.text.includes('when'));
const thenIndex = suggestions.findIndex(suggestion => suggestion.text.includes('then'));
expect(whenIndex).toBeLessThan(thenIndex);
});
it('should prioritize arguments that start with text', () => {
const expression = 'plot y';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const yaxisIndex = suggestions.findIndex(suggestion => suggestion.text.includes('yaxis'));
const defaultStyleIndex = suggestions.findIndex(suggestion =>
suggestion.text.includes('defaultStyle')
);
expect(yaxisIndex).toBeLessThan(defaultStyleIndex);
});
it('should alphabetize arguments', () => {
const expression = 'plot ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const yaxisIndex = suggestions.findIndex(suggestion => suggestion.text.includes('yaxis'));
const defaultStyleIndex = suggestions.findIndex(suggestion =>
suggestion.text.includes('defaultStyle')
);
expect(defaultStyleIndex).toBeLessThan(yaxisIndex);
});
it('should prioritize unnamed arguments', () => {
const expression = 'case ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const whenIndex = suggestions.findIndex(suggestion => suggestion.text.includes('when'));
const thenIndex = suggestions.findIndex(suggestion => suggestion.text.includes('then'));
expect(whenIndex).toBeLessThan(thenIndex);
});
it('should quote string values', () => {
const expression = 'shape shape=';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
expect(suggestions[0].text.trim()).toMatch(/^".*"$/);
});
it('should alphabetize arguments', () => {
const expression = 'plot ';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
const yaxisIndex = suggestions.findIndex(suggestion => suggestion.text.includes('yaxis'));
const defaultStyleIndex = suggestions.findIndex(suggestion =>
suggestion.text.includes('defaultStyle')
);
expect(defaultStyleIndex).toBeLessThan(yaxisIndex);
});
it('should not quote sub expression value suggestions', () => {
const expression = 'plot font=';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
expect(suggestions[0].text.trim()).toBe('{font}');
});
it('should quote string values', () => {
const expression = 'shape shape=';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
expect(suggestions[0].text.trim()).toMatch(/^".*"$/);
});
it('should not quote booleans', () => {
const expression = 'table paginate=true';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
expect(suggestions[0].text.trim()).toBe('true');
it('should not quote sub expression value suggestions', () => {
const expression = 'plot font=';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
expect(suggestions[0].text.trim()).toBe('{font}');
});
it('should not quote booleans', () => {
const expression = 'table paginate=true';
const suggestions = getAutocompleteSuggestions(functionSpecs, expression, expression.length);
expect(suggestions[0].text.trim()).toBe('true');
});
});
});

View file

@ -4,13 +4,15 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { isValidDataUrl, parseDataUrl } from '../dataurl';
import { isValidDataUrl, parseDataUrl } from './dataurl';
const BASE64_TEXT = 'data:text/plain;charset=utf-8;base64,VGhpcyBpcyBhIHRlc3Q=';
const BASE64_SVG =
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLz4=';
const BASE64_PIXEL =
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk8PxfDwADYgHJvQ16TAAAAABJRU5ErkJggg==';
const INVALID_BASE64_PIXEL =
'data:image/png;%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%01%00%00%00%01%08%06%00%00%00%1F%15%C4%89%0';
const RAW_TEXT = 'data:text/plain;charset=utf-8,This%20is%20a%20test';
const RAW_SVG =
@ -20,10 +22,13 @@ const RAW_PIXEL =
describe('dataurl', () => {
describe('isValidDataUrl', () => {
test('invalid data url', () => {
it('returns false for an invalid data url', () => {
expect(isValidDataUrl('somestring')).toBe(false);
});
test('valid data urls', () => {
it('returns false for an empty string', () => {
expect(isValidDataUrl('')).toBe(false);
});
it('returns true for valid data urls', () => {
expect(isValidDataUrl(BASE64_TEXT)).toBe(true);
expect(isValidDataUrl(BASE64_SVG)).toBe(true);
expect(isValidDataUrl(BASE64_PIXEL)).toBe(true);
@ -34,10 +39,13 @@ describe('dataurl', () => {
});
describe('dataurl.parseDataUrl', () => {
test('invalid data url', () => {
it('returns null for an invalid data url', () => {
expect(parseDataUrl('somestring')).toBeNull();
});
test('text data urls', () => {
it('returns null for an invalid base64 image', () => {
expect(parseDataUrl(INVALID_BASE64_PIXEL)).toBeNull();
});
it('returns correct values for text data urls', () => {
expect(parseDataUrl(BASE64_TEXT)).toEqual({
charset: 'utf-8',
data: null,
@ -55,7 +63,7 @@ describe('dataurl', () => {
mimetype: 'text/plain',
});
});
test('png data urls', () => {
it('returns correct values for png data urls', () => {
expect(parseDataUrl(RAW_PIXEL)).toBeNull();
expect(parseDataUrl(BASE64_PIXEL)).toEqual({
charset: undefined,
@ -66,7 +74,7 @@ describe('dataurl', () => {
mimetype: 'image/png',
});
});
test('svg data urls', () => {
it('returns correct values for svg data urls', () => {
expect(parseDataUrl(RAW_SVG)).toEqual({
charset: undefined,
data: null,

View file

@ -0,0 +1,15 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { RenderError } from './errors';
describe('errors', () => {
it('creates a test error', () => {
// eslint-disable-next-line new-cap
const throwTestError = () => RenderError();
expect(throwTestError.name).toBe('throwTestError');
});
});

View file

@ -0,0 +1,17 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { ExpressionFormHandlers } from './expression_form_handlers';
describe('ExpressionFormHandlers', () => {
it('executes destroy function', () => {
const handler = new ExpressionFormHandlers();
handler.onDestroy(() => {
return 'DESTROYED!';
});
expect(handler.destroy()).toBe('DESTROYED!');
});
});

View file

@ -0,0 +1,24 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { fetch, arrayBufferFetch } from './fetch';
describe('fetch', () => {
it('test fetch headers', () => {
expect(fetch.defaults.headers.Accept).toBe('application/json');
expect(fetch.defaults.headers['Content-Type']).toBe('application/json');
expect(fetch.defaults.headers['kbn-xsrf']).toBe('professionally-crafted-string-of-text');
});
it('test arrayBufferFetch headers', () => {
expect(arrayBufferFetch.defaults.headers.Accept).toBe('application/json');
expect(arrayBufferFetch.defaults.headers['Content-Type']).toBe('application/json');
expect(arrayBufferFetch.defaults.headers['kbn-xsrf']).toBe(
'professionally-crafted-string-of-text'
);
expect(arrayBufferFetch.defaults.responseType).toBe('arraybuffer');
});
});

View file

@ -0,0 +1,40 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import {
grayscalePalette,
gradientPalette,
} from '../../canvas_plugin_src/functions/common/__tests__/fixtures/test_styles';
import { getColorsFromPalette } from './get_colors_from_palette';
describe('getColorsFromPalette', () => {
it('returns the array of colors from a palette object when gradient is false', () => {
expect(getColorsFromPalette(grayscalePalette, 20)).toBe(grayscalePalette.colors);
});
it('returns an array of colors with equidistant colors with length equal to the number of series when gradient is true', () => {
const result = getColorsFromPalette(gradientPalette, 16);
expect(result).toEqual([
'#ffffff',
'#eeeeee',
'#dddddd',
'#cccccc',
'#bbbbbb',
'#aaaaaa',
'#999999',
'#888888',
'#777777',
'#666666',
'#555555',
'#444444',
'#333333',
'#222222',
'#111111',
'#000000',
]);
expect(result).toHaveLength(16);
});
});

View file

@ -4,11 +4,11 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { getFieldType } from '../get_field_type';
import {
emptyTable,
testTable,
} from '../../../canvas_plugin_src/functions/common/__tests__/fixtures/test_tables';
} from '../../canvas_plugin_src/functions/common/__tests__/fixtures/test_tables';
import { getFieldType } from './get_field_type';
describe('getFieldType', () => {
it('returns type of a field in a datatable', () => {

View file

@ -0,0 +1,40 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { getLegendConfig } from './get_legend_config';
describe('getLegendConfig', () => {
describe('show', () => {
it('hides the legend', () => {
expect(getLegendConfig(false, 2)).toHaveProperty('show', false);
expect(getLegendConfig(false, 10)).toHaveProperty('show', false);
});
it('hides the legend when there are less than 2 series', () => {
expect(getLegendConfig(false, 1)).toHaveProperty('show', false);
expect(getLegendConfig(true, 1)).toHaveProperty('show', false);
});
it('shows the legend when there are two or more series', () => {
expect(getLegendConfig('sw', 2)).toHaveProperty('show', true);
expect(getLegendConfig(true, 5)).toHaveProperty('show', true);
});
});
describe('position', () => {
it('sets the position of the legend', () => {
expect(getLegendConfig('nw')).toHaveProperty('position', 'nw');
expect(getLegendConfig('ne')).toHaveProperty('position', 'ne');
expect(getLegendConfig('sw')).toHaveProperty('position', 'sw');
expect(getLegendConfig('se')).toHaveProperty('position', 'se');
});
it("defaults to 'ne'", () => {
expect(getLegendConfig(true)).toHaveProperty('position', 'ne');
expect(getLegendConfig('foo')).toHaveProperty('position', 'ne');
});
});
});

View file

@ -0,0 +1,19 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { testTable } from '../../canvas_plugin_src/functions/common/__tests__/fixtures/test_tables';
import { Handlebars } from './handlebars';
describe('handlebars', () => {
it('registers math function and returns argument error', () => {
const template = Handlebars.compile("test math: {{math rows 'mean(price * quantity)' 2}}");
expect(template()).toBe('test math: MATH ERROR: first argument must be an array');
});
it('evaluates math function successfully', () => {
const template = Handlebars.compile("test math: {{math rows 'mean(price * quantity)' 2}}");
expect(template(testTable)).toBe('test math: 82164.33');
});
});

View file

@ -4,21 +4,21 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { hexToRgb } from '../hex_to_rgb';
import { hexToRgb } from './hex_to_rgb';
describe('hexToRgb', () => {
test('invalid hex', () => {
it('returns null for an invalid hex', () => {
expect(hexToRgb('hexadecimal')).toBeNull();
expect(hexToRgb('#00')).toBeNull();
expect(hexToRgb('#00000')).toBeNull();
});
test('shorthand', () => {
it('returns correct value for shorthand hex codes', () => {
expect(hexToRgb('#000')).toEqual([0, 0, 0]);
expect(hexToRgb('#FFF')).toEqual([255, 255, 255]);
expect(hexToRgb('#fff')).toEqual([255, 255, 255]);
expect(hexToRgb('#fFf')).toEqual([255, 255, 255]);
});
test('longhand', () => {
it('returns correct value for longhand hex codes', () => {
expect(hexToRgb('#000000')).toEqual([0, 0, 0]);
expect(hexToRgb('#ffffff')).toEqual([255, 255, 255]);
expect(hexToRgb('#fffFFF')).toEqual([255, 255, 255]);

View file

@ -4,7 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { isValidHttpUrl } from '../httpurl';
import { isValidHttpUrl } from './httpurl';
describe('httpurl.isValidHttpUrl', () => {
it('matches HTTP URLs', () => {

View file

@ -4,7 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { pivotObjectArray } from '../pivot_object_array';
import { pivotObjectArray } from './pivot_object_array';
interface Car {
make: string;

View file

@ -0,0 +1,41 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { missingImage } from '../../common/lib/missing_asset';
import { resolveFromArgs, resolveWithMissingImage } from './resolve_dataurl';
describe('resolve_dataurl', () => {
describe('resolveFromArgs', () => {
it('finds and returns the dataurl from args successfully', () => {
const args = {
name: 'dataurl',
argType: 'imageUpload',
dataurl: [missingImage, 'test2'],
};
expect(resolveFromArgs(args)).toBe(missingImage);
});
it('finds and returns null for invalid dataurl', () => {
const args = {
name: 'dataurl',
argType: 'imageUpload',
dataurl: ['invalid url', 'test2'],
};
expect(resolveFromArgs(args)).toBe(null);
});
});
describe('resolveWithMissingImage', () => {
it('returns valid dataurl', () => {
expect(resolveWithMissingImage(missingImage)).toBe(missingImage);
});
it('returns missingImage for invalid dataurl', () => {
expect(resolveWithMissingImage('invalid dataurl')).toBe(missingImage);
});
it('returns null for null dataurl', () => {
expect(resolveWithMissingImage(null)).toBe(null);
});
});
});

View file

@ -4,7 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { unquoteString } from '../unquote_string';
import { unquoteString } from './unquote_string';
describe('unquoteString', () => {
it('removes double quotes', () => {

View file

@ -0,0 +1,21 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { missingImage } from '../../common/lib/missing_asset';
import { isValidUrl } from './url';
describe('resolve_dataurl', () => {
it('returns valid dataurl', () => {
expect(isValidUrl(missingImage)).toBe(true);
});
it('returns valid http url', () => {
const httpurl = 'https://test.com/s/';
expect(isValidUrl(httpurl)).toBe(true);
});
it('returns false for invalid url', () => {
expect(isValidUrl('test')).toBe(false);
});
});